最新消息: 新版网站上线了!!!

操mysql提示:You must reset your password using ALTER USER statement before executing this statement.

一、
安装mysql版本5.7.22
Linux客户端成功连接登录mysql之后,发现进行任何操作都提示ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
 二、实际操作展示
 mysql> use mysql;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> update mysql.user set authentication_string=password('123456') where user='root' and Host = 'localhost';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> update mysql.user set authentication_string=password('shm123456') where user='root' and Host = 'localhost';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
 
三、解决办法
解决方式如下:
MySQL版本5.7.6版本以前用户可以使用如下命令:
mysql> SET PASSWORD = PASSWORD('123456'); 
MySQL版本5.7.6版本开始的用户可以使用如下命令:
mysql> ALTER USER USER() IDENTIFIED BY '123456';
如果不清楚自己是什么版本,可以将两条都尝试一下。
对于出现此种情况,感兴趣的同学可以接着往下看,
原因分析:
MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户的过期时间。这个特性已经添加到mysql.user数据表,但是它的默认值是”N”,可以使用ALTER USER语句来修改这个值。
输入以下命令,将账号密码强制到期:
mysql> ALTER USER 'xiaoming'@'localhost' PASSWORD EXPIRE;
此时,用户可以登录到MYSQL服务器,但是在用户为设置新密码之前,不能运行任何命令,就会得到上图的报错,修改密码即可正常运行账户权限内的所有命令。由于此版本密码过期天数无法通过命令来实现,所以DBA可以通过cron定时器任务来设置MySQL用户的密码过期时间。
 
MySQL 5.7.4版开始,用户的密码过期时间这个特性得以改进,可以通过一个全局变量default_password_lifetime来设置密码过期的策略,此全局变量可以设置一个全局的自动密码过期策略。可以在MySQL的my.cnf配置文件中设置一个默认值,这会使得所有MySQL用户的密码过期时间都为120天,MySQL会从启动时开始计算时间。my.cnf配置如下:
 
[mysqld]
default_password_lifetime=120
如果要设置密码永不过期,my.cnf配置如下:
 
[mysqld]
default_password_lifetime=0
如果要为每个具体的用户账户设置单独的特定值,可以使用以下命令完成(注意:此命令会覆盖全局策略),单位是“天”,命令如下:
 
ALTER USER ‘xiaoming’@‘localhost' PASSWORD EXPIRE INTERVAL 250 DAY;
如果让用户恢复默认策略,命令如下:
 
ALTER USER 'xiaoming'@'localhost' PASSWORD EXPIRE DEFAULT;
个别使用者为了后期麻烦,会将密码过期功能禁用,命令如下:
 
ALTER USER 'testuser'@'localhost' PASSWORD EXPIRE NEVER;
 
四、实际操作演示
 
#登录之后首先执行此语句
mysql> ALTER USER USER() IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.13 sec)
 
#现在执行use mysql;发现不在You must reset your password using ALTER USER statement before executing this statement.报错,直接执行通过
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
 
Database changed
mysql> 
 
.....

转载请注明:谷谷点程序 » 操mysql提示:You must reset your password using ALTER USER statement before executing this statement.