Hei*_*nzi 14 security sql-server permissions debugging
我知道我可以使用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
...
Run Code Online (Sandbox Code Playgroud)
这告诉我当前用户myTable
在数据库中是否具有 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
...
Run Code Online (Sandbox Code Playgroud)
不幸的是,我在 SQL Server 文档中找不到这样的函数。是否有提供此功能的工具或脚本?
您可以从下面的文章中找到一些有关安全性的好信息。
查看 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
Run Code Online (Sandbox Code Playgroud)