2

SQL Server 2005または2008のセキュリティ関連のカタログビューについてはよくわかりません。すべてのログイン、サーバーの役割、すべてのデータベースの対応するユーザー、すべてのデータベースの役割を1つのクエリに一覧表示したいと思います。どうすればクエリを書くことができますか?

使用するカタログビューがいくつかあることは知っていますが、それらの関係についてはよくわかりません。これらのカタログビューには、sys.database_role_member、sys.database_principals、sys.server_role_member、sys.server_principalsが含まれます。

ありがとう。

4

2 に答える 2

1

リストは動的であるため、1 つのクエリですべてのデータベースをリストすることはできません。あなたの最善の策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;

すべての情報を 1 つのテーブルに集約するための適切な結果セットの形を見つけたら、これを拡張してサーバー ロールとデータベース ロールのメンバーシップを含めることができます。

于 2010-08-09T17:50:47.250 に答える
1

以下は、割り当てられたサーバー レベルの役割を持つすべてのログインを一覧表示するクエリです。

select 
  login_name = pa.name, 
  --pa.principal_id, m.member_principal_id, m.role_principal_id,pb.principal_id,
  role_name = pb.name
from
  sys.server_principals pa
  inner join
  sys.server_role_members m on pa.principal_id = m.member_principal_id
  inner join
  sys.server_principals pb on m.role_principal_id = pb.principal_id
order by
  pa.name,
  pa.principal_id
于 2011-10-05T15:40:09.657 に答える