前阶段团队小伙伴将MGR的版本从5.7升级到了8.0。在升级后,发现业务无法连接MySQL数据库的问题。
相信不少同学也遇到类似问题,有些可通过升级MySQL Connector驱动问题得以解决。然而,对于在线业务,升级MySQL Connector驱动是非常麻烦的事情。
这个问题的本质原因是:MySQL 8.0修改了默认的密码认证机制,将之前的mysql_native_password机制,升级到新的caching_sha2_password。
因此,若想业务平滑升级到MySQL 8.0的话,显示的配置参数default_authentication_plugin,将其设置为8.0版本之前的mysql_native_password。
# /etc/my.cnf
[mysqld]
default_authentication_plugin = mysql_native_password
这是一个很简单的问题,但是背后却有着深远的原因。因为MySQL 8.0在不断加固数据库的安全性,而密码认证机制其中重要的一环。
今天让姜老师带同学们回顾MySQL的密码认证机制发展史。
old_mysql_password
在MySQL 5.6版本前,MySQL的密码认证机制为old_mysql_password。
在表mysql.user中的列password保存有密码hash后的数值。但是由于使用的hash算法已被破解。非常不建议在线上的MySQL实例中使用old_mysql_password密码认证机制。
mysql_native_password
mysql_native_password是MySQL 5.6、5.7默认的密码认证机制。对比原来的old_mysql_password认证机制,当用户连接MySQL实例时,通过challenge-reponse的密码校验机制进行认证。
客户端连接MySQL实例时,首先需要从服务器端获得一个20字节的随机数。