SET PASSWORD 在 MySQL 5.7 中可用,但必须配合 PASSWORD() 函数加密,如 SET PASSWORD FOR 'user'@'localhost' = PASSWORD('newpwd'); 否则报错;执行前需确认 CURRENT_USER() 匹配、具备 UPDATE 权限且未启用 super-read-only。

SET PASSWORD 在 MySQL 5.7 中是否还能用
能用,但有明确限制:它只适用于 MySQL 5.7 及更早版本,在 8.0+ 中虽保留语法但已被标记为“不推荐”,且 SET PASSWORD = PASSWORD('xxx') 这种写法在 8.0.11+ 会直接报错。你当前用的是 5.7,可以放心使用,但要注意函数调用方式和权限边界。
执行 SET PASSWORD 前必须确认的三件事
很多失败不是语法错,而是环境没对齐:
-
CURRENT_USER()返回的账户必须与你要修改的目标一致(比如你用root@localhost登录,却对'root'@'%'执行 SET PASSWORD,会报错 “Access denied”) - 必须拥有
UPDATE权限(通常 root 有,普通用户需被显式授权) - 如果数据库开启了
--super-read-only或read_only=1,会直接拒绝执行,报错ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option
正确写法与常见错误对比
MySQL 5.7 要求密码必须通过 PASSWORD() 函数加密(注意不是明文赋值),否则会报 ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number:
✅ 正确(修改其他用户):SET PASSWORD FOR 'testuser'@'localhost' = PASSWORD('NewPass123!');
✅ 正确(修改当前用户):SET PASSWORD = PASSWORD('NewPass123!');
需要创建、读取、编辑或处理 Word 文档(.docx / .dotx)时使用。触发词:'Word'、'word 文档'、'.docx'、'生成报告'、'制作合同/简历/方案/说明书'、'提取 word 内容'、'在文档里查找替换'、'给文档加页眉页脚/目录/表格'。也用于把任意内容排版成一份正式的 Word 文件。不要用它处理 PDF、Excel 或无关编程任务。中文创作场景尤其适合:小说大纲稿、投稿文档、合同、简历、工作总结。
❌ 错误(漏掉 PASSWORD()):SET PASSWORD FOR 'testuser'@'localhost' = 'NewPass123!';
❌ 错误(用错引号或空格):SET PASSWORD FOR 'testuser'@'localhost'=PASSWORD( 'NewPass123!' );(函数前后多空格不影响,但引号必须是英文单引号)
改完密码后为什么还是连不上
这不是 SET PASSWORD 的问题,而是后续动作缺失或配置冲突:
- 必须执行
FLUSH PRIVILEGES;—— 否则新密码不会加载进内存权限表 - 检查客户端是否缓存了旧连接(比如某些 ORM 或连接池未断开重连)
- 确认 host 匹配:MySQL 把
'user'@'localhost'和'user'@'127.0.0.1'视为两个不同账户,改错一个,另一个仍用旧密码 - 如果用 mysql 客户端命令行登录,记得加
-p并输入新密码;别误以为mysql -u user -poldpass这种写法能自动识别旧密码(它不会校验旧密码,只传参,且明文暴露风险高)
最常被忽略的一点:MySQL 5.7 默认启用密码强度策略(validate_password_policy),如果新密码太简单,PASSWORD() 函数虽然能执行成功,但后续登录时可能被拒绝。临时绕过可用 SET GLOBAL validate_password_policy = LOW;,但仅限测试环境。

















