私はETLを開発しています。その抽出ステップでは、テーブルからデータを読み取る必要があります。
ユーザーによるそのテーブルへのアクセスが取り消される場合があります。したがって、ETLの失敗を回避するには、テーブルを読み取る前に、それを実行する権限があるかどうかを確認する必要があります。そうでない場合は、抽出ステップを飛ばして残りのETLを実行します。
ユーザーがテーブルの読み取り権限を持っているかどうかを確認する適切な方法は何ですか?
セキュリティ保護可能なオブジェクトに対する特定の有効なアクセス許可を確認するには、 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は、有効な権限を正しく判断する方法を知っている必要があります。この関数はその機能を公開します。