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