REVOKE (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
撤消以前授予或拒绝的权限。
语法
-- Syntax for SQL Server and Azure SQL Database
-- Simplified syntax for REVOKE
REVOKE [ GRANT OPTION FOR ]
{
[ ALL [ PRIVILEGES ] ]
|
permission [ ( column [ ,...n ] ) ] [ ,...n ]
}
[ ON [ class :: ] securable ]
{ TO | FROM } principal [ ,...n ]
[ CASCADE] [ AS principal ]
-- Syntax for Azure Synapse Analytics and Parallel Data Warehouse and Microsoft Fabric
REVOKE
<permission> [ ,...n ]
[ ON [ <class_type> :: ] securable ]
[ FROM | TO ] principal [ ,...n ]
[ CASCADE ]
[;]
<permission> ::=
{ see the tables below }
<class_type> ::=
{
LOGIN
| DATABASE
| OBJECT
| ROLE
| SCHEMA
| USER
}
参数
GRANT OPTION FOR
指示将撤消授予指定权限的能力。 在使用 CASCADE 参数时,需要具备该功能。
重要
如果主体具有不带 GRANT 选项的指定权限,则将撤消该权限本身。
ALL
适用于:SQL Server 2008 (10.0.x) 及更高版本
该选项不会撤消所有可能的权限。 撤消 ALL 相当于撤消以下权限。
如果安全对象是数据库,则 ALL 对应 BACKUP DATABASE、BACKUP LOG、CREATE DATABASE、CREATE DEFAULT、CREATE FUNCTION、CREATE PROCEDURE、CREATE RULE、CREATE TABLE 和 CREATE VIEW。
如果安全对象是标量函数,则 ALL 对应 EXECUTE 和 REFERENCES。
如果安全对象是表值函数,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。
如果安全对象是存储过程,则 ALL 表示 EXECUTE。
如果安全对象是表,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。
如果安全对象是视图,则 ALL 对应 DELETE、INSERT、REFERENCES、SELECT 和 UPDATE。
注意
不推荐使用 REVOKE ALL 语法。 在 SQL Server的未来版本中将删除此功能。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 应改为撤销特定权限。
PRIVILEGES
包含此参数是为了符合 ISO 标准。 请不要更改 ALL 的行为。
permission
权限的名称。 本主题后面的特定于安全对象的语法部分所列出的主题介绍了权限和安全对象之间的有效映射。
column
指定表中将撤消其权限的列的名称。 需要使用括号。
class
指定将撤消其权限的安全对象的类。 需要使用作用域限定符 ::。
securable
指定将撤消其权限的安全对象。
TO | FROM principal
主体的名称。 可撤消其对安全对象的权限的主体随安全对象而异。 有关有效组合的详细信息,请参阅本主题后面的特定于安全对象的语法部分所列出的主题。
CASCADE
指示当前正在撤消的权限也将从其他被该主体授权的主体中撤消。 使用 CASCADE 参数时,还必须同时指定 GRANT OPTION FOR 参数。
注意
如果对授予了 WITH GRANT OPTION 权限的权限执行级联撤消,将同时撤消该权限的 GRANT 和 DENY 权限。
AS principal
使用 AS principal 子句指示将撤销由你以外的主体所授予的权限。 例如,假设用户 Mary 是 principal_id 12,用户 Raul 是 principal_id 15。 Mary 和 Raul 为用户 Steven 授予相同权限。 Sys.database_permissions 表两次指示该权限,但分别具有不同的 grantor_prinicpal_id 值。 Mary 可以使用 AS RAUL
子句撤销权限以移除 Raul 授予的权限。
在此语句中使用 AS 并不意味着能够模拟其他用户。
备注
REVOKE 语句的完整语法非常复杂。 上面的语法关系图进行了简化以突出其结构。 本主题后面的特定于安全对象的语法部分中列出的主题介绍了用于撤销特定安全对象的权限的完整语句。
REVOKE 语句可用于删除已授予的权限,DENY 语句可用于防止主体通过 GRANT 获得特定权限。
授予权限将删除对所指定安全对象的相应权限的 DENY 或 REVOKE 权限。 如果在包含该安全对象的更高级别拒绝了相同的权限,则 DENY 优先。 但是,在更高级别撤销已授予权限的操作并不优先。
注意
表级 DENY 并不优先于列级 GRANT。 保留了权限层次结构中的这种不一致性以保持向后兼容。 未来的版本会将其删除。
sp_helprotect 系统存储过程报告在数据库级安全对象上的权限。
在撤消通过指定 GRANT OPTION 为其赋予权限的主体的权限时,如果未指定 CASCADE,则将无法成功执行 REVOKE 语句。
权限
对安全对象具有 CONTROL 权限的主体可以撤消该安全对象的权限。 对象所有者可以撤消他们所拥有的对象的权限。
具备 CONTROL SERVER 权限的被权限者(例如 sysadmin 固定服务器角色的成员)可以撤消对该服务器的任何安全对象所拥有的任何权限。 对数据库具有 CONTROL 权限的被授权者(例如 db_owner 固定数据库角色的成员)可以撤消对该数据库的任何安全对象所拥有的任何权限。 被授予架构的 CONTROL 权限的用户可以撤消针对该架构的任何对象的任何权限。
特定于安全对象的语法
下表列出了安全对象以及描述特定于安全对象的语法的主题。
示例
A. 授权和撤销
适用于: SQL Server, SQL 数据库
下面的示例在用户数据库上创建一个架构、一个包含的数据库用户和一个新的角色。 它会将用户添加到该角色,向角色授予对架构的 SELECT 权限,然后删除 (REVOKE
) 角色的该权限。
CREATE SCHEMA Sales;
GO
CREATE USER Joe without login;
GO
CREATE ROLE Vendors;
GO
ALTER ROLE Vendors ADD MEMBER Joe;
GO
GRANT SELECT ON SCHEMA :: Sales TO Vendors;
GO
REVOKE SELECT ON SCHEMA :: Sales TO Vendors;
GO
另请参阅
权限层次结构(数据库引擎)
DENY (Transact-SQL)
GRANT (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_adduser (Transact-SQL)
sp_changedbowner (Transact-SQL)
sp_dropuser (Transact-SQL)
sp_helprotect (Transact-SQL)
sp_helpuser (Transact-SQL)