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

 

问题:

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

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

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

开始:

    本来我觉得是少加了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中字段也发生了改变:ide

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.spa

  在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服务器了