跳到主要内容

激活角色

一个用户可以被授予多个角色。授予角色后,如果被授予的角色在会话中处于激活状态,则用户可以使用该角色所包含的权限;否则,用户无法使用该角色所包含的权限。如果需要确认当前会话中有哪些角色处于激活状态,可以使用 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;

    如果需要指定多个用户,例如,指定用户 test1test2 在登录时默认停用用户被授予的所有角色,示例如下:

    SET DEFAULT ROLE NONE TO test1,test2;
  • 指定用户 test1 在登录时,默认激活用户被授予的所有角色

    SET DEFAULT ROLE ALL TO test1;
  • 指定用户 test1 在登录时,默认激活用户被授予的 employeedeveloper 角色

    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 在登录时,默认激活用户被授予的 employeedeveloper 角色

    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;

    支持指定多个排除的角色。

  • 指定在当前会话中,激活用户的 employeedeveloper 角色

    SET ROLE employee,developer;

相关文档

查看角色