Назад | Перейти на главную страницу

Получение разрешений в фиксированных или определяемых пользователем ролях сервера в SQL Server 2012

Я хотел бы знать, как получить список разрешений, которые принадлежат фиксированным и / или определяемым пользователем ролям сервера в 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).