mysql 5.7密码报错 ERROR 1820 (HY000): You must reset your password using ALTER USER statement before ex

本文介绍MySQL数据库中因密码过于简单导致的登录后强制重置问题及解决方法。涉及如何通过设置全局参数来允许使用简单密码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果MySQL数据库用户的密码设置过于简单,数据库在用户登录后会提示重置密码,并且不接受简单的密码。
提示需要重置密码:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
Mysql数据库版本:5.7.1
操作系统:CentOS 7
这个问题是否奇怪,因为明明是刚刚用密码登录了mysql服务器。怎么要重置密码呢?因为密码太简单了,不符合MySQL的安全要求。
参考官方的文档,见http://dev.mysql.com/doc/refman/5.6/en/alter-user.html。重置用户密码操作:
mysql> SET PASSWORD = PASSWORD('123456');   //123456 是重置的新密码
以上操作后又遇到新问题:
ERROR 1819 (HY000): Your password does NOT satisfy the CURRENT policy requirements。
又参考了官方文档,见http://dev.mysql.com/doc/refman/5.7/en/validate-password-plugin.html。
应该是密码过于简单了。 后来用大写字母+数字+特殊字符混合了一个密码。重置密码成功!
以后操作,没有再出现上述问题。


注意:如果只想设置简单密码需要修改两个全局参数:
mysql>  set global validate_password_policy=0;
mysql>  set global validate_password_length=1;
<think>我们正在处理MySQL错误1820HY000)。根据引用资料,此错误发生在首次安装MySQL后或密码过期时,系统要求用户在执行任何其他语句前必须重置密码。 引用[1]显示错误信息,并指出需要在使用ALTER USER语句执行其他操作前重置密码。 引用[2]和[3]提供了两种解决方案: 1. 使用`ALTER USER`语句重置密码:`ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';` 2. 使用`SET PASSWORD`语句:`SET PASSWORD = PASSWORD('new_password');` 然后刷新权限:`FLUSH PRIVILEGES;` 但是,请注意,在MySQL 5.7.6及以上版本,推荐使用`ALTER USER`语句。而`SET PASSWORD`在较新版本中可能已被弃用(在MySQL 8.0中已被移除)。 因此,我们建议使用`ALTER USER`语句。同时,注意密码复杂度要求(通常要求包含大小写字母、数字和特殊字符,长度足够)。 步骤: 1. 登录到MySQL服务器(如果还未登录,可能需要先使用初始密码登录,然后立即修改密码)。 2. 执行ALTER USER语句修改密码。 但是,错误信息显示在执行任何命令前必须重置密码。因此,在登录后,你只能执行修改密码的语句。 具体操作: - 使用命令行登录(假设用户为root): mysql -u root -p 输入初始密码(如果刚安装,初始密码可能在日志文件中,或者为空,但通常安装过程中会生成一个临时密码)。 - 登录后,立即执行: ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; 注意:如果使用`mysql -u root -p`登录时出现错误1820,可能是因为你登录后没有立即修改密码。此时,由于错误1820,你无法执行任何命令,包括修改密码的命令。但根据引用[2]和[3],在出现错误1820的情况下,系统允许你执行修改密码的语句(因为这是系统强制要求你做的第一件事)。因此,在登录后,直接执行修改密码的语句即可。 如果以上方法不行,可能需要考虑使用安全模式(跳过权限表启动)来重置密码,但这通常需要管理员权限和停止MySQL服务。 但根据错误提示,通常直接执行修改密码的命令即可。 另外,引用[3]中使用了`set password`命令,但该命令在较新版本中可能不可用。因此,我们优先使用`ALTER USER`。 因此,解决方案如下: 步骤1:使用MySQL客户端登录 mysql -u root -p 输入当前密码(如果不知道初始密码,请查看安装日志或使用安全模式重置,但本问题中假设用户已经登录但被要求重置密码)。 步骤2:在MySQL提示符下,立即执行: ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 注意:将'new_password'替换为你的新密码,并且确保密码满足当前策略(通常需要包含大小写字母、数字和特殊字符,长度至少8位)。如果密码过于简单,可以修改密码策略,或者设置一个符合要求的密码。 步骤3:执行后,尝试执行其他命令(如`show databases;`)确认是否成功。 如果遇到密码策略问题,可以临时修改策略(在修改密码后,因为修改密码前不能执行其他命令,所以需要先修改密码,然后再修改策略): SET GLOBAL validate_password_policy=LOW; -- 如果策略要求高,可以降低要求 SET GLOBAL validate_password_length=4; -- 设置密码最小长度 但是,在修改密码前不能执行这些设置命令。因此,如果因为密码复杂度不够而修改失败,可以尝试设置一个更复杂的密码。 如果使用`ALTER USER`失败,可以尝试使用`SET PASSWORD`(适用于MySQL 5.7.6之前版本): SET PASSWORD = PASSWORD('new_password'); FLUSH PRIVILEGES; 但是,根据引用[3],这种方法在5.7.11版本中也可以使用。 总结:优先使用`ALTER USER`,如果不成功再尝试`SET PASSWORD`。 另外,如果用户是远程连接(如不是localhost),需要将'root'@'localhost'替换为对应的用户和主机,例如'root'@'%'。 最后,如果以上方法都不行,可能需要重启MySQL服务并跳过权限表(需要停止服务,然后使用--skip-grant-tables启动),然后更新密码。但这通常用于忘记密码的情况,而这里我们是在已知密码但需要重置的情况下。 因此,主要步骤是使用ALTER USER重置密码。 相关问题: 1. 如何修改MySQL密码策略? 2. 在忘记MySQL root密码的情况下,如何重置密码? 3. 如何查看MySQL密码过期策略?</think>### MySQL ERROR 1820 (HY000) 解决方案 当您遇到错误 `ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement` 时,表示 MySQL 要求您在执行任何操作前必须先重置密码。以下是详细解决步骤: --- #### **解决方法** 1. **立即重置密码**(登录 MySQL 后执行的第一条命令): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; ``` - 将 `'你的新密码'` 替换为符合密码策略的强密码(建议包含大小写字母、数字和特殊字符) - 此操作必须在执行其他任何 SQL 命令前完成[^2][^3]。 2. **刷新权限**(可选但推荐): ```sql FLUSH PRIVILEGES; ``` 3. **验证是否解决**: ```sql SHOW DATABASES; -- 正常显示数据库列表即表示成功 ``` --- #### **注意事项** - **密码策略要求**: - MySQL 5.7+ 默认启用密码复杂度检查,若新密码太简单可能报错。可通过临时降低策略解决: ```sql SET GLOBAL validate_password_policy=LOW; -- 降低策略要求 ALTER USER 'root'@'localhost' IDENTIFIED BY '简单密码'; -- 重置密码 ``` - **远程用户**: 若需远程访问(如 `root@%`),需同步修改: ```sql ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; ``` --- #### **触发原因** 1. **首次安装 MySQL**:新安装后首次登录强制要求重置密码[^1]。 2. **密码过期**:默认密码过期策略为 360 天(可通过 `default_password_lifetime` 配置)。 3. **安全策略**:企业版或高安全配置可能主动触发密码重置。 --- #### **预防措施** - **定期更新密码**: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; ``` - **禁用自动过期**(非生产环境): ```sql SET GLOBAL default_password_lifetime=0; -- 密码永不过期 ``` > ⚠️ 重要提示:生产环境请遵守密码安全策略,避免使用永不过期设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值