web-dev-qa-db-ja.com

ユーザーがテーブルへの読み取りアクセス権を持っているかどうかを確認する

私はETLを開発しています。その抽出ステップでは、テーブルからデータを読み取る必要があります。

ユーザーによるそのテーブルへのアクセスが取り消される場合があります。したがって、ETLの失敗を回避するには、テーブルを読み取る前に、それを実行する権限があるかどうかを確認する必要があります。そうでない場合は、抽出ステップを飛ばして残りのETLを実行します。

ユーザーがテーブルの読み取り権限を持っているかどうかを確認する適切な方法は何ですか?

4
Hikari

セキュリティ保護可能なオブジェクトに対する特定の有効なアクセス許可を確認するには、 HAS_PERMS_BY_NAME *を使用します。

たとえば、現在のセキュリティコンテキストに、AdventureWorksサンプルデータベースのProduction.Productテーブルに対するSELECT権限があるかどうかを表示するには、次のようにします。

SELECT 
    HAS_PERMS_BY_NAME
    (
        N'Production.Product', 
        N'OBJECT', 
        N'SELECT'
    );

関連:保護可能なセキュリティ上の有効なアクセス許可を一覧表示するには、 sys.fn_my_permissions を使用します。

SELECT
    P.[entity_name],
    P.subentity_name,
    P.[permission_name]
FROM sys.fn_my_permissions
    (
        N'Production.Product', 
        N'OBJECT'
    ) AS P
ORDER BY
    P.subentity_name,
    P.[permission_name];

*組み込み関数はすべてを考慮に入れます。 SQL Serverは、有効な権限を正しく判断する方法を知っている必要があります。この関数はその機能を公開します。

8
Paul White 9