Mysql SET ROLE语句

来自泡泡学习笔记
跳到导航 跳到搜索
SET ROLE {
    DEFAULT
  | NONE
  | ALL
  | ALL EXCEPT role [, role ] ...
  | role [, role ] ...
}


SET ROLE命令通过指定当前会话中活动的已授予角色,修改当前用户在当前会话中的有效权限。已授予角色包括显式授予用户的角色和强制角色系统变量值中命名的角色。


示例:

SET ROLE DEFAULT;
SET ROLE 'role1', 'role2';
SET ROLE ALL;
SET ROLE ALL EXCEPT 'role1', 'role2';


每个角色名称都采用特定格式。如果角色名称中省略了主机名部分,默认为'%'。


用户直接授予的权限(而非通过角色授予的权限)不受活动角色更改的影响。


该语句支持以下角色指定符:


  • DEFAULT:激活账户的默认角色。默认角色是使用SET DEFAULT ROLE指定的角色。


当用户连接到服务器并成功验证身份时,服务器确定要激活的默认角色。如果启用了activate_all_roles_on_login系统变量,则服务器激活所有授予的角色;否则,服务器隐式执行SET ROLE DEFAULT。服务器只激活可以激活的默认角色。对于无法激活的默认角色,服务器会在错误日志中写入警告,但客户端不会收到警告。


如果用户在会话中执行SET ROLE DEFAULT,如果任何默认角色无法激活(例如,不存在或未授予给用户),则会发生错误。在这种情况下,当前活动角色不会被改变。


  • NONE:将活动角色设置为NONE(无活动角色)。


  • ALL:激活授予账户的所有角色。


  • ALL EXCEPT role [, role ] ...:激活授予账户的所有角色,除了指定的角色。指定的角色可以不存在或未授予给账户。


  • role [, role ] ...:激活指定的角色,这些角色必须被授予给该账户。
注意:
SET DEFAULT ROLE和SET ROLE DEFAULT是不同的语句:

SET DEFAULT ROLE定义了在账户会话中默认激活哪些账户角色。

SET ROLE DEFAULT将当前会话中的活动角色设置为当前账户的默认角色。