跳到主要内容

REVOKE

描述

该语句用于撤销之前分配给用户或角色的权限,或者撤销用户或角色中的角色。

使用限制及注意事项

  • 撤销对象权限操作不会级联。例如,用户 user1user2 授予了某些权限,撤回 user1 的权限不会同时也撤回 user2 的相应权限。
  • 需要撤销权限的用户或者角色必须存在,否则将报错。
  • 系统变量 mandatory_roles 中的角色不能撤销。
  • 执行 REVOKE 语句会对当前登录的用户立即生效。

权限要求

  • 撤销特定权限级别权限:用户必须拥有被撤销的权限(例如,user1 要撤销 user2 对表 t1SELECT 权限,则 user1 必须拥有表 t1SELECT 的权限),并且拥有 GRANT OPTION 权限。

  • 撤销所有权限和授予选项:撤销 ALL PRIVILEGESGRANT OPTION 权限时,当前用户必须拥有全局 GRANT OPTION 权限,或者对权限表的 UPDATEDELETE 权限。

  • 撤销用户或角色中角色权限:撤销角色时,当前用户必须拥有被撤销的角色,并且拥有 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

  • *.*:表示所有数据库中的所有表。

    示例如下:

    从用户 user001user002 中撤销全局的 SELECTINSERT 权限。

    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_catalogUSE CATALOG 权限。。

    REVOKE USE CATALOG ON CATALOG test_odps_catalog FROM user004;

示例

示例一:撤销对象权限

通过撤销 test_user001 用户的 SELECT 权限,查看 ALL PRIVILEGES 授予了哪些权限。

  1. 给用户 test_user001 授予 ALL PRIVILEGES 权限。

    GRANT ALL PRIVILEGES ON *.* TO test_user001;
  2. 查看用户 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)
  3. 撤销用户 test_user001SELECT 权限。

    REVOKE SELECT ON *.* FROM test_user001;
  4. 再次查看用户 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;

相关文档