首批通过分布式安全可靠测评,为关键业务系统打造
激活角色
更新时间:2026-04-10 11:58:01
一个用户可以被授予多个角色。授予角色后,如果被授予的角色在会话中处于激活状态,则用户可以使用该角色所包含的权限;否则,用户无法使用该角色所包含的权限。如果需要确认当前会话中有哪些角色处于激活状态,可以使用 CURRENT_ROLE() 函数查询。
默认情况下,向其他用户或角色中授予的角色不会在会话中自动激活。
指定用户在登录时默认激活的角色
OceanBase 数据库的 MySQL 模式支持通过 SET DEFAULT ROLE 语句或 ALTER USER 语句的 DEFAULT ROLE 子句指定用户在登录时默认激活的角色。
前提条件
注意
如果用户是为自身设置默认激活已经被授予的角色,则不需要任何权限。
当前用户必须拥有待指定的角色,才能执行本操作。
当前用户还必须拥有
CREATE USER权限,才可以执行SET DEFAULT ROLE语句或ALTER USER语句。
通过 SET DEFAULT ROLE 语句设置的操作示例
使用 SET DEFAULT ROLE 语句时,每条语句支持同时指定多个用户在登录时默认激活的角色。
指定用户
test1在登录时,默认停用用户被授予的所有角色obclient [oceanbase]> SET DEFAULT ROLE NONE TO test1;如果需要指定多个用户,例如,指定用户
test1和test2在登录时默认停用用户被授予的所有角色,示例如下:obclient [oceanbase]> SET DEFAULT ROLE NONE TO test1,test2;指定用户
test1在登录时,默认激活用户被授予的所有角色obclient [oceanbase]> SET DEFAULT ROLE ALL TO test1;指定用户
test1在登录时,默认激活用户被授予的employee和developer角色obclient [oceanbase]> SET DEFAULT ROLE employee,developer TO test1;
通过 ALTER USER 语句设置的操作示例
使用 ALTER USER 语句时,每条语句仅支持指定一个用户在登录时默认激活的角色。
指定用户
test1在登录时,默认停用用户被授予的所有角色obclient [oceanbase]> ALTER USER test1 DEFAULT ROLE NONE;指定用户
test1在登录时,默认激活用户被授予的所有角色obclient [oceanbase]> ALTER USER test1 DEFAULT ROLE ALL;指定用户
test1在登录时,默认激活用户被授予的employee和developer角色obclient [oceanbase]> ALTER USER test1 DEFAULT ROLE employee,developer;
启用用户在登录时自动激活所有角色
除了上述激活角色的方式,拥有 ALTER SYSTEM 权限的用户还可以通过 Global 变量 activate_all_roles_on_login 启用登录时自动激活用户被授予的所有角色。该变量的默认值为 off,表示禁用在登录时自动激活用户被授予的所有角色。
设置该变量前,需要注意以下事项:
如果变量
activate_all_roles_on_login值为on,则该设置的优先级高于通过SET DEFAULT ROLE语句或ALTER USER语句指定的默认激活的角色,即系统将使用变量activate_all_roles_on_login的设置,在登录时默认自动激活用户被授予的所有角色。如果变量
activate_all_roles_on_login值为off,则系统将使用通过SET DEFAULT ROLE语句或ALTER USER语句指定的默认激活的角色。
启用在登录时自动激活用户被授予的所有角色的语句如下:
obclient [oceanbase]> SET GLOBAL activate_all_roles_on_login = on;
指定当前会话中激活的角色
OceanBase 数据库的 MySQL 模式支持在当前会话中通过 SET ROLE 语句指定激活当前登录用户被授予的角色。
说明
通过 SET ROLE 语句激活的角色,仅影响当前 Session,不影响之后的 Session。
操作示例如下:
指定在当前会话中,保持默认角色的设置。
obclient [oceanbase]> SET ROLE DEFAULT;语句执行后,系统会根据变量
activate_all_roles_on_login的值以及SET DEFAULT ROLE语句或ALTER USER语句设置的默认激活的角色来激活角色:如果变量
activate_all_roles_on_login的值为on,则在会话中激活用户授予的所有角色。如果变量
activate_all_roles_on_login的值为off,则在会话中激活SET DEFAULT ROLE语句或ALTER USER语句指定的默认激活的角色。
指定在当前会话中停用用户被授予的所有角色
obclient [oceanbase]> SET ROLE NONE;指定在当前会话中激活用户被授予的所有角色
obclient [oceanbase]> SET ROLE ALL;指定在当前会话中,激活用户被授予的角色中除了角色
role1以外的其他所有角色obclient [oceanbase]> SET ROLE ALL EXCEPT role1;支持指定多个排除的角色。
指定在当前会话中,激活用户的
employee和developer角色obclient [oceanbase]> SET ROLE employee,developer;