あなたは私がそのような簡単な質問をググることができると思います。しかし、何をしようとも、レンガの壁にぶつかった。
テーブルへの権限を持つロールのリストを検索するTSQLステートメントとは何ですか?
擬似コードは次のようになります。
SELECT role_name
FROM permissions
where object_name = 'the_table_i_need_to_know_about'
それは少しトリッキーです。まず、組み込みの役割には事前に定義されたアクセス権があることに注意してください。これらは、以下のクエリには表示されません。提案されたクエリは、カスタムデータベースロールと、それらが具体的に付与または拒否されたアクセスをリストします。これはあなたが探していたものですか?
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
これを試して、
sp_helprotect "テーブル名" go
データベースで特定のユーザーに割り当てられている個々のロールを取得するには、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