MySQL 5.7起password字段被移除,改用authentication_string存储密码,并需同步设置plugin为mysql_native_password且执行FLUSH PRIVILEGES;否则即使更新字段仍无法登录。

因为 MySQL 5.7 起,password 字段被正式移除,改用 authentication_string 存储加密后的凭证 —— 这不是 bug,是官方设计变更。
MySQL 5.7 的 user 表结构确实删掉了 password 字段
执行 DESCRIBE mysql.user; 就能直接验证:字段列表里没有 password,取而代之的是 authentication_string。同时新增了 password_last_changed、password_lifetime 和 account_locked 等安全相关字段。旧版中靠 password 字段判断用户是否存在密码的方式,在 5.7+ 已失效。
update user set password=password('xxx') 报 ERROR 1054 怎么办
这是最典型的报错场景,错误信息是 ERROR 1054 (42S22): Unknown column 'password' in 'field list'。解决方法很简单,但必须两步到位:
构建并排查Microsoft Word邮件合并及DOCX模板工作流,使用合并域、内容控件、文档属性、重复区块、数据等
- 把 SQL 中的
password(字段名)替换成authentication_string - 确保
plugin字段值为mysql_native_password,否则即使改了authentication_string,也可能出现任意密码都能登录或拒绝连接 - 执行完
UPDATE后,必须运行FLUSH PRIVILEGES;,否则修改不生效
正确写法示例:UPDATE mysql.user SET authentication_string=PASSWORD('newpass'), plugin='mysql_native_password' WHERE User='root' AND Host='localhost';FLUSH PRIVILEGES;
为什么改了 authentication_string 还是登不上?
常见原因不是字段写错,而是插件机制没对齐。MySQL 5.7 默认可能把 root 用户的 plugin 设为 auth_socket 或 caching_sha2_password(尤其在 Ubuntu/Debian 安装包中),这时只更新 authentication_string 没用。
- 先查当前配置:
SELECT User, Host, plugin, authentication_string FROM mysql.user WHERE User='root'; - 如果
plugin不是mysql_native_password,必须显式更新:UPDATE mysql.user SET plugin='mysql_native_password' WHERE User='root' AND Host='localhost'; -
caching_sha2_password是 8.0 默认,但在 5.7 某些发行版里也提前引入,它不兼容老客户端,遇到连接失败时优先怀疑这个
真正容易被忽略的点是:字段名变了只是表层,背后认证插件和密码哈希方式也同步升级了;只改一个字段,不配插件、不刷权限、不看 host 匹配,十次有八次连不上。


















