在 Mysql 8.0 中如果按照之前的方式创建用户,在远程连接时会报如下错误:
Last_IO_Error: Error connecting to source ‘dave@192.168.1.1:3308’. This was attempt 4/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.
这里会提示认证插件失败(Authentication plugin)。Authentication plugin是一种软件模块,它实现了一套特定的认证机制,用于验证用户提交的身份信息(如用户名和密码)是否有效。
在 mysql 8.0 中,默认的认证插件是caching_sha2_password,而之前版本是mysql_native_password。
官网的说明链接如下:
https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html
https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
基于安全和性能考虑,mysql 8.0 默认选择了更安全和更好性能的caching_sha2_password插件,default_authentication_plugin变量的默认值从mysql_native_password改成了caching_sha2_password。 在创建用户时如果没有显示指定认证插件,默认就是使用caching_sha2_password。
mysql> select user,host,plugin,authentication_string from mysql.user;
+------------------+-----------+-----------------------+------------------------------------------------------------------------+
| user | host | plugin | authentication_string |
+------------------+-----------+-----------------------+------------------------------------------------------------------------+
| dba | % | caching_sha2_password | $A$005${Hl8:+-b8h.5|(Vu6egMiBGOpltpZzexotg2x6xylK32mdARk8NaDgBv9j.6 |
| repl | % | mysql_native_password | *1E6A16D27xxxxxx8DEFE0BE40A07792A |
| mysql.infoschema | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys | localhost | caching_sha2_password | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
O2QaDv:?)b,hG``ZrEducc9Sic.BzJUDjNfrOhqAeYl1rNhhdeE0RTh5jt7 |05$HyC
+------------------+-----------+-----------------------+------------------------------------------------------------------------+
11 rows in set (0.00 sec)
如果使用caching_sha2_password的方式,那么客户端的连接方式也需要对应的修改,具体操作方式查看之前的官网链接。
有两种方法恢复成之前版本的认证插件。
- 1.修改数据库参数默认值:
注意这种方式需要重启数据库,也只对新用户生效,对于已经存在的用户,需要先 drop user,在重新创建。[mysqld] default_authentication_plugin=mysql_native_password
- 2.创建用户时指定认证插件为:mysql_native_password
mysql> ALTER USER 'dave'@'%' IDENTIFIED WITH mysql_native_password BY 'www.cndba.cn'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)
版权声明:本文为博主原创文章,未经博主允许不得转载。