PERMISSIONS (Transact-SQL)
現在のユーザーのステートメント権限、オブジェクト権限、または列権限を示すビットマップを含む値を返します。
重要 この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。代わりに、fn_my_permissions を使用してください。
構文
PERMISSIONS ( [ objectid [ , 'column' ] ] )
引数
- objectid
セキュリティ保護可能なリソースの ID を指定します。objectid を指定しない場合、ビットマップ値には現在のユーザーのステートメント権限が含まれます。それ以外の場合、ビットマップ値には現在のユーザーのセキュリティ保護可能なリソースについての権限が含まれます。指定したセキュリティ保護可能なリソースは、現在のデータベースに存在する必要があります。objectid 値を確認するには、OBJECT_ID 関数を使用します。
- 'column'
権限情報を返す列の名前を指定します (省略可能)。objectid で指定したテーブル内の有効な列名を指定する必要があります。
戻り値の型
int
解説
PERMISSIONS は、現在のユーザーがステートメントを実行するのに必要な権限を所有しているか、または別のユーザーに対して権限を許可 (GRANT) できるかを調べるときに使用できます。
返される権限情報は 32 ビットのビットマップです。
下位 16 ビットは、ユーザーに許可されている権限と、現在のユーザーがメンバである Windows グループまたは固定サーバー ロールに適用されている権限を表します。たとえば、objectid を指定せず、戻り値 66 (16 進値の 0x42) が返された場合は、ユーザーが CREATE TABLE ステートメント (10 進値の 2) と BACKUP DATABASE ステートメント (10 進値の 64) を実行する権限を所有していることがわかります。
上位 16 ビットは、ユーザーが他のユーザーに許可 (GRANT) できる権限を表します。上位 16 ビットの解釈は、次の表の下位 16 ビットを左側に 16 ビット移す (65,536 を乗算する) だけです。たとえば、objectid を指定した場合、0x8 (10 進値の 8) は INSERT 権限を表すビットです。これに対して、0x80000 (10 進値の 524288) は、524288 = 8 × 65536 であり、INSERT 権限を許可 (GRANT) できることを表します。
ロールのメンバシップにより、ステートメントの実行権限のないユーザーでも、他のユーザーに権限を許可できる場合があります。
次の表は、objectid を指定しない場合の、ステートメント権限に使用されるビットです。
ビット (10 進) | ビット (16 進) | ステートメント権限 |
---|---|---|
1 |
0x1 |
CREATE DATABASE (master データベースのみ) |
2 |
0x2 |
CREATE TABLE |
4 |
0x4 |
CREATE PROCEDURE |
8 |
0x8 |
CREATE VIEW |
16 |
0x10 |
CREATE RULE |
32 |
0x20 |
CREATE DEFAULT |
64 |
0x40 |
BACKUP DATABASE |
128 |
0x80 |
BACKUP LOG |
256 |
0x100 |
予約済み |
次の表は、objectid だけを指定したときに返される、オブジェクト権限に使用されるビットです。
ビット (10 進) | ビット (16 進) | ステートメント権限 |
---|---|---|
1 |
0x1 |
SELECT ALL |
2 |
0x2 |
UPDATE ALL |
4 |
0x4 |
REFERENCES ALL |
8 |
0x8 |
INSERT |
16 |
0x10 |
DELETE |
32 |
0x20 |
EXECUTE (プロシージャのみ) |
4096 |
0x1000 |
SELECT ANY (少なくとも 1 列) |
8192 |
0x2000 |
UPDATE ANY |
16384 |
0x4000 |
REFERENCES ANY |
次の表は、objectid と column の両方を指定したときに返される、列レベルのオブジェクト権限に使用されるビットです。
ビット (10 進) | ビット (16 進) | ステートメント権限 |
---|---|---|
1 |
0x1 |
SELECT |
2 |
0x2 |
UPDATE |
4 |
0x4 |
REFERENCES |
指定したパラメータが NULL の場合や無効な場合 (存在しない objectid や column が指定されている場合など) は、NULL が返されます。適用されない権限 (テーブルに対するビット 0x20 の EXECUTE 権限など) のビット値は定義されていません。
PERMISSIONS 関数で返すビットマップ内の各ビットを指定するには、ビットごとの AND 演算子 (&) を使用します。
現在のデータベース内のユーザーに与えられている権限の一覧を返すには、sp_helprotect システム ストアド プロシージャを使用することもできます。
例
A. PERMISSIONS 関数をステートメント権限に対して使用する
次の例では、現在のユーザーが CREATE TABLE
ステートメントを実行できるかどうかを判定します。
IF PERMISSIONS()&2=2
CREATE TABLE test_table (col1 INT)
ELSE
PRINT 'ERROR: The current user cannot create a table.';
B. PERMISSIONS 関数をオブジェクト権限に対して用する
次の例では、現在のユーザーが AdventureWorks
データベース内の Address
テーブルにデータ行を挿入できるかどうかを判定します。
IF PERMISSIONS(OBJECT_ID('AdventureWorks.Person.Address','U'))&8=8
PRINT 'The current user can insert data into Person.Address.'
ELSE
PRINT 'ERROR: The current user cannot insert data into Person.Address.';
C. PERMISSIONS 関数を、付与できる権限に対して使用する
次の例では、現在のユーザーが別のユーザーに AdventureWorks
データベース内の Address
テーブルに対する INSERT 権限を許可できるかどうかを判定します。
IF PERMISSIONS(OBJECT_ID('AdventureWorks.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';
参照
関連項目
DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
システム関数 (Transact-SQL)
fn_my_permissions (Transact-SQL)