Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich in SQL Server 2005 eine Abfrage schreiben, um alle Anmeldungen, ihre Serverrolle, den entsprechenden Benutzer in allen Datenbanken und Datenbankrollen aufzulisten?

Eine einzige Abfrage kann nicht alle Datenbanken auflisten, da die Liste dynamisch ist. Am besten verwenden Sie sp_msforeachdb und lassen Sie das Ergebnis in einem Batch konstruieren und zurückgeben:

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;

Sie können dies erweitern, um die Serverrollen- und Datenbankrollenmitgliedschaften einzubeziehen, sobald Sie eine geeignete Form der Ergebnismenge gefunden haben, um all diese Informationen in einer einzigen Tabelle zusammenzufassen.