修改密码的错误方式

以下几种修改密码的方式在mysql8.0中均为错误方式:

  • set password for ‘user’@’host’ = password(‘newpassword’);
  • update mysql.user set password = password(‘newpassword’) where user = ‘xxxx’ and host = ‘xxxx’;
  • update mysql.user set authentication_string = password(‘newpassword’) where user = ‘xxxx’ and host = ‘xxxx’;
  • update mysql.user set authentication_string = ‘newpassword’ where user = ‘xxxx’ and host = ‘xxxx’;

错误的原因在于mysql8.0版本中已经不存在password函数,并且权限表中密码的存储字段已经由password更改为authentication_string,此外,authentication_string必须为加密后的字符串。

因此,上面列出的几种修改密码的错误方式中,最严重也是最惨的就是第四种。第四种方式并不会报错,但由于authentication_string必须为加密后的字符串,因此使用第四种方式修改密码后新密码被认为是加密后的密码字符串,所以不能直接使用新密码进行登录。

如果你使用了第四种修改密码的方式,那么也不要慌,还可以抢救一下,具体请参考本文最后一节的处理方式。

修改密码的正确姿势

在mysql8.0版本中,正确修改密码的方式如下:

alter user 'user'@'host' identified by 'newpassword';

忘记密码或密码无法登录时的处理

1、找到MySQL的配置文件,Windows系统的配置文件位于:MySQL的安装路径\my.ini,Linux系统的配置文件位于:/etc/my.cnf

2、打开配置文件,在[mysqld]下添加一行命令:skip-grant-tables,其它配置不要修改,然后保存退出

3、重启MySQL服务

Windows系统可以关闭MySQL服务后再启动,达到重启的效果:
net stop mysql
net start mysql

Linux系统可以直接使用以下命令重启:
systemctl restart mysqld

4、使用root用户,无密码登录MySQL

mysql -uroot

5、清空权限表中的错误密码,以root用户为例

update mysql.user set authentication_string='' where user='root';
flush privileges;

6、退出MySQL登录,然后打开配置文件,把[mysqld]下的:skip-grant-tables 命令删除或添加#号注释掉,然后保存退出

7、重启MySQL服务

8、使用root用户登录MySQL,提示输入密码时直接回车即可

mysql -uroot -p

9、设置新密码

alter user 'root'@'localhost' identified by 'newpassword';

10、退出MySQL登录,然后以新密码重新登录MySQL

11、若能成功登录,则代表密码重置成功