sp_helprotect (Transact-SQL)

适用于SQL Server

返回一个报表,该报表提供有关当前数据库中对象或语句权限的用户权限的信息。

重要

sp_helprotect 不会返回有关 SQL Server 2005 (9.x) 及更高版本中引入的安全对象的信息。 请改用 sys.database_permissionssys.fn_builtin_permissions

不列出始终分配给固定服务器角色或固定数据库角色的权限。 不包括基于其角色成员身份接收权限的登录名或用户。

Transact-SQL 语法约定

语法

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'

为其返回权限的主体的名称。 @usernamesysname,默认值 NULL为 ,返回当前数据库中的所有主体。 当前数据库中必须存在@username。

[ @grantorname = ] N'grantorname'

授予权限的主体的名称。 @grantorname为 sysname,默认值NULL,返回数据库中任何主体授予的权限的所有信息。

[ @permissionarea = ] 'permissionarea'

一个字符串,指示是显示对象权限(字符串 o)、语句权限(字符串 s),还是同时显示两者(o s)。 @permissionarea为 varchar(10),默认值为 o s. @permissionarea可以是任意组合,os两者之间使用或不使用逗号或空格os

返回代码值

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 = 组合 AllNew

如果权限类型不适用于列,则返回句点。

注解

以下过程中的所有参数都是可选的。 如果未使用任何参数执行, 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';