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