Documentation Home

13.7.1.11 SET ROLE 语句

SET ROLE {
    DEFAULT
  | NONE
  | ALL
  | ALL EXCEPT role [, role ] ...
  | role [, role ] ...
}

SET ROLE通过指定其授予的哪些角色处于活动状态,修改当前用户在当前会话中的有效权限。授予的角色包括明确授予用户的角色和在mandatory_roles系统变量值中命名的角色。

例子:

SET ROLE DEFAULT;
SET ROLE 'role1', 'role2';
SET ROLE ALL;
SET ROLE ALL EXCEPT 'role1', 'role2';

每个角色名称都使用第 6.2.5 节“指定角色名称” 中描述的格式 。角色名称的主机名部分(如果省略)默认为'%'.

直接授予用户(而不是通过角色)的特权不受活动角色更改的影响。

该语句允许这些角色说明符:

  • DEFAULT:激活帐户默认角色。默认角色是用 指定的角色 SET DEFAULT ROLE

    当用户连接到服务器并成功通过身份验证时,服务器会确定将哪些角色激活为默认角色。如果 activate_all_roles_on_login 启用系统变量,服务器将激活所有授予的角色。否则,服务器 SET ROLE DEFAULT隐式执行。服务器仅激活可以激活的默认角色。对于无法激活的默认角色,服务器将警告写入其错误日志,但客户端不会收到任何警告。

    如果用户 SET ROLE DEFAULT在会话期间执行,如果无法激活任何默认角色(例如,如果它不存在或未授予用户),则会发生错误。在这种情况下,不会更改当前活动角色。

  • NONE:设置活动角色为 NONE(无活动角色)。

  • ALL:激活授予该帐户的所有角色。

  • ALL EXCEPT role [, role ] ...:激活授予该帐户的所有角色,但指定的角色除外。命名角色不需要存在或被授予帐户。

  • role [, role ] ...:激活命名角色,必须授予该帐户。

笔记

SET DEFAULT ROLE并且 SET ROLE DEFAULT是不同的陈述:

  • SET DEFAULT ROLE定义在帐户会话中默认激活哪些帐户角色。

  • SET ROLE DEFAULT将当前会话中的活动角色设置为当前帐户默认角色。

有关角色使用示例,请参阅第 6.2.10 节,“使用角色”