您可以根据需要指定用户生效或失效的角色。
一个用户可以被授予多个角色。授予角色后,您可以再设置这些角色中,哪些生效,哪些失效。用户将拥有生效角色的所有权限,用户不拥有失效角色中所包含的权限。
指定用户在登录时生效或失效的角色
OceanBase 数据库的 Oracle 模式支持通过 ALTER USER 语句的 DEFAULT ROLE 子句指定其他用户在登录时生效或失效的角色。
前提条件
当前用户必须拥有被授予的角色,并且拥有
GRANT OPTION权限,才能执行生效或失效角色操作。当前用户还必须拥有
UPDATE USER系统权限,才可以执行ALTER USER命令。
查看当前拥有权限的操作请参见 查看用户权限。如果您没有 GRANT OPTION 权限,请联系管理员为您添加,为用户添加权限的相关操作请参见 修改用户权限。查看当前拥有角色的操作请参见 查看角色。
注意事项
DEFAULT ROLE 子句仅支持指定通过 GRANT 语句直接授予用户的角色或由具有 CREATE ROLE 权限的用户创建的角色,不能通过 DEFAULT ROLE 子句指定以下角色:
未授予用户的角色
不能指定生效或失效用户未被授予的角色,用户角色授权相关操作,请参见 将角色授予用户。
通过其他角色授予的角色
不能指定生效或失效通过其他角色授予的角色,将角色授予角色的相关操作,请参见 将角色授予角色。
生效或失效角色的语法
主要包含以下场景:
指定在登录时生效用户被授予的一个或多个角色
SQL 语句如下:
obclient> ALTER USER user_name DEFAULT ROLE role_name;指定在登录时生效用户被授予的所有角色
SQL 语句如下:
obclient> ALTER USER user_name DEFAULT ROLE ALL;指定在登录时生效用户被授予的部分角色
SQL 语句如下:
obclient> ALTER USER user_name DEFAULT ROLE ALL EXCEPT role_name;指定在登录时失效用户被授予的所有角色。
SQL 语句如下:
obclient>ALTER USER user_name DEFAULT ROLE NONE;
语句使用说明:
role_name:角色名,多个角色名之间用英文逗号(,)分隔。ALL:表示生效用户被授予的所有角色。EXCEPT子句表示除了EXCEPT子句中列出的角色除外,生效用户被授予的其他所有角色。多个角色名之间用英文逗号(,)分隔。NONE:表示失效用户被授予的所有角色。
操作示例
指定在登录时生效用户被授予的角色 role1。
obclient>ALTER USER test DEFAULT ROLE role1;
更多 ALTER USER 语句的信息请参见 ALTER USER。
指定当前会话中生效或失效的角色
OceanBase 数据库的 Oracle 模式支持在当前会话中通过 SET ROLE 语句生效或失效当前登录用户被授予的角色。
说明
通过
SET ROLE语句生效或失效的角色,仅影响当前 Session,不影响之后的 Session。
主要使用场景如下:
指定在当前会话中生效当前登录用户被授予的一个或多个角色
SQL 语句如下:
obclient> SET ROLE role_name [ IDENTIFIED BY password ];指定在当前会话中生效当前登录用户被授予的所有角色
SQL 语句如下:
obclient> SET ROLE ALL;指定在当前会话中生效当前登录用户被授予的部分角色
SQL 语句如下:
obclient> SET ROLE ALL EXCEPT role_name;指定在当前会话中失效当前登录用户被授予的所有角色。
SQL 语句如下:
obclient> SET ROLE NONE;
语句使用说明:
role_name:角色名,多个角色名之间用英文逗号(,)分隔。IDENTIFIED BY password:指定生效角色的密码。如果在新建角色时,为该角色指定了密码,则您必须指定密码才能生效该角色。新建角色的相关操作及介绍请参见 新建角色。
ALL:表示在当前会话中,生效当前登录用户被授予的所有角色。注意
生效用户被授予的所有角色时,如果被授予的角色中有指定了密码的角色,系统将会报错。
EXCEPT子句表示除了EXCEPT子句中列出的角色除外,生效当前登录用户被授予的其他所有角色。多个角色名之间用英文逗号(,)分隔。NONE:表示失效当前登录用户被授予的所有角色。
示例:
指定在当前会话中生效由密码
**1***标识的角色role1。obclient> SET ROLE role1 IDENTIFIED BY **1***; Query OK, 0 rows affected指定在当前会话中生效除了角色
role2之外的所有角色。obclient> SET ROLE ALL EXCEPT role2; Query OK, 0 rows affected




