有什么方法可以让我看到正在使用哪些权限来确定用户对给定对象的访问权限?我能够看到已将哪些权限授予数据库中的各种角色和用户,但是这些报告与实际发生的情况不一致时遇到了问题。
例如,下面的 SQL 将返回我对给定对象的有效权限:
SELECT * FROM fn_my_permissions('dbo.SomeTable', 'OBJECT')
ORDER BY subentity_name, permission_name ;
返回:
entity_name subentity_name permission_name
------------------- -------------- ---------------
dbo.SomeTable INSERT
dbo.SomeTable SELECT
dbo.SomeTable UPDATE
非常有用的是以下内容,它解释了每个行项目的来源:
entity_name subentity_name permission_name reason
------------------- -------------- --------------- ----------------
dbo.SomeTable INSERT dbowner
dbo.SomeTable SELECT role: datareader
dbo.SomeTable UPDATE role: sysadmin
请注意,网站上有一个类似的问题,但是接受的答案是返回设置的权限的查询,而不是所述权限的来源。
编辑:询问的原因是这里看到并解释了以前权限的“阴影” 。但是,如果我可以访问类似上面的内容,它将表明 SQL Server 认为我是给定角色的成员,从而为我指明了正确的方向......