Как найти логин, имя пользователя базы данных или роли пользователя домена sqlserver, у которого нет своего логина? - PullRequest
9 голосов
/ 24 ноября 2010

Я создал пользователя для входа в систему и базы данных под названием «MYDOMAIN \ Domain Users».Мне нужно выяснить, какие роли выполняет пользователь, вошедший в домен, но все вызовы, чтобы получить текущего пользователя, возвращают имя пользователя домена, например."MYDOMAIN \ username", а не имя пользователя базы данных, например.«MYDOMAIN \ Domain Users».

Например, этот запрос возвращает «MYDOMAIN \ username»

select original_login(),suser_name(), suser_sname(), system_user, session_user,  current_user, user_name()

И этот запрос возвращает 0

select USER_ID()

Я хочуимя пользователя для запроса database_role_members есть ли функция, которая будет его возвращать или каким-либо другим способом я могу получить роли текущих пользователей?

1 Ответ

11 голосов
/ 09 декабря 2013

Я понимаю, что имя пользователя домена зарегистрировано в группе AD?

Вы должны иметь в виду, что пользователь может находиться в нескольких группах AD, и каждая из них может быть каким-то образом отображена в базе данных, которая может бытьнемного грязноТакже это означает, что вам нужно что-то с несколькими результатами:)

Попробуйте:

select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1

Я думаю, что он должен правильно захватывать все учетные записи Windows Group, которые будут связаны с конкретными пользователями.После этого вы можете присоединиться к нему для пользователей базы данных, т. Е.:

Select u.name from YourDB.sys.syslogins l
inner join YourDB.sys.sysusers u
on l.sid = u.sid
where l.loginname = ANY (select * from sys.server_principals where type_desc = 'WINDOWS_GROUP' and is_member(name) = 1)

Следует помнить, что, возможно, вам придется обрабатывать целые множества, а не отдельные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...