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