如何检测授予角色的执行权限(未使用 ON 子句时)

col*_*arn 7 sql-server permissions role sql-server-2012

我只是花了几个小时试图弄清楚应用程序如何有权限执行存储过程。

来自 StackExchange 的TIL:事实证明该ON子句对于 是可选的GRANT,允许授予角色对所有内容执行。在我尽力验证语法之后,我不得不嘲笑这个 MSDN 页面的最底部。

授予对象权限 (Transact-SQL)

CREATE ROLE Test
GRANT EXECUTE TO Test
Run Code Online (Sandbox Code Playgroud)

好的,这很酷(不是最小特权原则)。

但是:我如何发现或检测该授权?

我尝试查看所有 SQL Server Management Studio 登录名、角色、用户和架构权限 GUI,但在任何地方都没有发现这种类型的授权。

在调试时,我发现了有关在查询中枚举权限的问题,虽然这些问题是相关的,但这里的答案既没有提到也没有涵盖这种情况:

我正在寻找识别这种授予(或拒绝)特权方法的最可靠方法。

Han*_*non 7

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'
Run Code Online (Sandbox Code Playgroud)


col*_*arn 2

我没有注意或正确解释Kin对此问题的回答的查询结果:

列出给定角色的所有权限?

在查询结果中,您将看到列出了执行,但没有特定的对象类型或对象名称!