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