#### 13.7.1.11 SET ROLE 语句

[](<>)[](<>)[](<>)

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

[`设定角色`](set-role.html)通过指定其授予的角色中的哪些是活动的，修改当前用户在当前会话中的有效权限。授予的角色包括明确授予用户的角色和在[`强制角色`](server-system-variables.html#sysvar_mandatory_roles)系统变量值。

例子：

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

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

直接授予用户（而不是通过角色）授予的权限不受活动角色更改的影响。

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

-   `默认`：激活账户默认角色。默认角色是使用指定的角色[`设置默认角色`](set-default-role.html).

    当用户连接到服务器并成功进行身份验证时，服务器会确定要激活哪些角色作为默认角色。如果[`activate_all_roles_on_login`](server-system-variables.html#sysvar_activate_all_roles_on_login)启用系统变量，服务器激活所有授予的角色。否则，服务器执行[`设置角色默认值`](set-role.html)含蓄地。服务器仅激活可以激活的默认角色。对于无法激活的默认角色，服务器会将警告写入其错误日志，但客户端不会收到任何警告。

    如果用户执行[`设置角色默认值`](set-role.html)在会话期间，如果无法激活任何默认角色（例如，如果它不存在或未授予用户），则会发生错误。在这种情况下，当前的活动角色不会改变。

-   `没有`：将活动角色设置为`没有`（没有活跃的角色）。

-   `全部`：激活授予该帐户的所有角色。

-   `除了 *`角色`* [, *`角色`*] ...`：激活授予该帐户的所有角色，但指定的角色除外。命名角色不需要存在或被授予帐户。

-   `*`角色`* [, *`角色`*] ...`：激活命名角色，必须授予帐户。

笔记

[`设置默认角色`](set-default-role.html)和[`设置角色默认值`](set-role.html)是不同的陈述：

-   [`设置默认角色`](set-default-role.html)定义在帐户会话中默认激活哪些帐户角色。

-   [`设置角色默认值`](set-role.html)将当前会话中的活动角色设置为当前帐户默认角色。

    有关角色使用示例，请参阅[第 6.2.10 节，“使用角色”](roles.html).
