Transact-SQL 参考

REVOKE

删除以前在当前数据库内的用户上授予或拒绝的权限。

语法

语句权限:

REVOKE { ALL | statement [ ,...n ] }
FROM security_account [ ,...n ]

对象权限:

REVOKE [ GRANT OPTION FOR ]
    { ALL [ PRIVILEGES ] | permission [ ,...n ] }
    {
        [ ( column [ ,...n ] ) ] ON { table | view }
        | ON { table | view } [ ( column [ ,...n ] ) ]
        | ON { stored_procedure | extended_procedure }
        | ON { user_defined_function }
    }
{ TO | FROM }
    security_account [ ,...n ]
[ CASCADE ]
[ AS { group | role } ]

参数

ALL

指定将删除所有适用的权限。对于语句权限,只有 sysadmin 固定服务器角色成员可以使用 ALL。对于对象权限,sysadmin 固定服务器角色成员、db_owne 固定数据库角色成员和数据库对象所有者都可以使用 ALL。

statement

是要删除其权限的授权语句。语句列表可以包括:

n

是一个占位符,表示在以逗号分隔的列表内可以重复的项目。

FROM

指定安全帐户列表。

security_account

是当前数据库内将要被删除权限的安全帐户。安全帐户可以是:

GRANT OPTION FOR

指定要删除的 WITH GRANT OPTION 权限。在 REVOKE 中使用 GRANT OPTION FOR 关键字可消除 GRANT 语句中指定的WITH GRANT OPTION 设置的影响。用户仍然具有该权限,但是不能将该权限授予其他用户。

如果要废除的权限原先不是通过 WITH GRANT OPTION 设置授予的,则忽略 GRANT OPTION FOR(若指定了此参数)并照例废除权限。

如果要废除的权限原先是通过 WITH GRANT OPTION 设置授予的,则指定 CASCADE 和 GRANT OPTION FOR 子句;否则将返回一个错误。

PRIVILEGES

是可以包含在符合 SQL-92 标准的语句中的可选关键字。

permission

是要废除的对象权限。当废除表或试图的权限时,权限列表可以包括一个或多个这样的语句:SELECT、INSERT、DELETE 或 UPDATE。

在表上废除的对象权限还可以包括 REFERENCES,在存储过程或扩展存储过程上废除的对象权限可以是 EXECUTE。当废除列上的权限时,权限列表可包括 SELECT 或 UPDATE。

column

是当前数据库内要被删除权限的列名。

table

是当前数据库内要被删除权限的表名。

view

是当前数据库内要被删除权限的视图名称。

stored_procedure

是当前数据库内要被删除权限的存储过程名称。

extended_procedure

是要被删除权限的扩展存储过程名称。

user_defined_function

是要被删除权限的用户定义函数名。

TO

指定安全帐户列表。

CASCADE

指定删除来自 security_account 的权限时,也将删除由 security_account 授权的任何其它安全帐户。废除可授予的权限时使用 CASCADE。

如果要废除的权限原先是通过 WITH GRANT OPTION 设置授予 security_account 的,则指定 CASCADE 和 GRANT OPTION FOR 子句;否则将返回一个错误。指定 CASCADE 和 GRANT OPTION FOR 子句将只废除通过 WITH GRANT OPTION 设置授予 security_account 的权限以及由 security_account 授权的其它安全帐户。

AS {group | role}

指定当前数据库内的安全帐户(在其授权下执行 REVOKE 语句)的可选名称。如果给要组或角色授予对象权限,但需要在其他用户上废除该对象权限,则可以使用 AS。因为 REVOKE 语句只能由用户执行而不能由组或角色执行,所以组或角色的特定成员在该组或角色的授权下废除授予对象权限。

注释

REVOKE 只适用于当前数据库内的权限。

废除的权限只在被废除权限的级别(用户、组或角色)上删除授予或拒绝的权限。例如,给 Andrew 用户帐户显式授予了查看 authors 表的权限,该用户帐户只是 employees 角色的成员。如果废除了 employees 角色查看 authors 表的访问权,由于已显式授予了 Andrew 查看表的权限,因此该帐户仍能查看该表。只有当也废除了授予 Andrew 的权限时,Andrew 才不能查看 authors 表。如果从未显式授予 Andrew 查看 authors 的权限,那么废除 employees 角色的权限也将禁止 Andrew 查看该表。

说明  REVOKE 删除以前授予或拒绝了的权限。可能需要对使用 REVOKE 的 Microsoft® SQL Server™ 6.5 或更早版本中的脚本进行更改,以使用 DENY 维护行为。

如果用户激活一个应用程序角色,REVOKE 将不影响用户使用该应用程序角色访问对象。虽然可以废除用户访问当前数据库内特定对象的权限,但是如果应用程序有权访问该对象,则在激活该应用程序的期间该用户也有访问权。

使用 sp_helprotect 报告数据库对象或用户的权限。

权限

REVOKE 权限默认授予 sysadmin 固定服务器角色成员、db_ownerdb_securityadmin 固定数据库角色成员以及数据库对象所有者。

示例
A. 废除授予用户帐户的语句权限

下例废除已授予用户 Joe Corporate\BobJ 的 CREATE TABLE 权限。它删除了允许 Joe Corporate\BobJ 创建表的权限。不过,如果已将 CREATE TABLE 权限授予给了包含 Joe Corporate\BobJ 成员的任何角色,那么 Joe Corporate\BobJ 仍可创建表。

REVOKE CREATE TABLE FROM Joe, [Corporate\BobJ]
B. 废除授予多个用户帐户的多个权限

下例废除授予多个用户的多个语句权限。

REVOKE CREATE TABLE, CREATE DEFAULT
FROM Mary, John
C. 废除拒绝的权限

用户 MaryBudget 角色的成员,已给该角色授予了对 Budget_Data 表的 SELECT 权限。已对 Mary 使用 DENY 语句以防止 Mary 通过授予 Budget 角色的权限访问 Budget_Data 表。

下例删除对 Mary 拒绝的权限,并通过适用于 Budget 角色的 SELECT 权限,允许 Mary 对该表使用 SELECT 语句。

REVOKE SELECT ON Budget_Data TO Mary

请参见

向后兼容性

废除权限

DENY

GRANT

sp_helprotect