MySQL通过角色授予权限后无法查看目标数据库的原因与解决方法
问题原因
MySQL 分配给用户的角色默认不会在用户登录时自动激活,用户登录后的会话没有加载角色绑定的权限,因此无法访问授权范围内的my_db数据库。
你之前执行的FLUSH PRIVILEGES仅对直接授予用户的权限生效,不会自动激活绑定到用户的角色。
解决方法
临时激活当前会话角色
使用user@localhost登录后,手动执行以下命令即可在当前会话激活角色,权限立即生效:
SET ROLE 'sysadmin';
执行后可通过SELECT CURRENT_ROLE();验证激活状态,返回结果包含sysadmin即代表激活成功,此时再执行SHOW DATABASES;就能看到my_db。注意该方法仅对当前登录会话有效,退出重登后角色会回到未激活状态。
配置用户登录自动激活指定角色
如果需要让user@localhost每次登录都自动加载sysadmin角色的权限,使用高权限账号(如root)执行以下命令设置默认角色即可:
SET DEFAULT ROLE 'sysadmin' TO 'user'@'localhost';
配置完成后该用户后续所有新登录会话都会自动激活对应角色,无需每次手动操作,是最推荐的权限控制方案。
全局配置所有角色自动激活
如果需要让所有用户登录时自动激活自身绑定的全部角色,可以修改全局参数:
SET GLOBAL activate_all_roles_on_login = ON;
该参数对配置完成后所有新建立的会话立即生效,需要永久生效的话,要在MySQL配置文件my.cnf的[mysqld]段添加配置项activate_all_roles_on_login=ON,重启MySQL服务即可。该方案权限粒度较粗,非必要不推荐使用。
内容的提问来源于stack exchange,提问作者elanonrigby
相关产品推荐
相关产品推荐

