Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

In SQL Server 2005, come posso scrivere una query per elencare tutti gli accessi, il loro ruolo del server, corrispondere all'utente in tutti i ruoli db, db?

Non è possibile avere una query elenca tutti i database perché l'elenco è dinamico. La soluzione migliore è utilizzare sp_msforeachdb e fai in modo che un batch costruisca il risultato e lo restituisca:

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;

Puoi estenderlo per includere i ruoli del server e le appartenenze ai ruoli del database una volta individuata una forma corretta del set di risultati per aggregare tutte queste informazioni in un'unica tabella.