导读:MySQL8.0采用了新的SHA-2插件加密方式,导致很多第三方可视化软件和编程语言接口连接错误,解决这个问题只需要还原native方式,对于编程语言还需要修改配置文件my.cnf或my.ini。
图形化管理工具Navicat连接提示: 验证插件[caching_sha2_password]不能被加载
编程语言PHP7连接提示 :客户端不知道服务器要求的验证方法[caching_sha2_password]
①根本原因
我们看看数据用户表user
注意到第4行数据 host='%' AND user ='root',认证方式(plugin)就是caching_sha2_password,远程连接匹配这一行生效。字段authentication_string 存放的是加密后的字符串。
注意:直接Update修改plugin需要同时修改加密字符串(这里不建议这样做)。
远程连接:主机名为任意非localhost的连接,通配符%
本地连接:主机名为localhost或127.0.0.1的连接
②解决办法
方案一:修改认证方式
修改认证方式为mysql_native_password并设置密码为12345678。可能用到的SQL语句:
方案二:新建用户
到这里Navicat就能连接成功了。其他第三方图形管理工具也可以。
然鹅编程语言PHP还是上面的错误,这说明PHP7和Navicat连接方式不一样。
或者说编程语言(不知道Java、Python有待确认)和第三方可视化软件连接MySQL的方式不一样。接着用一个并不存在的用户名userNative111测试连接,也是同样的错误提示缺少sha2,这说明编程语调用时还是caching_sha2_password验证方式。
目前,让PHP连接MySQL8除了账号还要修改配置文件
Linux/windows都是在配置文件中新增
③修改配置文件
Linux系统:
修改MySQL配置文件,位于/etc/my.cnf。完成后重启MySQL服务
Windows系统:
打开MySQL配置文件my.ini(若不存在自己建立),增加一行
测试成功
④总结
MySQL8修改权限立即生效,不需要FLUSH PRIVILEGES(网上还在误传)
当host='localhost',因为具体指明了主机名优先级高于通配符%需要留意组合