MariaDB问题:创建角色后无法生效且无法授权求助
MariaDB角色可见性与权限授权问题解决方案
1. 角色在information_schema.APPLICABLE_ROLES不显示的处理
information_schema.APPLICABLE_ROLES仅展示当前会话已激活的适用角色,非root@localhost用户创建角色后需手动激活:
- 会话级激活:执行
SET ROLE role_test; - 永久激活(下次登录自动生效):执行
SET DEFAULT ROLE role_test FOR '你的创建用户'@'localhost';
mysql.roles_mapping是静态存储角色元数据的系统表,只要角色创建成功就会存在,和APPLICABLE_ROLES的动态展示逻辑不同。
2. 非root用户无法授予角色的解决
即便用户拥有全局权限,创建角色后默认不会获得该角色的管理权限,需显式授予:
GRANT role_test TO '你的创建用户'@'localhost' WITH ADMIN OPTION; FLUSH PRIVILEGES;
执行后该用户即可将role_test授予其他账户。
3. msc_dev用户授权失败的排查与修复
给msc_dev授予role_msc_cus带WITH ADMIN OPTION后仍报错,按以下步骤排查:
- 先激活角色:切换到
msc_dev用户后执行SET ROLE role_msc_cus; - 修正授权语句格式:原语句中用户格式错误,正确写法为:
(注意:用户名和主机需分开,GRANT role_msc_cus TO 'x2'@'x2.com' WITH ADMIN OPTION;'x2@x2.com'@'localhost'是错误格式) - 刷新权限并重新登录:执行
FLUSH PRIVILEGES;后退出msc_dev再重新登录尝试
核心要点
root@localhost因拥有全局所有权限,创建角色后自动获得该角色的管理权限,无需额外操作- 普通用户创建角色后,必须显式通过
GRANT ... WITH ADMIN OPTION获得角色管理权限,才能将角色授予他人 APPLICABLE_ROLES的展示完全依赖当前会话的角色激活状态,未激活的角色不会出现在该视图中
内容的提问来源于stack exchange,提问作者Jörg
相关产品推荐
相关产品推荐

