激活角色
一个用户可以被授予多个角色。授予角色后,如果被授予的角色在会话中处于激活状态,则用户可以使用该角色所包含的权限;否则,用户无法使用该角色所包含的权限。如果需要确认当前会话中有哪些角色处于激活状态,可以使用 CURRENT_ROLE() 函数查询。
默认情况下,向其他用户或角色中授予的角色不会在会话中自动激活。
指定用户在登录时默认激活的角色
seekdb 支持通过 SET DEFAULT ROLE 语句或 ALTER USER 语句的 DEFAULT ROLE 子句指定用户在登录时默认激活的角色。
前提条件
如果用户是为自身设置默认激活已经被授予的角色,则不需要任何权限。
-
当前用户必须拥有待指定的角色,才能执行本操作。
-
当前用户还必须拥有
CREATE USER权限,才可以执行SET DEFAULT ROLE语句或ALTER USER语句。
通过 SET DEFAULT ROLE 语句设置的操作示例
使用 SET DEFAULT ROLE 语句时,每条语句支持同时指定多个用户在登录时默认激活的角色。
-
指定用户
test1在登录时,默认停用用户被授予的所有角色SET DEFAULT ROLE NONE TO test1;如果需要指定多个用户,例如,指定用户
test1和test2在登录时默认停用用户被授予的所有角色,示例如下:SET DEFAULT ROLE NONE TO test1,test2; -
指定用户
test1在登录时,默认激活用户被授予的所有角色SET DEFAULT ROLE ALL TO test1; -
指定用户
test1在登录时,默认激活用户被授予的employee和developer角色SET DEFAULT ROLE employee,developer TO test1;
通过 ALTER USER 语句设置的操作示例
使用 ALTER USER 语句时,每条语句仅支持指定一个用户在登录时默认激活的角色。
-
指定用户
test1在登录时,默认停用用户被授予的所有角色ALTER USER test1 DEFAULT ROLE NONE; -
指定用户
test1在登录时,默认激活用户被授予的所有角色ALTER USER test1 DEFAULT ROLE ALL; -
指定用户
test1在登录时,默认激活用户被授予的employee和developer角色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语句指定的默认激活的角色。
启用在登录时自动激活用户被授予的所有角色的语句如下:
SET GLOBAL activate_all_roles_on_login = on;
指定当前会话中激活的角色
seekdb 支持在当前会话中通过 SET ROLE 语句指定激活当前登录用户被授予的角色。
通过 SET ROLE 语句激活的角色,仅影响当前 Session,不影响之后 的 Session。
操作示例如下:
-
指定在当前会话中,保持默认角色的设置。
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语句指定的默认激活的角色。
-
-
指定在当前会话中停用用户被授予的所有角色
SET ROLE NONE; -
指定在当前会话中激活用户被授予的所有角色
SET ROLE ALL; -
指定在当前会话中,激活用户被授予的角色中除了角色
role1以外的其他所有角色SET ROLE ALL EXCEPT role1;支持指定多个排除的角色。
-
指定在当前会话中,激活用户的
employee和developer角色SET ROLE employee,developer;