SET ROLE
为用户的当前会话启用角色。用户可以访问授予该角色的特权。启用角色不会影响当前已启用的角色。
提示
使用 SHOW AVAILABLE ROLES 列出授予的角色。语法
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)