sql >> Base de Datos >  >> RDS >> Sqlserver

En SQL Server 2005, ¿cómo puedo escribir una consulta para enumerar todos los inicios de sesión, su rol de servidor, el usuario correspondiente en todos los roles de db, db?

No puede hacer que una consulta enumere todas las bases de datos porque la lista es dinámica. Su mejor apuesta es usar sp_msforeachdb y haga que un lote construya el resultado y lo devuelva:

set nocount on;
create table  #result (sid varbinary(85), 
 server_principal_id int,
 database_id int,
 database_principal_id int);

exec ms_foreachdb 'insert into #result 
  (server_principal_id, database_id, database_principal_id)
select s.principal_id, 
  db_id(''?''),
  d.principal_id
from sys.server_principals s
join [?].sys.database_principals d
  on s.sid = d.sid;';

select * from #result;

Puede ampliar esto para incluir los roles de servidor y las membresías de roles de base de datos una vez que descubra una forma de conjunto de resultados adecuada para agregar toda esa información en una sola tabla.