macOS下不能通过Navicat访问MySQL服务 报(Authentication plugin 'caching_sha2_password' cannot be loaded)

环境

  1. 本地操作系统: macOS Catalina 10.15
  2. 本地MySQL 版本: 8.0.17
  3. 服务器: Debian 10 (buster)
  4. 服务器MySQL版本: 8.0.18

问题

服务器新安装MySQL8发现在命令行可以正常链接访问而在NavicatPremium12中无法连接报错如下图

查阅资料得知MySQL8的默认认证方式为caching_sha2_password而非之前的mysql_native_password
而Navicat12并不支持这项改动 所以如果想要使用Navicat管理数据库时需要将MySQL默认认证方式改为mysql_native_password


解决

  • 修改服务器MySQL默认认证方式 /etc/mysql/mysql.conf.d/mysqld.cnf

    在此文件的[mysqld]节点下加入
    default_authentication_plugin=mysql_native_password

  • 进入mysql创建root用户(没错是root)且授权 (小声BB: 以下命令需要在服务器本地操作 :(

    1
    2
    3
    4
    $ mysql -u root -p
    mysql> use mysql;
    mysql> CREATE USER 'root'@'%';
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

    可以看到创建用户后该用户的登录认证方式依旧是caching_sha2_password
    所以需要继续修改plugin

  • 修改用户的认证插件

    1
    2
    3
    4
    5
    6
    mysql> #修改密码#
    mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'yourpassword';
    mysql> #修改认证插件#
    mysql> ALTER USER 'root'@'%' IDENTIFED WITH mysql_native_password BY 'yourpassword';
    mysql> #刷新privileges#
    mysql> FLUSH PRIVILEGES;
  • 注意: 此时的密码在确认时MySQL会根据安装强密码设置来判断是否合格 如果不小心设置了强密码 可以根据如下命令修改规则与长度 当然这边还是强烈建议使用强密码

    mysql> #设置强密码等级为LOW#
    mysql> set global validate_password.policy=0;
    mysql> #设置强密码长度#
    mysql> set global validate_password.length=4;
    
  • 这时候可以看到刚创建的root用户的认证插件已经改好了 我们这时候再回到Navicat中测试就正常啦 \(^o^)/


END