我想创建一个 T-SQL 查询来检查哪些登录在服务器类型安全对象中具有“查看服务器状态”权限。如何实现?
来自 mssqltips 的查询没有显示以下内容:
http://www.mssqltips.com/tip.asp?tip=1718
SELECT prin.[name] [User], sec.state_desc + ' ' + sec.permission_name [Permission]
FROM [sys].[database_permissions] sec
JOIN [sys].[database_principals] prin
ON sec.[grantee_principal_id] = prin.[principal_id]
WHERE sec.class = 0
ORDER BY [User], [Permission];
答案1
您需要检查服务器级别的权限。您的查询检查数据库级别的权限。您可以使用 sys.server_permissions 和 sys.server_principals 视图来实现这一点。例如:
SELECT pr.*
FROM sys.server_permissions p
INNER JOIN sys.server_principals pr ON p.grantee_principal_id = pr.principal_id
WHERE p.type = 'VWSS'
看这有关 sys.server_permissions 视图的更多信息。