В SQL Server 2005, как я могу написать запрос, чтобы перечислить все логин, их роль сервера, соответствие пользователя во всех ролях db, db? - PullRequest
2 голосов
/ 09 августа 2010

Я не совсем уверен насчет представлений каталога, связанных с безопасностью в SQL Server 2005 или 2008. Я хочу перечислить все логины, их роли сервера, их соответствующих пользователей во всей базе данных, все роли базы данных в одном запросе.Как я могу написать запрос?

Я знаю, что есть некоторые представления каталога, но я не знаком с их отношением.К этим представлениям каталога относятся: sys.database_role_member, sys.database_principals, sys.server_role_member, sys.server_principals .

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Вот запрос, в котором перечислены все имена входа с назначенными им ролями на уровне сервера.

1 голос
/ 09 августа 2010

Вы не можете иметь один список запросов для всех баз данных, потому что список динамический. Лучше всего использовать sp_msforeachdb, получить пакетный набор результата и вернуть его:

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;

Вы можете расширить это, чтобы включить роли серверов и членство в ролях базы данных, как только вы определите правильную форму набора результатов для агрегирования всей этой информации в одну таблицу.

...