你认为我能够向Google提出这么简单的问题。但无论我尝试什么,我都会碰壁砖。
查找具有表权限的角色列表的TSQL语句是什么?
伪代码如下所示:
SELECT role_name
FROM permissions
where object_name = 'the_table_i_need_to_know_about'
答案 0 :(得分:26)
这有点棘手。首先,请记住内置角色具有预定义的访问权限;这些不会出现在下面的查询中。建议的查询列出了自定义数据库角色以及特别授予或拒绝的访问权限。这是你在找什么?
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
答案 1 :(得分:7)
试试这个,
sp_helprotect“表名” 去
答案 2 :(得分:2)
为了在数据库中获取分配给特定用户的各个角色,您需要执行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