mysql 5.7版本中,SET PASSWORD是官方提供的用于修改用户密码的标准SQL语法,相比直接操作mysql.user表的方式,该语法更符合SQL规范,也能自动适配密码加密规则,避免手动操作带来的加密错误问题。

SET PASSWORD语法基本格式
mysql 5.7中SET PASSWORD语法有两种常用格式,分别对应修改当前登录用户密码和修改指定用户密码的场景:
- 修改当前登录用户密码:
SET PASSWORD = PASSWORD('新密码'); - 修改指定用户密码:
SET PASSWORD FOR '用户名'@'主机名' = PASSWORD('新密码');
需要注意,mysql 5.7中PASSWORD()函数是内置的密码加密函数,会自动按照当前系统的密码加密规则处理输入的明文密码,不需要用户手动指定加密方式。
具体操作示例
场景1:修改当前登录用户密码
如果当前已经登录到mysql数据库,需要修改当前使用的账户密码,可以执行以下SQL:
-- 假设当前登录用户是test_user@localhost,修改其密码为NewPass123
SET PASSWORD = PASSWORD('NewPass123');
-- 执行后刷新权限使修改生效
FLUSH PRIVILEGES;
场景2:修改指定用户密码
如果需要修改其他用户的密码,需要有mysql的user表UPDATE权限或者全局CREATE USER权限,执行以下SQL:
-- 修改test_user@localhost的密码为NewPass456
SET PASSWORD FOR 'test_user'@'localhost' = PASSWORD('NewPass456');
-- 刷新权限
FLUSH PRIVILEGES;
场景3:修改允许远程登录的用户密码
对于允许从任意主机登录的用户,主机名部分使用%,示例如下:
-- 修改test_user@%的密码为RemotePass789
SET PASSWORD FOR 'test_user'@'%' = PASSWORD('RemotePass789');
FLUSH PRIVILEGES;
常见错误及解决方法
| 错误提示 | 错误原因 | 解决方法 |
|---|---|---|
| ERROR 1044 (42000): Access denied for user | 当前用户没有修改目标用户密码的权限 | 使用root账户或者有对应权限的账户执行操作,或者给当前用户授予UPDATE权限到mysql.user表 |
| ERROR 1396 (HY000): Operation SET PASSWORD failed | 指定的用户不存在 | 先查询mysql.user表确认用户是否存在,执行SELECT user,host FROM mysql.user;查看所有用户 |
| ERROR 1819 (HY000): Your password does not satisfy the current policy requirements | 新密码不符合mysql 5.7的密码策略要求 | 调整密码复杂度,或者修改密码策略参数,比如降低validate_password_policy的值 |
注意事项
首先,执行SET PASSWORD语句后,建议执行FLUSH PRIVILEGES;语句刷新权限,虽然部分场景下修改会立即生效,但刷新权限可以保证所有连接都能识别新的密码。
其次,mysql 5.7默认启用了密码策略插件,密码长度至少需要8位,且包含大小写字母、数字和特殊字符,如果设置的密码过于简单会触发错误,需要根据实际需求调整密码策略或者设置符合要求的密码。
最后,修改密码后,需要通知使用该账户的应用程序更新连接配置,否则会出现连接失败的问题,如果是生产环境操作,建议提前做好配置更新的准备,避免影响业务正常运行。
mysql_5.7SET_PASSWORD修改用户密码SQL模式修改时间:2026-07-16 19:54:24