我想知道如何获取属于 SQL Server 2012 中固定和/或用户定义的服务器角色的权限列表。
在以前的版本中有一个存储过程权限管理但这在 2012 年已被弃用,并且它仅返回固定服务器角色的权限。
更新
我运行了以下查询并得到了下面的结果。我希望这个查询能给我想要的结果。然而,虽然它确实给了我用户定义角色的结果(MyTestRole
如下),但固定角色却无处可寻。
SELECT pri.name principal_name, per.class_desc, per.permission_name
FROM sys.server_permissions per
JOIN sys.server_principals pri ON per.grantee_principal_id = pri.principal_id
ORDER BY pri.name
结果:
##MS_AgentSigningCertificate## SERVER CONNECT SQL
##MS_PolicyEventProcessingLogin## SERVER CONNECT SQL
##MS_PolicySigningCertificate## SERVER CONTROL SERVER
##MS_PolicySigningCertificate## SERVER VIEW ANY DEFINITION
##MS_PolicyTsqlExecutionLogin## SERVER CONNECT SQL
##MS_PolicyTsqlExecutionLogin## SERVER VIEW ANY DEFINITION
##MS_PolicyTsqlExecutionLogin## SERVER VIEW SERVER STATE
##MS_SmoExtendedSigningCertificate## SERVER VIEW ANY DEFINITION
##MS_SQLAuthenticatorCertificate## SERVER AUTHENTICATE SERVER
##MS_SQLEnableSystemAssemblyLoadingUser## SERVER CONNECT SQL
##MS_SQLEnableSystemAssemblyLoadingUser## SERVER UNSAFE ASSEMBLY
##MS_SQLReplicationSigningCertificate## SERVER AUTHENTICATE SERVER
##MS_SQLReplicationSigningCertificate## SERVER VIEW ANY DEFINITION
##MS_SQLReplicationSigningCertificate## SERVER VIEW SERVER STATE
##MS_SQLResourceSigningCertificate## SERVER VIEW ANY DEFINITION
##MS_SSISServerCleanupJobLogin## SERVER CONNECT SQL
MyTestRole SERVER VIEW ANY DATABASE
NT AUTHORITY\SYSTEM SERVER ALTER ANY AVAILABILITY GROUP
NT AUTHORITY\SYSTEM SERVER CONNECT SQL
NT AUTHORITY\SYSTEM SERVER VIEW SERVER STATE
NT Service\MSSQLSERVER SERVER CONNECT SQL
NT SERVICE\ReportServer SERVER CONNECT SQL
NT SERVICE\SQLSERVERAGENT SERVER CONNECT SQL
NT SERVICE\SQLWriter SERVER CONNECT SQL
NT SERVICE\Winmgmt SERVER CONNECT SQL
public ENDPOINT CONNECT
public ENDPOINT CONNECT
public ENDPOINT CONNECT
public ENDPOINT CONNECT
public SERVER VIEW ANY DATABASE
<computer>\<username> SERVER CONNECT SQL
sa SERVER CONNECT SQL
答案1
查看 sys.server_permissions 和 sys.database_permissions。在这两种情况下,grantee_principal_id 将是角色的 principal_id(分别位于 sys.server_principals 或 sys.database_principals 中)。请记住,您可能还需要查看角色的角色成员资格(例如,在数据库中,我可以创建一个名为“MyRole”的角色,它是 db_datareader 内置角色的成员)。