SET ROLE

为用户的当前会话启用角色。用户可以访问授予该角色的特权。启用角色不会影响当前已启用的角色。

语法

SET ROLE roles‑expression

参数

roles‑expression
使用以下表达式之一指定此用户的默认角色:
  • NONE (默认值):禁用所有角色。

  • roles‑list: 要启用的角色列表,以逗号分隔。您只能设置当前已授予您的角色。

  • ALL [EXCEPT roles‑list]: 启用当前已授予此用户的所有角色,不包括在可选 EXCEPT 子句中指定的任何以逗号分隔的角色。

  • DEFAULT:启用所有默认角色。根据定义,默认角色会自动启用,但如果使用 SET ROLE NONE 禁用了这些角色,要重新启用这些角色,此选项可能很有用。

特权

示例

示例如下:

  • SHOW AVAILABLE_ROLES; 会列出用户可使用的角色,但不启用。

  • SET ROLE applogs; 为用户启用 applogs 角色。

  • SHOW ENABLED_ROLES; 将 applogs 角色列为已为用户启用 (SET)。

  • SET ROLE appuser; 为用户启用 appuser 角色。

  • SHOW ENABLED_ROLES 将 applogs 和 appuser 列为用户的已启用角色。

  • SET ROLE NONE 禁用用户的所有已启用角色。

  • SHOW ENABLED_ROLES 显示没有为用户启用任何角色。


=> SHOW AVAILABLE_ROLES;
      name       |          setting
-----------------+----------------------------
 available roles | applogs, appadmin, appuser
(1 row)

=> SET ROLE applogs;
SET
=> SHOW ENABLED_ROLES;
     name      | setting
---------------+---------
 enabled roles | applogs
(1 row)

=> SET ROLE appuser;
SET
=> SHOW ENABLED_ROLES;
     name      |     setting
---------------+------------------
 enabled roles | applogs, appuser
(1 row)

=> SET ROLE NONE;
SET


=> SHOW ENABLED_ROLES;
     name      | setting
---------------+---------
 enabled roles |
(1 row)

设置用户默认角色

虽然通常是由 DBADMIN 用户负责设置用户默认角色,但作为用户,您可以设置自己的角色。例如,如果您运行 SET ROLE NONE,则您的所有已启用角色将被禁用。因而决定了您需要将 role1 作为默认角色进行访问。DBADMIN 使用 ALTER USER 向您分配默认角色:

=> ALTER USER user1 default role role1;

此示例将 role1 设置为 user1 的默认角色,因为 DBADMIN 使用 ALTER USER 分配了此默认角色。

user1 => SET ROLE default;
user1 => SHOW ENABLED_ROLES;
    name      | setting
-----------------------
enabled roles |   role1
(1 row)

将所有角色设为默认值

此示例将所有授予 user1 的角色设为默认角色:

user1 => SET ROLE all;
user1 => show enabled roles;
    name      |   setting
----------------------------------
enabled roles | role1, role2, role3
(1 row)

将所有角色设为默认值(含例外)

此示例将授予用户的所有角色设为默认角色,但 role1 除外。

user1 => set role all except role1;
user1 => SHOW ENABLED_ROLES
     name     | setting
----------------------------
enabled roles | role2, role3
(1 row)