次の方法で共有


sys.fn_my_permissions (Transact-SQL)

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric のSQL 分析エンドポイント Microsoft Fabric のウェアハウス

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

Transact-SQL 構文表記規則

構文

fn_my_permissions ( securable , 'securable_class' )

引数

securable

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

'securable_class'

アクセス許可が一覧表示されるセキュリティ保護可能なセキュリティ保護可能なクラスの名前。 securable_classsysname で、既定値は NULL です。

この引数は、APPLICATION ROLEASSEMBLYASYMMETRIC KEYCERTIFICATECONTRACTDATABASEENDPOINTFULLTEXT CATALOGLOGINMESSAGE TYPEOBJECTREMOTE SERVICE BINDINGROLESCHEMAROUTE SERVERSERVICESYMMETRIC KEYTYPEUSERXML SCHEMA COLLECTIONのいずれかの値である必要があります。 NULLの値は既定で SERVER に設定されます。

返される列

次の表に、 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

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

fn_my_permissions関数は、Azure Synapse Analytics 専用 SQL プールではサポートされていません。

アクセス許可

ロール public のメンバーシップが必要です。

A. サーバーに対する有効なアクセス許可を一覧表示する

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

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

B. データベースに対する有効なアクセス許可を一覧表示する

次の例では、AdventureWorks2022 データベースに対する呼び出し元の有効なアクセス許可の一覧が返されます。

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

C: ビューに対する有効なアクセス許可を一覧表示する

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

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

D. 別のユーザーの有効なアクセス許可を一覧表示する

次の例では、AdventureWorks2022 データベースの 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

E. 証明書に対する有効なアクセス許可を一覧表示する

次の例では、現在のデータベースに含まれる Shipping47 という名前の証明書に対する呼び出し元の有効なアクセス許可の一覧が返されます。

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

F. XML スキーマ コレクションに対する有効なアクセス許可を一覧表示する

次の例では、AdventureWorks2022 データベースに含まれる ProductDescriptionSchemaCollection という名前の XML スキーマ コレクションに対する呼び出し元の有効なアクセス許可の一覧が返されます。

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

G. データベース ユーザーに対する有効なアクセス許可を一覧表示する

次の例では、現在のデータベースに含まれる MalikAr という名前のユーザーに対する呼び出し元の有効なアクセス許可の一覧が返されます。

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

H. 別のログインの有効なアクセス許可を一覧表示する

次の例では、AdventureWorks2022 データベースの HumanResources スキーマに含まれる Employee テーブルに対する SQL Server ログイン WanidaBenshoof の有効なアクセス許可の一覧が返されます。 呼び出し元には、SQL Server ログイン WanidaBenshoofに対するIMPERSONATEアクセス許可が必要です。

EXECUTE AS LOGIN = 'WanidaBenshoof';

SELECT *
FROM fn_my_permissions('AdventureWorks2022.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name;

REVERT;
GO