Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Dans SQL Server 2005, comment puis-je écrire une requête pour répertorier toutes les connexions, leur rôle de serveur, les utilisateurs correspondants dans toutes les bases de données, les rôles de base de données ?

Vous ne pouvez pas avoir une seule requête répertoriant toutes les bases de données car la liste est dynamique. Votre meilleur pari est d'utiliser sp_msforeachdb et demandez à un batch de construire le résultat et de le renvoyer :

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;

Vous pouvez étendre cela pour inclure les rôles de serveur et les appartenances aux rôles de base de données une fois que vous avez trouvé une forme d'ensemble de résultats appropriée pour agréger toutes ces informations dans une seule table.