Нахождение каких разрешений имеет пользовательская роль базы данных - PullRequest
0 голосов
/ 24 сентября 2018

Я работаю с tsql в M SQL Server 2017. Как узнать, какие разрешения имеет пользовательская роль базы данных?

например, у меня есть база данных, в которой есть пользовательская роль под названием «ViewDefinitions» в базе данных.«а».

Я хочу написать запрос, который позволит мне увидеть, какие именно разрешения имеет эта роль.

1 Ответ

0 голосов
/ 24 сентября 2018

Для этого может потребоваться некоторая очистка, но для этой цели я использую специальный сценарий.

DECLARE @rolename VARCHAR(100) = 'testrole'

SELECT * FROM (
--database level permissions
SELECT    
    'Database' AS [permissionLevel]
    ,CASE WHEN perm.state <> 'W' THEN perm.state_desc ELSE 'GRANT' END
    + SPACE(1) + perm.permission_name + SPACE(1)
    + SPACE(1) + 'TO' + SPACE(1) + usr.name COLLATE database_default
    + CASE WHEN perm.state <> 'W' THEN SPACE(0) ELSE SPACE(1) + 'WITH GRANT OPTION' END AS [rolePermisison]
    ,perm.permission_name
    ,perm.state_desc
FROM    sys.database_permissions AS perm
    INNER JOIN
    sys.database_principals AS usr
    ON perm.grantee_principal_id = usr.principal_id
WHERE usr.name = @rolename
AND    perm.major_id = 0
UNION all
--object level permissions
SELECT    
    'Object' AS [permissionLevel]
    ,CASE WHEN perm.state <> 'W' THEN perm.state_desc ELSE 'GRANT' END
    + SPACE(1) + perm.permission_name + SPACE(1) + 'ON ' + QUOTENAME(SCHEMA_NAME(obj.schema_id)) + '.' + QUOTENAME(obj.name)
    + CASE WHEN cl.column_id IS NULL THEN SPACE(0) ELSE '(' + QUOTENAME(cl.name) + ')' END
    + SPACE(1) + 'TO' + SPACE(1) + QUOTENAME(usr.name) COLLATE database_default
    + CASE WHEN perm.state <> 'W' THEN SPACE(0) ELSE SPACE(1) + 'WITH GRANT OPTION' END
    ,perm.permission_name
    ,perm.state_desc
FROM    sys.database_permissions AS perm
    INNER JOIN
    sys.objects AS obj
    ON perm.major_id = obj.[object_id]
    INNER JOIN
    sys.database_principals AS usr
    ON perm.grantee_principal_id = usr.principal_id
    LEFT JOIN
    sys.columns AS cl
    ON cl.column_id = perm.minor_id AND cl.[object_id] = perm.major_id
    WHERE usr.name = @rolename
) A
ORDER BY permissionLevel, permission_name ASC, state_desc ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...