アプリにストアドプロシージャを実行する特権がどのようにあるかを理解するために何時間も費やしました。
[〜#〜] til [〜#〜]StackExchangeから:ON
句はGRANT
では省略可能であり、ロールの実行を許可できるすべて。構文を検証するために最善を尽くした後、このMSDNページの一番下を笑わなければなりませんでした。
GRANTオブジェクトのアクセス許可(Transact-SQL)
_CREATE ROLE Test
GRANT EXECUTE TO Test
_
わかりました。それでかっこいいです(あまり重要でない特権の原則ではありません)。
ただし:その付与を検出または検出するにはどうすればよいですか?
SQL Server Management Studioのすべてのログイン、ロール、ユーザー、スキーマ特権のGUIを調べてみましたが、このタイプの付与がどこにも特定されていません。
デバッグ中に、クエリで特権を列挙することについての質問が見つかりましたが、それらは関連していますが、このシナリオについては言及も回答も含まれていません。
特権を付与(または拒否)するこの方法を特定する最も信頼できる方法を探しています。
私は、この質問に対する Kin's answer からのクエリの結果に注意を払っていなかったか、正しく解釈していませんでした。
クエリの結果には、executeがリストされていますが、特定のオブジェクトタイプまたはオブジェクト名はありません。
GRANT EXECUTE TO [principal]
は単にGRANT EXECUTE ON DATABASE::<dbname> TO [principal];
のショートカットです
これは次の方法で確認できます。
SELECT dp.name
, perms.class_desc
, perms.permission_name
, perms.state_desc
FROM sys.database_permissions perms
INNER JOIN sys.database_principals dp ON perms.grantee_principal_id = dp.principal_id
WHERE dp.name = 'MyRole'
Max Vernonの回答を補足するには:
SELECT *
FROM sys.objects
WHERE object_id IN (
SELECT major_id
FROM sys.database_permissions perms
INNER JOIN sys.database_principals dp
ON perms.grantee_principal_id = dp.principal_id
WHERE dp.name = 'ProdConfigUsers'
)
AND name like '%%'
ORDER BY create_date DESC