sql >> Databasteknik >  >> RDS >> Sqlserver

I SQL Server 2005, hur kan jag skriva en fråga för att lista alla inloggningar, deras serverroll, motsvarande användare i alla db, db roller?

Du kan inte ha en frågelista över alla databaser eftersom listan är dynamisk. Det bästa är att använda sp_msforeachdb och låt en batch konstruera resultatet och returnera det:

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;

Du kan utöka detta till att inkludera serverroller och databasrollmedlemskap när du väl har hittat en korrekt resultatuppsättningsform för att samla all information i en enda tabell.



  1. Oracle fungerar med Hibernate

  2. Kolumn med DEFAULT-funktion, pass parameter eller bestämma infogningsvärden?

  3. Oracle 10g:Kan CLOB-datalängder vara mindre än 4 000?

  4. Ändra bord utan att låsa hela bordet