MySQL 9.0 发行说明
MySQL 角色名称指的是角色,角色是权限的命名集合。有关角色用法示例,请参阅 第 8.2.10 节 “使用角色”。
角色名称的语法和语义与帐户名称类似;请参阅 第 8.2.4 节 “指定帐户名称”。存储在授权表中时,它们具有与帐户名称相同的属性,如 授权表范围列属性 中所述。
角色名称在以下方面与帐户名称不同:
角色名称的用户部分不能为空。因此,没有类似于““匿名用户””概念的““匿名角色””。
与帐户名称一样,省略角色名称的主机部分会导致主机部分为
'%'
。但与帐户名称中的'%'
不同,角色名称中的主机部分'%'
没有通配符属性。例如,对于用作角色名称的名称'me'@'%'
,主机部分('%'
)只是一个文字值;它没有““任何主机””匹配属性。角色名称的主机部分中的网络掩码表示法没有任何意义。
在某些情况下,帐户名称允许为
CURRENT_USER()
。角色名称则不允许。
在 mysql.user
系统表中,一行可能同时充当帐户和角色。在这种情况下,任何特殊用户或主机名匹配属性在将名称用作角色名称的上下文中均不适用。例如,不能执行以下语句并期望它使用用户部分为 myrole
且具有任何主机名的所有角色来设置当前会话角色:
SET ROLE 'myrole'@'%';
相反,该语句会将会话的活动角色设置为名称恰好为 'myrole'@'%'
的角色。
因此,角色名称通常仅使用用户名部分指定,并让主机名部分隐式为 '%'
。如果打算创建一个既可以用作角色又可以用作允许从给定主机连接的用户帐户的名称,则使用非 '%'
主机部分指定角色会很有用。