MySQL5.7.9版本后废除了Password字段和Password()函数+MySQL登录不了如何修改登录密码?

 

问题:

    最新版的MySQL,我原来root密码是0916,然后执行了

update mysql.user set authentication_string='root123' where user='root' and host='localhost';

    这样一段代码,刷新之后新密码老密码都不能用了,这是个啥情况?

开始:

    原本我以为是少加了password,没加密造成的,后来发现,如果加上:

update mysql.user set authentication_string=Password('root123') where user='root' and host='localhost';

    在最新的MySQL8.0版本却不能修改成功了。

然后:

   先不管密码的问题了,先搞明白怎么回事,于是去mysql官网看到mysql版本8.0已经取消了password字段和password()函数,而且不在支持SET PASSWORD ... =PASSWORD('auth_string')语法:

接着:

   我发现了update语句针对的是MySQL5.7之前的操作,而且在5.6和5.7中字段也发生了改变:

5.7之前修改密码:(使用update修改user表)

update mysql.user set authentication_string=password('123456') where host='localhost' and user='root';

5.7修改密码:(因为废除了password字段,需要使用authentication_string)

update mysql.user set password=password('123456') where host='localhost' and user='root';

而在8.0已经不能用possword函数和set...语句,只能用:

alter user 'root'@'localhost' identified with mysql_native_password by '123456';
##如遇报错,先执行flush privileges

原因:

  在mysql5.7.9版本之后废弃了password字段和password()函数,并且加密方式默认不是使用mysql_native_password.

  在mysql8.0以上版本中caching_sha2_password和sha256_password认证插件比mysql_native_password插件提供的密码加密更安全,并且前者加密性能更好。由于caching_sha2_password这样优秀的安全和性能特征,让他作为mysql8.0的默认首选认证插件,而并不是mysql_native_password.

   所以mysql8.0默认是caching_sha2_password加密,5.7.9版本后的默认是mysql_native_password.

最后:

   说一下mysql不登入修改密码:

1:在命令行输入net stop mysql命令关闭mysql服务

2:使用--skip-grant-tables选项启动mysql服务(服务器将不加载权限判断,任何用户 都能访问数据库)

              在命令行输入 mysqld --skip-grant-tables

              命令运行之后,用户无法再输入指令,此时如果在任务管理器中可以看到名称为 mysqld的进程,则表示可以用root用户                登录服务器了

3:打开另一个命令行窗口,输入不加密码的登录命令

              mysql -u root

              登录成功后可以使用update语句修改密码

              修改完成后,必须使用flush privileges语句刷新权限表,这样新的密码才能生效

4:将输入mysqld --skip-grant-tables命令的命令行窗口关闭,接下来就可以使用新密码登录mysql服务器了
 

猜你喜欢

转载自blog.csdn.net/qq_24654501/article/details/106101633