Я хотел бы знать, как получить список разрешений, которые принадлежат фиксированным и / или определяемым пользователем ролям сервера в SQL Server 2012.
В предыдущих версиях был sproc sp_srvrolepermission но это устарело в 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
Взгляните на sys.server_permissions и sys.database_permissions. В обоих случаях grantee_principal_id будет основным_id роли (находится в sys.server_principals или sys.database_principals соответственно). Имейте в виду, что вам также может потребоваться троллинг членства в ролях для роли (т. Е. В базе данных я могу создать роль с именем «MyRole», которая является членом встроенной роли db_datareader).