首批通过分布式安全可靠测评,为关键业务系统打造
REVOKE
更新时间:2026-04-07 11:24:45
描述
该语句用于系统管理员撤销用户的某些权限。
使用限制及注意事项
- 用户必须拥有被撤销的权限(例如,
user1要撤销user2对表tbl1的SELECT权限,则user1必须拥有表tbl1的SELECT的权限),并且拥有GRANT OPTION权限。
权限要求
当权限没有
GRANT OPTION时,撤销操作不会级联。例如,用户user1给user2授予了某些权限,撤回user1的权限不会同时也撤回user2的相应权限。当拥有GRANT OPTION时,撤销操作会级联。撤销
ALL PRIVILEGES和GRANT OPTION权限时,当前用户必须拥有全局GRANT OPTION权限,或者对权限表的UPDATE及DELETE权限。
有关 OceanBase 数据库权限的详细介绍,请参见 Oracle 模式下的权限分类。
语法
/*撤销对象权限*/
REVOKE {obj_privilege [, obj_privilege...]} ON obj_clause FROM {user_name [, user_name ...]}
/*撤销系统权限*/
REVOKE {system_privilege_list | ALL PRIVILEGES} FROM user_name [, user_name ...];
REVOKE ALL [PRIVILEGES], GRANT_OPTION FROM user_name [, user_name ...];
/*撤销角色*/
REVOKE role_name [, role_name ...] FROM user_name;
obj_clause:
* [. *]
| relation_name . {* | relation_name}
| [DIRECTORY] relation_name
| LOCATION location_name
参数解释
| 参数 | 描述 |
|---|---|
| obj_privilege | 指定撤销的对象权限类型。具体的权限类型及其说明请参见下方权限类型说明表。 同时撤销多个权限时,权限类型用","隔开。 |
| obj_clause | 指定撤销权限的层级,relation_name 指定具体对象的名称。权限可以分为以下几个层级:
|
| system_privilege_list | 指定撤销的系统权限类型。 同时撤销多个权限时,权限类型用","隔开。 |
| ALL [PRIVILEGES] | 表示除 GRANT OPTION 以外所有权限。 |
obj_clause
* [. *]:表示所有数据库中的所有表。示例如下:
从用户
user001和user002中撤销全局的SELECT和INSERT权限。REVOKE SELECT, INSERT ON *.* FROM 'user001', 'user002';relation_name . {* | relation_name}:表示指定数据库中的所有表。db_name表示指定数据库的数据库名称。示例如下:
从用户
user003中撤销对test数据库中所有表的插入权限。REVOKE INSERT ON 'test'.* FROM 'user003';[DIRECTORY] relation_name:表示特定数据库中的特定表。示例如下:
从用户
user003中撤销对test数据库中的tbl2表的SELECT权限。REVOKE SELECT ON 'test'.'tbl2' FROM 'user003';LOCATION location_name:表示 Location 对象。说明
对于 OceanBase 数据库 V4.4.x 版本,
REVOKE语句从 V4.4.1 版本开始支持LOCATION参数及对应的READ和WRITE权限。示例如下:
从用户
user005中撤销对 Location 的对象local_t的READ权限。REVOKE READ ON LOCATION local_t FROM user005;
可以撤销的权限类型如下表所示。
权限类型说明表
| 权限 | 说明 |
|---|---|
| ALL PRIVILEGES | 除 GRANT OPTION 以外所有权限。 |
| ALTER | ALTER TABLE 的权限。 |
| CREATE | CREATE TABLE 的权限。 |
| DELETE | DELETE 的权限。 |
| DROP | DROP 的权限。 |
| GRANT OPTION | GRANT OPTION 的权限。 |
| INSERT | INSERT 的权限。 |
| UPDATE | UPDATE 的权限。 |
| SELECT | SELECT 的权限。 |
| INDEX | CREATE INDEX 和 DROP INDEX 的权限。 |
| SHOW VIEW | SHOW CREATE VIEW 权限。 |
| SHOW DATABASES | 全局 SHOW DATABASES 的权限。 |
| SUPER | SET GLOBAL 修改全局系统参数的权限。 |
| REFERENCES | 创建指向表的约束的权限。 |
| EXECUTE | 执行预处理程序的权限。 |
| FLASHBACK | FLASHBACK 的权限。 |
| READ | READ 的权限。 |
| WRITE | WRITE 的权限。 |
| CREATE SESSION | 连接到数据库的权限。 |
| EXEMPT REDACTION POLICY | 绕过任意现有 REDACTION POLICY 并查看数据的权限。 |
| SYSDBA | SYSDBA 的权限。 |
| SYSOPER | SYSOPER 的权限。 |
| SYSBACKUP | SYSBACKUP 的权限。 |
| CREATE TABLE | 在指定用户 Schema 内创建表的权限。 |
| CREATE ANY TABLE | 在除 SYS 用户外所有用户 Schema 内创建表的权限。 |
| ALTER ANY TABLE | 在除 SYS 用户外所有用户 Schema 内修改表的权限。 |
| BACKUP ANY TABLE | 在除 SYS 用户外所有用户 Schema 内创建表的权限。 |
| DROP ANY TABLE | 在除 SYS 用户外所有用户 Schema 内备份表的权限。 |
| LOCK ANY TABLE | 在除 SYS 用户外所有用户 Schema 内锁定表的权限。 |
| COMMENT ANY TABLE | 在除 SYS 用户外所有用户 Schema 内评论表的权限。 |
| SELECT ANY TABLE | 在除 SYS 用户外所有用户 Schema 内查看表的权限。 |
| INSERT ANY TABLE | 在除 SYS 用户外所有用户 Schema 内的表插入行的权限。 |
| UPDATE ANY TABLE | 在除 SYS 用户外所有用户 Schema 内的表更新行的权限。 |
| DELETE ANY TABLE | 在除 SYS 用户外所有用户 Schema 内删除表的权限。 |
| FLASHBACK ANY TABLE | 在除 SYS 用户外所有用户 Schema 内 FLASHBACK 表的权限。 |
| CREATE ROLE | 创建角色的权限。 |
| DROP ANY ROLE | 删除任意角色的权限。 |
| GRANT ANY ROLE | 授予任意角色的权限。 |
| ALTER ANY ROLE | 修改任意角色的权限。 |
| AUDIT ANY | 在除 SYS 用户外所有用户 Schema 内修改对象的权限。 |
| GRANT ANY PRIVILEGE | 授予任意系统权限的权限。 |
| GRANT ANY OBJECT PRIVILEGE | 授予任意对象权限的权限。 |
| CREATE ANY INDEX | 在除 SYS 用户外所有用户 Schema 内创建索引的权限。 |
| ALTER ANY INDEX | 在除 SYS 用户外所有用户 Schema 内修改索引的权限。 |
| DROP ANY INDEX | 在除 SYS 用户外所有用户 Schema 内删除索引的权限。 |
| CREATE ANY VIEW | 在除 SYS 用户外所有用户 Schema 内创建视图的权限。 |
| DROP ANY VIEW | 在除 SYS 用户外所有用户 Schema 内删除索引的权限。 |
| CREATE VIEW | 在指定用户 Schema 内创建视图的权限。 |
| SELECT ANY DICTIONARY | 在指定用户 Schema 内查询 DICTIONARY 的权限。 |
| CREATE PROCEDURE | 在指定用户 Schema 内创建 PROCEDURE 的权限。 |
| CREATE ANY PROCEDURE | 在除 SYS 用户外所有用户 Schema 内创建PROCEDURE 的权限。 |
| ALTER ANY PROCEDURE | 在除 SYS 用户外所有用户 Schema 内修改PROCEDURE 的权限。 |
| DROP ANY PROCEDURE | 在除 SYS 用户外所有用户 Schema 内删除PROCEDURE 的权限。 |
| EXECUTE ANY PROCEDURE | 在除 SYS 用户外所有用户 Schema 内执行PROCEDURE 的权限。 |
| CREATE SYNONYM | 在指定用户 Schema 内创建 SYNONYM 的权限。 |
| CREATE ANY SYNONYM | 在除 SYS 用户外所有用户 Schema 内创建SYNONYM 的权限。 |
| DROP ANY SYNONYM | 在除 SYS 用户外所有用户 Schema 内删除SYNONYM 的权限。 |
| CREATE PUBLIC SYNONYM | 创建公共 SYNONYM 的权限。 |
| DROP PUBLIC SYNONYM | 删除公共 SYNONYM 的权限。 |
| CREATE SEQUENCE | 在指定用户 Schema 内创建 SEQUENCE 的权限。 |
| CREATE ANY SEQUENCE | 在除 SYS 用户外所有用户 Schema 内创建SEQUENCE 的权限。 |
| ALTER ANY SEQUENCE | 在除 SYS 用户外所有用户 Schema 内修改SEQUENCE 的权限。 |
| DROP ANY SEQUENCE | 在除 SYS 用户外所有用户 Schema 内删除SEQUENCE 的权限。 |
| SELECT ANY SEQUENCE | 在除 SYS 用户外所有用户 Schema 内查询SEQUENCE 的权限。 |
| CREATE TRIGGER | 在指定用户 Schema 内创建 TRIGGER 的权限。 |
| CREATE ANY TRIGGER | 在除 SYS 用户外所有用户 Schema 内创建TRIGGER 的权限。 |
| ALTER ANY TRIGGER | 在除 SYS 用户外所有用户 Schema 内修改TRIGGER 的权限。 |
| DROP ANY TRIGGER | 在除 SYS 用户外所有用户 Schema 内删除TRIGGER 的权限。 |
| CREATE PROFILE | 创建 PROFILE 的权限。 |
| ALTER PROFILE | 修改 PROFILE 的权限。 |
| DROP PROFILE | 删除 PROFILE 的权限。 |
| CREATE USER | 创建用户的权限。 |
| ALTER USER | 修改用户的权限。 |
| DROP USER | 删除用户的权限。 |
| CREATE TYPE | 在指定用户 Schema 内创建 TYPE 的权限。 |
| CREATE ANY TYPE | 在除 SYS 用户外所有用户 Schema 内创建 TYPE 的权限。 |
| ALTER ANY TYPE | 在除 SYS 用户外所有用户 Schema 内修改 TYPE 的权限。 |
| DROP ANY TYPE | 在除 SYS 用户外所有用户 Schema 内删除 TYPE 的权限。 |
| EXECUTE ANY TYPE | 在除 SYS 用户外所有用户 Schema 内执行 TYPE 的权限。 |
| UNDER ANY TYPE | 在除 SYS 用户外所有用户 Schema 内 TYPE 的基础上创建 SUBTYPE 的权限。 |
| PURGE DBA_RECYCLEBIN | 从系统回收站中删除所有对象的权限。 |
| CREATE ANY OUTLINE | 在除 SYS 用户外所有用户 Schema 内创建OUTLINE 的权限。 |
| ALTER ANY OUTLINE | 在除 SYS 用户外所有用户 Schema 内修改OUTLINE 的权限。 |
| DROP ANY OUTLINE | 在除 SYS 用户外所有用户 Schema 内删除OUTLINE 的权限。 |
| SYSKM | SYSKM 的权限。 |
| CREATE TABLESPACE | 创建表空间的权限。 |
| ALTER TABLESPACE | 修改表空间的权限。 |
| DROP TABLESPACE | 删除表空间的权限。 |
| ALTER SYSTEM | ALTER SYSTEM 的权限 |
| CREATE DATABASE LINK | 在指定用户 Schema 内创建 DATABASE LINK 的权限。 |
| CREATE PUBLIC DATABASE LINK | 创建 PUBLIC DATABASE LINK 的权限。 |
| DROP DATABASE LINK | 在指定用户 Schema 内删除 DATABASE LINK 的权限。 |
| ALTER SESSION | 修改 SESSION 的权限。 |
| ALTER DATABASE | 修改 DATABASE 的权限。 |
示例
创建用户和角色。
CREATE USER user1 IDENTIFIED BY password; CREATE ROLE role1; CREATE TABLE user1.tbl1 (id INT);授予角色权限。
GRANT SELECT ON user1.tbl1 TO role1;授予角色给用户。
GRANT role1 TO user1;撤销角色对表的权限。
REVOKE SELECT ON user1.tbl1 FROM role1;
上述步骤您可以完整的实现授权与撤销权限操作。
下述示例将向您展示撤销所有权限、撤销对象权限、撤销系统权限的 SQL 语句。
- 撤销用户 user1 的所有权限。
obclient> REVOKE ALL PRIVILEGES FROM user1;
Query OK, 0 rows affected
- 撤销角色 role1 对表 user1.tbl1 的 SELECT 对象权限。
obclient> REVOKE SELECT ON user1.tbl1 FROM role1;
Query OK, 0 rows affected
- 撤销用户 user1 和用户 user2 的 DROP ANY TABLE 系统权限。
obclient> REVOKE DROP ANY TABLE FROM user1,user2;
Query OK, 0 rows affected