🥘 阅读完本文需要五分钟
🎳 MySQL知识补充
在MySQL的实际生产中,用户的密码认证插件主要使用下面两种:
-
❇️ mysql_native_password
-
❇️ caching_sha2_password
🎳 问题简述
在使用 pymysql 连接 MySQL 时可以正常访问(用户密码认证策略是caching_sha2_password)
但是通过连接 mysqlrouter
访问数据库示例时,报错如下:
{"IsSuccess":false,"ErrorMessage":"caching sha2: Unknown packet for public key: b'-'"}
🎳 解决方法一
此时你会怎么处理了,可能会把用户的密码认证策略改为 caching_sha2_password,但是虽然可以临时解决,但是不建议,原因后面会说明。
ALTER USER user1 identified with mysql_native_password by 'pass';
🎳 解决方法二
由于是pymysql
的 bug 导致,所以可以在创建连接时增加ssl
参数即可,至于verify_mode
的值无所谓,便于直观可以写为DISABLED
conn = pymysql.connect(
host='172.16.171.172',
port=8446,
user='u001',
password='123456Aa#',
db='information_schema',
ssl={'verify_mode': 'DISABLED'}
)
🎳 题外话
我们接着之前的话题,很多驱动在早期不支持 caching_sha2_password,所以很多生产中都会选择mysql_native_password
作为默认认证插件,那为什么我们不建议修改为mysql_native_password
呢?
主要有以下原因:
⚒️ caching_sha2_password 安全性更高; ⚒️ caching_sha2_password 性能高; ⚒️ MySQL在逐步废弃 mysql_native_password
,在MySQL 8.0.34
中已经开始出现废弃提示了。所以为了避免后期升级改密码策略等问题,建议提前采用caching_sha2_password
✏️ 本篇完,下次再见~
原文始发于微信公众号(小新数据库):pymysql 连接 mysqlrouter caching sha2 报错处理
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/207593.html