Как узнать, какие роли базы данных связаны с данным пользователем? - PullRequest
0 голосов
/ 05 февраля 2020

В SSMS у меня есть пользователь X, и есть Y, Z и P Роли базы данных, как я могу проверить, какие роли добавляются пользователю X?

Что я пробовал:

В SSMS щелкните правой кнопкой мыши базу данных -> свойства -> Разрешения и просмотрите вкладку Явное для пользователя X. Я вижу разрешения, а не связь между ролью и пользователем. То же самое касается роли, в которой я заинтересован, я вижу только разрешения для роли.

РЕДАКТИРОВАТЬ: Что касается решения GUI, у меня нет опции Свойства, доступной ни для пользователей, ни для ролей.

enter image description here

Ответы [ 3 ]

4 голосов
/ 05 февраля 2020

Вы можете использовать объект sys.database_principals, чтобы узнать это:

SELECT u.[name] AS [UserName],
       r.[name] AS RoleName 
FROM sys.database_principals u
     JOIN sys.database_role_members drm ON u.principal_id = drm.member_principal_id
     JOIN sys.database_principals r ON  drm.role_principal_id = r.principal_id
WHERE u.[type] IN ('S','U') --SQL User or Windows User
  AND u.[name] = N'X';
1 голос
/ 05 февраля 2020

Через GUI:

Откройте базу данных, которую вы хотите проверить, откройте папку Безопасность, откройте папку Пользователи. Здесь у вас есть список определенных пользователей для этой базы данных. Щелкните правой кнопкой мыши пользователя -> Свойства -> Членство. Здесь вы видите определенные роли для этой базы данных (пользовательские роли также попадают в этот список). Пользователь имеет / является частью роли, если он помечен знаком X /.

Скрипт:

SELECT DP1.name AS DatabaseRoleName,   
   isnull (DP2.name, 'No members') AS DatabaseUserName   
 FROM sys.database_role_members AS DRM  
 RIGHT OUTER JOIN sys.database_principals AS DP1  
   ON DRM.role_principal_id = DP1.principal_id  
 LEFT OUTER JOIN sys.database_principals AS DP2  
   ON DRM.member_principal_id = DP2.principal_id  
WHERE DP1.type = 'R'
--AND DP2.name = 'YourUserName'
ORDER BY DP1.name; 

В котором перечислены все роли и пользователи, которые являются участником. этого (Скрипт из MSDN ссылка ). Этот скрипт переходит от ролей к пользователям. Для конкретного пользователя c заполните закомментированный параметр. Или просто используйте скрипт , предоставленный Larnu .

0 голосов
/ 15 февраля 2020

Я делаю это так:

select user_name(role_principal_id)
from sys.database_role_members
where member_principal_id = user_id('your_user');
...