Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

No SQL Server 2005, como posso escrever uma consulta para listar todos os logons, suas funções de servidor, usuários correspondentes em todos os db, db role?


Você não pode ter uma lista de consulta de todos os bancos de dados porque a lista é dinâmica. Sua melhor aposta é usar sp_msforeachdb e faça com que um lote construa o resultado e o retorne:
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;

Você pode estender isso para incluir as funções de servidor e associações de funções de banco de dados depois de descobrir uma forma de conjunto de resultados adequada para agregar todas essas informações em uma única tabela.