2010-11-24 17 views
9

He creado un usuario de inicio de sesión y de base de datos llamado "MYDOMAIN \ Domain Users". Necesito encontrar qué funciones tiene un usuario de dominio conectado, pero todas las llamadas para que el usuario actual devuelva el nombre de usuario del dominio, por ejemplo. "MYDOMAIN \ username" no es el nombre de usuario de la base de datos, por ejemplo. "MYDOMAIN \ Domain Users".¿Cómo encontrar loginname, database username, o roles del usuario de dominio sqlserver que no tiene su propio nombre de usuario?

Por ejemplo, esta consulta devuelve "dominio \ nombre de usuario"

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

Y esta consulta devuelve 0

select USER_ID() 

quiero que el nombre de usuario para consultar database_role_members ¿hay alguna función que devolverá o de otra manera puedo obtener los roles de los usuarios actuales?

Respuesta

9

Entiendo que el inicio de sesión de los Usuarios de Dominio está mapeado en el grupo de AD?

Debe tener en cuenta que el usuario puede estar en varios grupos de AD y cada uno de ellos se puede asignar de alguna manera en la base de datos, lo que puede ser un poco complicado. También significa que usted necesita algo con múltiples resultados :)

Prueba esto:

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

creo que debería agarrar correctamente todos los inicios de sesión de grupo de Windows que serán vinculados con los usuarios particulares. Después de que usted puede unirse a ella para los usuarios de bases de datos es decir .:

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) 

Hay que tener en cuenta que - todo el camino - puede que tenga que manejar conjuntos enteros en lugar de valores individuales.

Cuestiones relacionadas