Al mirar las propiedades de un inicio de sesión particular, es posible ver una lista de usuarios asignados a ese inicio de sesión:
Perfilé SQL Server Management Studio (SSMS) y veo que SSMS se conecta a cada base de datos de una en una y recupera información de sys.database_permissions
¿Es posible escribir una sola consulta que recupere la información de mapeo del usuario que se muestra arriba o me veo obligado a usar un cursor o sp_MSforeachdb o algo así?
sql-server
sql-server-2008
permissions
security
logins
Michael J Swart
fuente
fuente
Respuestas:
Aquí hay una forma de usar SQL dinámico. Realmente no hay ninguna forma de hacer esto sin iterar, pero este enfoque es mucho más seguro que las opciones no documentadas, no compatibles y con errores
sp_MSforeachdb
.Esto obtendrá una lista de todas las bases de datos en línea, el usuario asignado (si existe) junto con el nombre de esquema predeterminado y una lista separada por comas de los roles a los que pertenecen.
fuente
Esta secuencia de comandos se modifica ligeramente de una secuencia de comandos mencionada que hará lo que está buscando. Reemplace 'ThursdayClass' con el inicio de sesión para el que necesita información. https://www.simple-talk.com/sql/sql-tools/the-sqlcmd-workbench/
fuente
Prueba sp_dbpermissions . Probablemente te dará más información de la que necesitas, pero hará lo que quieras.
Una vez que esté instalado, ejecute esto.
Advertencia justa en el momento en que coincide "me gusta", por lo que si otros inicios de sesión son similares y coinciden, también los verá. Por ejemplo,
MyLogin
yMyLoginForThis
ambos coincidiránMyLogin
. Si eso es un problema, tengo una versión que aún no he lanzado, donde puedes desactivarla. Avísame y te lo puedo enviar por correo electrónico.fuente
Aquí hay una solución de PowerShell:
fuente
Lamentablemente, tendrá que recorrer todas las bases de datos para obtener la información. Querrá unirse
sys.database_principals
asys.server_principals
cada base de datos que coincida en el SID.No lo use
sp_msforeachdb
ya que se sabe que a veces pierde bases de datos.fuente
Estaba buscando una respuesta similar y encontré esto: https://www.pythian.com/blog/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/ . Y sí, usa el temido sp_MSforeachDB, pero creo que ese tipo tiene una mala reputación a veces ... ;-)
Publicaré el SQL aquí para copiar y pegar fácilmente (¡ NO me estoy dando crédito por esto, solo lo hago fácilmente accesible!):
fuente
Debajo de Consulta devolverá las asignaciones para el DbName solicitado
La consulta mejorada está debajo
fuente
¿Qué hay de
EXEC master..sp_msloginmappings
?fuente
sp_msloginmappings
que no está documentado y no es compatible antes de publicar?