次の方法で共有


PERMISSIONS (Transact-SQL)

現在のユーザーのステートメント権限、オブジェクト権限、または列権限を示すビットマップを含む値を返します。

重要   この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに、fn_my_permissions および Has_Perms_By_Name を使用してください。 PERMISSIONS 関数を継続して使用すると、パフォーマンスが低下する場合があります。

トピック リンク アイコン Transact-SQL 構文表記規則

構文

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 関数をオブジェクト権限に対して用する

次の例では、現在のユーザーが AdventureWorks2012 データベース内の Address テーブルにデータ行を挿入できるかどうかを判定します。

IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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 関数を、付与できる権限に対して使用する

次の例では、現在のユーザーが別のユーザーに AdventureWorks2012 データベース内の Address テーブルに対する INSERT 権限を許可できるかどうかを判定します。

IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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)