Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Specifying Role Names

8.2.5 指定角色名称

MySQL 角色名称是指具有特定权限的命名集合。有关角色使用示例,请参阅 第 8.2.10 节,“使用角色”

角色名称的语法和语义与账户名称相似;请参阅 第 8.2.4 节,“指定账户名称”。在授权表中存储时,它们具有与账户名称相同的属性,这些属性在 授权表范围列属性 中进行了描述。

角色名称与账户名称的区别在于:

  • 角色名称的用户部分不能为空。因此,没有类似于“匿名用户”的“匿名角色”概念。

  • 与账户名称一样,省略角色名称的主机部分将导致主机部分为 '%'。但是,unlike '%' 在账户名称中,角色名称中的 '%' 主机部分没有通配符属性。例如,对于名称 'me'@'%' 用作角色名称,主机部分 ('%') 只是一个文字值;它没有“任何主机”匹配属性。

  • 角色名称中的主机部分的网络掩码表示法没有意义。

  • 账户名称可以在某些上下文中被允许为 CURRENT_USER()。角色名称不能。

mysql.user 系统表中的一行可以同时作为账户和角色。在这种情况下,名称作为角色名称时,不应用于特殊用户或主机名称匹配属性。例如,您不能执行以下语句,以期望它将当前会话角色设置为所有用户部分为 myrole 的角色:

SET ROLE 'myrole'@'%';

相反,该语句将当前会话的活动角色设置为名称恰好为 'myrole'@'%' 的角色。

因此,角色名称通常使用只有用户名称部分,并让主机名称部分隐式地为 '%'。指定一个具有非 '%' 主机部分的角色可以是有用的,如果您打算创建一个既可以作为角色又可以作为用户账户的名称,该账户可以从给定的主机连接。