REVOKE
描述
该语句用于撤销之前分配给用户或角色的权限,或者撤销用户或角色中的角色。
使用限制及注意事项
- 撤销对象权限操作不会级联。例如,用户
user1给user2授予了某些权限,撤回user1的权限不会同时也撤回user2的相应权限。 - 需要撤销权限的用户或者角色必须存在,否则将报错。
- 系统变量
mandatory_roles中的角色不能撤销。 - 执行
REVOKE语句会对当前登录的用户立即生效。
权限要求
-
撤销特定权限级别权限:用户必须拥有被撤销的权限(例如,
user1要撤销user2对表t1的SELECT权限,则user1必须 拥有表t1的SELECT的权限),并且拥有GRANT OPTION权限。 -
撤销所有权限和授予选项:撤销
ALL PRIVILEGES和GRANT OPTION权限时,当前用户必须拥有全局GRANT OPTION权限,或者对权限表的UPDATE及DELETE权限。 -
撤销用户或角色中角色权限:撤销角色时,当前用户必须拥有被撤销的角色,并且拥有
ADMIN OPTION权限,才能撤销成功。
有关 seekdb 权限的详细介绍,参见 seekdb 的权限分类。
语法
撤销用户或角色的对象权限
revoke_stmt1:
REVOKE grant_privileges ON priv_level FROM user_or_role_list;
revoke_stmt2:
REVOKE ALL [PRIVILEGES], GRANT OPTION FROM user_or_role_list;
revoke_stmt3:
REVOKE [IF EXISTS] role_name_list FROM user_or_role_list [IGNORE UNKNOWN USER];
grant_privileges:
priv_type_list
| ALL [PRIVILEGES]
priv_type_list:
priv_type[(column_name_list)] [, priv_type[(column_name_list)] ...]
column_name_list:
column_name [, column_name ...]
priv_level:
*.*
| db_name.*
| db_name.table_name
| CATALOG external_catalog_name
user_or_role_list:
user_or_role [, user_or_role ...]
user_or_role:
user_name | role_name
role_name_list:
role_name [, role_name ...]
参数解释
| 参数 | 描述 |
|---|---|
| revoke_stmt1 | 从用户或角色中撤销特定权限级别权限的 SQL 语句。 |
| revoke_stmt2 | 从用户或角色中撤销所有权限和授予选项的 SQL 语句。 |
| revoke_stmt3 | 从用户或角色中撤销角色的 SQL 语句。 |
| grant_privileges | 指定需要撤销的权限类型,可以是特定权限类型的列表,也可以是所有权限(GRANT OPTION 除外)。 |
| priv_type_list | 表示具体的权限类型列表。同时撤销多个授权时,权限间使用英文逗号(,)隔开。 |
| priv_type | 表示具体的权限类型。具体的权限类型的详细介绍,seekdb 的权限分类。注意:PROXY 参数当前版本仅记录该关键字语法,功能不生效。 |
| column_name_list | 可选项,撤销表中的列级权限 的列表。如果不指定,则撤销整个表或对象的权限。 |
| ALL [PRIVILEGES] | 表示除 GRANT OPTION 以外所有权限。 |
| priv_level | 指定授予权限的层级。权限层级的具体取值介绍可参见下文 priv_level。 |
| user_or_role_list | 指定需要撤销权限的用户或角色列表。同时撤销多个用户或角色的授权时,用户和角色名用英文逗号(,)隔开。 |
| user_name | 表示用户名称。 |
| role_name | 表示角色名称。 |
| IF EXISTS | 可选项,当撤销的角色不存在时,如果使用了 IF EXISTS 选项,系统将发出警告而非错误消息。 |
| role_name_list | 指定需要撤销的角色列表。同时撤销多个角色时,角色名用英文逗号(,)隔开。 |
| IGNORE UNKNOWN USER | 可选项,当被授权者(用户或角色)不存在时,如果使用了 IGNORE UNKNOWN USER 选项,系统将发出警告而非错误消息。 |
| proxy | 当前版本仅记录该关键字语法,功能不生效。 |
priv_level
-
*.*:表示所有数据库中的所有表。示例如下:
从用户
user001和user002中撤销全局的SELECT和INSERT权限。REVOKE SELECT, INSERT ON *.* FROM user001, user002; -
db_name.*:表示指定数据库中的所有表。db_name表示指定数据库的数据库名称。示例如下:
从用户
user003中撤销对test数据库中所有表的插入权限。REVOKE INSERT ON test.* FROM user003; -
db_name.table_name:表示特定数据库中的特定表。示例如下:
从用户
user003中撤销对test数据库中的tbl2表的SELECT权限。REVOKE SELECT ON test.tbl2 FROM user003; -
CATALOG external_catalog_name:表示 Catalog 中的目录。示例如下:
从用户
user004中撤销对 Catalog 的对象test_odps_catalog的USE CATALOG权限。。REVOKE USE CATALOG ON CATALOG test_odps_catalog FROM user004;
示例
示例一:撤销对象权限
通过撤销 test_user001 用户的 SELECT 权限,查看 ALL PRIVILEGES 授予了哪些权限。
-
给用户
test_user001授予ALL PRIVILEGES权限。GRANT ALL PRIVILEGES ON *.* TO test_user001; -
查看用户
test_user001拥有的授权。SHOW GRANTS FOR test_user001;返回结果如下:
+-----------------------------------------------+
| Grants for test_user001@% |
+-----------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'test_user001' |
+-----------------------------------------------+
1 row in set (0.001 sec) -
撤销用户
test_user001的SELECT权限。REVOKE SELECT ON *.* FROM test_user001; -
再次查看用户
test_user001拥有的授权。SHOW GRANTS FOR test_user001;返回结果如下:
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for test_user001@% |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALTER, CREATE, CREATE USER, DELETE, DROP, INSERT, UPDATE, INDEX, CREATE VIEW, SHOW VIEW, SHOW DATABASES, SUPER, PROCESS, CREATE_SYNONYM, REFERENCES, FILE, ALTER TENANT, ALTER SYSTEM, CREATE RESOURCE POOL, CREATE RESOURCE UNIT, REPLICATION SLAVE, REPLICATION CLIENT, DROP DATABASE LINK, CREATE DATABASE LINK, EXECUTE, ALTER ROUTINE, CREATE ROUTINE, CREATE TABLESPACE, SHUTDOWN, RELOAD, CREATE ROLE, DROP ROLE, TRIGGER ON *.* TO 'test_user001' |
+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.001 sec)
示例二:撤销用户的所有权限
撤销用户 test_user002 的所有权限。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM test_user002;
示例三:撤销用户或角色中的角色
-
撤销角色
role002中的角色role001。REVOKE role001 FROM role002; -
撤销用户
user001中的角色role001。REVOKE role001 FROM user001;