我如何找出*为什么*用户具有某些有效权限?


14

我知道我可以通过使用sys.fn_my_permissions以下命令查询有效权限:

USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') 

 entity_name | subentity_name | permission_name 
------------------------------------------------
 dbo.myTable |                | SELECT          
 dbo.myTable |                | UPDATE          
 ...

这告诉我当前用户是否对myTabledatabase 具有SELECT,INSERT,UPDATE等权限myDatabase

是否可以轻松找出用户为何具有这些权限?例如,我很想拥有一个fn_my_permissions_ex输出附加reason列的函数:

USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') 

 entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
 dbo.myTable |                | SELECT          | granted to database role public
 dbo.myTable |                | UPDATE          | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
 ...

不幸的是,我在SQL Server文档中找不到这样的功能。是否有提供此功能的工具或脚本?


为什么不将其导出为txt文件?您使用的是什么操作系统?
jcho360

1
@ jcho360:没有功能fn_my_permission_ex,因此我无法导出任何内容。我问是否有一个功能或具有该功能的工具。
海因兹

您正在使用SSMS吗?
jcho360

1
很棒的问题。我一直在努力解决这一问题。fn_my_permissions有点用,但是经常显示我无法跟踪到源的权限。
PseudoToad 2014年

Answers:


8

您可以从下面的文章中找到一些有关安全性的良好信息。

查看SQL Server权限 TechRepublic http://tek.io/KfzEyp

除了:

以下查询使用sys.database_permissions系统视图指示哪些用户在当前数据库中具有特定权限。

SELECT
        dp.class_desc
       ,dp.permission_name
       ,dp.state_desc
       ,ObjectName = OBJECT_NAME(major_id)
       ,GranteeName = grantee.name
       ,GrantorName = grantor.name
    FROM
        sys.database_permissions dp
        JOIN sys.database_principals grantee
        ON dp.grantee_principal_id = grantee.principal_id
        JOIN sys.database_principals grantor
        ON dp.grantor_principal_id = grantor.principal_id
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.