web-dev-qa-db-ja.com

SQLのオブジェクト(テーブル)に対する権限を持つユーザーとロールのリスト

あなたは私がそのような簡単な質問をググることができると思います。しかし、何をしようとも、レンガの壁にぶつかった。

テーブルへの権限を持つロールのリストを検索するTSQLステートメントとは何ですか?

擬似コードは次のようになります。

SELECT role_name 
FROM permissions 
where object_name = 'the_table_i_need_to_know_about'
18
Rabbi

それは少しトリッキーです。まず、組み込みの役割には事前に定義されたアクセス権があることに注意してください。これらは、以下のクエリには表示されません。提案されたクエリは、カスタムデータベースロールと、それらが具体的に付与または拒否されたアクセスをリストします。これはあなたが探していたものですか?

select permission_name, state_desc, type_desc, U.name, OBJECT_NAME(major_id) 
from sys.database_permissions P 
JOIN sys.tables T ON P.major_id = T.object_id 
JOIN sysusers U ON U.uid = P.grantee_principal_id
26
Herve Roggero

これを試して、

sp_helprotect "テーブル名" go

7
sudmong

データベースで特定のユーザーに割り当てられている個々のロールを取得するには、sp_helpusersプロシージャを実行する必要があります。次の手順では、サーバー上の各データベースに対してsp_helpuserを実行し、各データベースの結果をテーブル変数に蓄積してから、各データベースの結果セット、ユーザー、およびユーザーがアクセス許可を持っているロールを提供します。

Create Procedure dba_HelpUserRoles
AS
Declare @SQL Varchar(2000)
Declare @DBname Sysname

Declare @HelpUserResults Table
(
UserName Sysname,
RoleName Sysname,
LoginName Sysname NULL,
DefDBName Sysname NULL,
DefSchemaName Sysname NULL,
UserID Smallint,
SID Smallint
)

Declare @DbUserResults Table
(
DBname Sysname,
UserName Sysname,
RoleName Sysname,
LoginName Sysname NULL,
DefDBName Sysname NULL,
DefSchemaName Sysname NULL,
UserID Smallint,
SID Smallint
)

Declare @DBcursor
Cursor For
Select Name
From sys.sysdatabases
Order by Name;

Fetch Next
From DBcursor
Into @DBname;

While @@Fetch_Status = 0
Begin

Set @SQL = 'Use [' + @DBname + ']; Exec sp_helpuser;';

Print @SQL

Insert @HelpUserResults
Exec(@SQL);

Insert @DBUserReults
Select @DBname, *
From @HelpUserResults
Where LoginName IS NOT NULL;

Delete
From HelpUserResults;

Fetch Next
From DBcursor
Into @DBname;

End

Close DBcursor;
Deallocate DBcursor;

Select *
From @DBUser_Results;

-------------------------------- Procedure End 

1
Steve Kirchner