Amazon AWS RDS MySQL 8.0.13角色权限未继承问题排查
问题分析与解决方案
这个问题其实是MySQL 8.0角色机制的一个常见坑——授予用户角色后,角色不会自动成为用户的默认激活角色,导致用户登录后角色权限并未生效,只有基础的USAGE权限,所以会提示访问被拒绝。
具体原因
你已经完成了角色创建、权限分配和角色授予的全流程,但MySQL 8.0默认要求用户显式激活角色,或者将角色设置为用户的默认角色,否则登录后角色的权限不会自动加载。从你提供的SHOW GRANTS结果也能看出来:dev3的权限记录里只有授予角色的条目,但没有角色对应的实际数据库权限,本质是角色处于未激活状态。
解决方法
有两种方式可以快速解决这个问题:
1. 设置角色为用户的默认角色(推荐)
执行这条命令,让dev3每次登录后自动激活TEST_ROLE:
ALTER USER 'dev3'@'%' DEFAULT ROLE TEST_ROLE; FLUSH PRIVILEGES;
之后用dev3重新登录数据库,就能直接访问test_data库了。
2. 用户登录后手动激活角色
如果只是临时需要使用角色权限,可以在dev3登录后执行:
SET ROLE TEST_ROLE;
执行后角色权限会立即生效,此时再访问test_data就正常了。
验证结果
设置默认角色后,用dev3登录并执行SHOW GRANTS;,你会看到输出里已经包含角色对应的实际权限:
GRANT USAGE ON *.* TO `dev3`@`%` GRANT ALL PRIVILEGES ON `test_data`.* TO `dev3`@`%` GRANT `TEST_ROLE`@`%` TO `dev3`@`%`
这说明角色权限已经成功加载。
内容的提问来源于stack exchange,提问作者Mike de H
相关产品推荐
相关产品推荐

