### 6.2.5 指定角色名称

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

MySQL 角色名称是指角色，它们是特权的命名集合。有关角色使用示例，请参阅[第 6.2.10 节，“使用角色”](roles.html).

角色名称的语法和语义类似于帐户名称；看[第 6.2.4 节，“指定帐户名称”](account-names.html).正如存储在授权表中一样，它们具有与帐户名称相同的属性，这些属性在[授予表范围列属性](grant-tables.html#grant-tables-scope-column-properties).

角色名称在以下方面与帐户名称不同：

-   角色名称的用户部分不能为空。因此，不存在类似于“匿名用户”概念的“匿名角色”。

-   至于帐户名称，省略角色名称的主机部分会导致`'%'`.但不像`'%'`在帐户名称中，主机部分`'%'`在角色名称中没有通配符属性。例如，对于一个名字`'我'@'％'`用作角色名称，主机部分（`'%'`) 只是一个字面值；它没有“任何主机”匹配的属性。

-   角色名称的主机部分中的网络掩码表示法没有意义。

-   帐户名是允许的[`当前用户（）`](information-functions.html#function_current-user)在几种情况下。角色名称不是。

    有可能在一行`mysql.user`系统表作为帐户和角色。在这种情况下，任何特殊的用户名或主机名匹配属性都不适用于将该名称用作角色名称的上下文。例如，您不能执行以下语句，期望它使用具有用户部分的所有角色设置当前会话角色`我的角色`和任何主机名：


```
SET ROLE 'myrole'@'%';
```

相反，该语句将会话的活动角色设置为具有完全相同名称的角色`'我的角色'@'％'`.

出于这个原因，角色名通常只使用用户名部分来指定，而让主机名部分隐含`'%'`.指定具有非`'%'`如果您打算创建一个既可用作角色又可用作允许从给定主机连接的用户帐户的名称，主机部分可能很有用。
