sp_helprotect (Transact-SQL)
适用范围:SQL Server
返回一个报表,该报表提供有关当前数据库中对象或语句权限的用户权限的信息。
重要
sp_helprotect
不会返回有关 SQL Server 2005 (9.x) 及更高版本中引入的安全对象的信息。 请改用 sys.database_permissions 和 sys.fn_builtin_permissions 。
不列出始终分配给固定服务器角色或固定数据库角色的权限。 不包括基于其角色成员身份接收权限的登录名或用户。
语法
sp_helprotect
[ [ @name = ] N'name' ]
[ , [ @username = ] N'username' ]
[ , [ @grantorname = ] N'grantorname' ]
[ , [ @permissionarea = ] 'permissionarea' ]
[ ; ]
参数
[ @name = ] N'name'
当前数据库中的对象的名称或语句是报表权限。 @name为 nvarchar(776),默认值NULL
返回所有对象和语句权限。 如果值为一个对象(表、视图、存储过程或扩展存储过程),则该对象必须是当前数据库中的有效对象。 对象名称可以包含窗体 <owner>.<object>
中的所有者限定符。
如果 @name 是一个语句,它可以是一个 CREATE
语句。
[ @username = ] N'username'
为其返回权限的主体的名称。 @username 为 sysname,默认值 NULL
为 ,返回当前数据库中的所有主体。 当前数据库中必须存在@username。
[ @grantorname = ] N'grantorname'
授予权限的主体的名称。 @grantorname为 sysname,默认值NULL
为 ,返回数据库中任何主体授予的权限的所有信息。
[ @permissionarea = ] 'permissionarea'
一个字符串,指示是显示对象权限(字符串 o
)、语句权限(字符串 s
),还是同时显示两者(o s
)。 @permissionarea为 varchar(10),默认值为 o s
. @permissionarea可以是任意组合,o
在s
两者之间使用或不使用逗号或空格o
s
。
返回代码值
0
(成功)或 1
(失败)。
结果集
列名称 | 数据类型 | 描述 |
---|---|---|
Owner |
sysname | 对象所有者的名称。 |
Object |
sysname | 对象的名称。 |
Grantee |
sysname | 被授予权限的主体的名称。 |
Grantor |
sysname | 向指定的被授权者进行授权的主体的名称。 |
ProtectType |
nvarchar(10) | 保护类型的名称:GRANT REVOKE |
Action |
nvarchar(60) | 权限的名称。 依赖于对象类型的有效的权限语句。 |
Column |
sysname | 权限的类型:All = 权限涵盖对象的所有当前列。New = 权限涵盖将来对象上可能更改的任何新列(通过使用 ALTER 语句)。All+New = 组合 All 和 New 。如果权限类型不适用于列,则返回句点。 |
注解
以下过程中的所有参数都是可选的。 如果未使用任何参数执行, sp_helprotect
则显示当前数据库中授予或拒绝的所有权限。
如果指定了一部分参数而不是指定全部参数,则使用命名参数来标识特定的参数,或者使用 NULL
作为占位符。 例如,若要报告授权者数据库所有者的所有权限(dbo
),请执行以下脚本:
EXEC sp_helprotect NULL, NULL, dbo;
或
EXEC sp_helprotect @grantorname = 'dbo';
输出报表按权限类别、所有者、对象、被授权者、授权者、保护类型类别、保护类型、操作以及列连续 ID 进行排序。
权限
要求 公共 角色具有成员身份。
返回的信息取决于对元数据的访问权限的限制。 主体没有权限的实体不会显示。 有关详细信息,请参阅 Metadata Visibility Configuration。
示例
A. 列出表的权限
以下示例列出 titles
表的权限。
EXEC sp_helprotect 'titles';
B. 列出用户的权限
以下示例列出当前数据库中用户 Judy
所拥有的所有权限。
EXEC sp_helprotect NULL, 'Judy';
°C 列出特定用户授予的权限
以下示例列出当前数据库中用户 Judy
授予的所有权限,并用作 NULL
缺失参数的占位符。
EXEC sp_helprotect NULL, NULL, 'Judy';
D. 仅列出语句权限
以下示例列出当前数据库中的所有语句权限,并使用 NULL
作为缺少的参数的占位符。
EXEC sp_helprotect NULL, NULL, NULL, 's';
e. 列出 CREATE 语句的权限
以下示例列出授予权限的 CREATE TABLE
所有用户。
EXEC sp_helprotect @name = 'CREATE TABLE';