sys.fn_my_permissions (Transact-SQL)

セキュリティ保護可能なリソースについて、プリンシパルに許可されている有効な権限の一覧を返します。関連する関数は HAS_PERMS_BY_NAME です。

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

構文

fn_my_permissions (securable,'securable_class')

引数

  • securable
    セキュリティ保護可能なリソースの名前を指定します。セキュリティ保護可能なリソースがサーバーまたはデータベースの場合、この値は NULL に設定する必要があります。securable は sysname 型のスカラー式で、マルチパート名を指定できます。

  • 'securable_class'
    権限を一覧表示する、セキュリティ保護可能なリソースのクラスの名前を指定します。securable_class のデータ型は sysname です。securable_class には、APPLICATION ROLE、ASSEMBLY、ASYMMETRIC KEY、CERTIFICATE、CONTRACT、DATABASE、ENDPOINT、FULLTEXT CATALOG、LOGIN、MESSAGE TYPE、OBJECT、REMOTE SERVICE BINDING、ROLE、ROUTE、SCHEMA、SERVER、SERVICE、SYMMETRIC KEY、TYPE、USER、XML SCHEMA COLLECTION のいずれかを指定する必要があります。

返される列

次の表は、fn_my_permissions によって返される列の一覧です。返される各行によって、セキュリティ保護可能なリソースについて、現在のセキュリティ コンテキストで保持されている権限の詳細が示されます。クエリが失敗した場合は NULL が返されます。

列名

説明

entity_name

sysname

表示される有効な権限の対象となる、セキュリティ保護可能なリソースの名前。

subentity_name

sysname

セキュリティ保護可能なリソースに列がある場合は列名、それ以外の場合は NULL。

permission_name

nvarchar

権限の名前。

説明

このテーブル値関数では、指定したセキュリティ保護可能なリソースについて、呼び出し元のプリンシパルが保持している有効な権限の一覧が返されます。有効な権限とは、次のような権限です。

  • プリンシパルに直接許可されており、拒否されていない権限。

  • プリンシパルが保持する上位レベルの権限に暗黙的に含まれており、拒否されていない権限。

  • プリンシパルがメンバーとなっているロールまたはグループに許可されており、拒否されていない権限。

  • プリンシパルがメンバーとなっているロールまたはグループが保持しており、拒否されていない権限。

権限の評価は、常に呼び出し元のセキュリティ コンテキストで実行されます。プリンシパルに有効な権限があるかどうかを評価するには、呼び出し元に、そのプリンシパルに対する IMPERSONATE 権限が必要です。

スキーマ レベルのエンティティの場合、1 部、2 部、または 3 部構成の、NULL でない名前を使用できます。データベース レベルのエンティティの場合、1 部構成の名前を使用できます。NULL 値は "現在のデータベース" を示します。サーバー自身の場合は、"現在のデータベース" を表す NULL 値を指定する必要があります。fn_my_permissions ではリンク サーバーに対する権限はチェックできません。

次のクエリでは、セキュリティ保護可能な組み込みクラスの一覧が返されます。

SELECT DISTINCT class_desc FROM fn_builtin_permissions(default)
    ORDER BY class_desc;
GO

securable または securable_class の値に DEFAULT を指定した場合、値は NULL として解釈されます。

A. サーバーの有効な権限を一覧表示する

次の例では、サーバーについて、呼び出し元が保持している有効な権限の一覧を返します。

SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO

B. データベースの有効な権限を一覧表示する

次の例では、AdventureWorks2008R2 データベースについて、呼び出し元が保持している有効な権限の一覧を返します。

USE AdventureWorks2008R2;
SELECT * FROM fn_my_permissions (NULL, 'DATABASE');
GO

C. ビューの有効な権限を一覧表示する

次の例では、AdventureWorks2008R2 データベースの Sales スキーマにある vIndividualCustomer ビューについて、呼び出し元が保持している有効な権限の一覧を返します。

USE AdventureWorks2008R2;
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT') 
    ORDER BY subentity_name, permission_name ; 
GO 

D. 別のユーザーの有効な権限を一覧表示する

次の例では、AdventureWorks2008R2 データベースの HumanResources スキーマにある Employee テーブルについて、データベース ユーザー Wanida が保持している有効な権限の一覧を返します。呼び出し元には、ユーザー Wanida に対する IMPERSONATE 権限が必要です。

EXECUTE AS USER = 'Wanida';
SELECT * FROM fn_my_permissions('HumanResources.Employee', 'OBJECT') 
    ORDER BY subentity_name, permission_name ;  
REVERT;
GO

C. 証明書の有効な権限を一覧表示する

次の例では、現在のデータベースにある Shipping47 という証明書について、呼び出し元が保持している有効な権限の一覧を返します。

SELECT * FROM fn_my_permissions('Shipping47', 'CERTIFICATE');
GO

F. XML スキーマ コレクションの有効な権限を一覧表示する

次の例では、AdventureWorks2008R2 データベースにある ProductDescriptionSchemaCollection という XML スキーマ コレクションについて、呼び出し元が保持している有効な権限の一覧を返します。

USE AdventureWorks2008R2;
SELECT * FROM fn_my_permissions('ProductDescriptionSchemaCollection',
    'XML SCHEMA COLLECTION');
GO

G. データベース ユーザーの有効な権限を一覧表示する

次の例では、現在のデータベースに存在する MalikAr というユーザーについて、呼び出し元が保持している有効な権限の一覧を返します。

SELECT * FROM fn_my_permissions('MalikAr', 'USER');
GO

H. 別のログインの有効な権限を一覧表示する

次の例では、AdventureWorks2008R2 データベースの HumanResources スキーマにある Employee テーブルについて、SQL Server ログイン WanidaBenshoof が保持している有効な権限の一覧を返します。呼び出し元には、SQL Server ログイン WanidaBenshoof に対する IMPERSONATE 権限が必要です。

EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT * FROM fn_my_permissions('AdventureWorks2008R2.HumanResources.Employee', 'OBJECT') 
    ORDER BY subentity_name, permission_name ;  
REVERT;
GO