MySQL执行GRANT后权限未即时生效,如何手动刷新权限使变更立即体现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计852个文字,预计阅读时间需要4分钟。
在MySQL 5.7及更高版本中,使用标准`GRANT`或`REVOKE`语句授权权限时,MySQL会自动重新加载权限缓存——即新连接立即生效。要强制立即生效,使用`FLUSH PRIVILEGES;`命令,这不是保守操作,而是紧急操作:
常见误操作:
- 执行
GRANT SELECT ON mydb.* TO 'u'@'localhost';后紧跟FLUSH PRIVILEGES;→ 语法合法,但纯属冗余 - 误以为“不刷就不生效”,结果忽略了真实问题(比如没重连、连错实例、主机名拼错)
- 在主从架构里只在从库执行
GRANT→ 权限写不进主库 binlog,从库刷新也无效
为什么刚 GRANT 完还是 Access denied?关键在连接生命周期
MySQL 的权限检查只发生在连接建立那一刻。已存在的连接不会动态感知权限变更——哪怕你刚给它加了 ALL PRIVILEGES,当前会话仍按旧权限运行。
本文共计852个文字,预计阅读时间需要4分钟。
在MySQL 5.7及更高版本中,使用标准`GRANT`或`REVOKE`语句授权权限时,MySQL会自动重新加载权限缓存——即新连接立即生效。要强制立即生效,使用`FLUSH PRIVILEGES;`命令,这不是保守操作,而是紧急操作:
常见误操作:
- 执行
GRANT SELECT ON mydb.* TO 'u'@'localhost';后紧跟FLUSH PRIVILEGES;→ 语法合法,但纯属冗余 - 误以为“不刷就不生效”,结果忽略了真实问题(比如没重连、连错实例、主机名拼错)
- 在主从架构里只在从库执行
GRANT→ 权限写不进主库 binlog,从库刷新也无效
为什么刚 GRANT 完还是 Access denied?关键在连接生命周期
MySQL 的权限检查只发生在连接建立那一刻。已存在的连接不会动态感知权限变更——哪怕你刚给它加了 ALL PRIVILEGES,当前会话仍按旧权限运行。

