目 录CONTENT

文章目录

Navicat 使用SSH隧道连接MySQL报错 :1698 Access denied for user `root`@`localhost`

过客
2026-02-12 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

在Ubuntu中apt安装了MySQL,手动创建了 'root'@'localhost' 并设置了密码。

CREATE USER 'root'@'localhost' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'; 
FLUSH PRIVILEGES;

然后 Navicat 使用SSH隧道连接MySQL报错 :1698 Access denied for user root@localhost

分析

查了资料发现这是 MySQL 8.0+ 在 Ubuntu(特别是 22.04/24.04) 系统中非常典型的认证问题。

  • 默认安装的 mysql-server 会配置 root@localhost 使用 auth_socket 插件(也叫 unix_socket),而不是密码认证。

  • 执行:

    CREATE USER 'root'@'localhost' IDENTIFIED BY '密码';
    

    实际上 ​并没有覆盖原有的 ​root@localhost ​用户​,而是可能创建了一个“重复”条目(但 MySQL 不允许同名用户不同插件共存),或者操作未生效。

    • 更重要的是:​Navicat 通过 SSH 隧道连接时,虽然目标是 ​127.0.0.1,但 MySQL 可能仍将其视为 ​localhost ​连接(走 socket),而你的客户端(Navicat)只能提供密码,无法提供 socket 认证所需的系统凭证​,导致认证失败。

解决步骤

  • 用SSH链接上Ubuntu,用 sudo mysql 免密登录

  • 查看当前 root 用户的认证方式

    SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';
    

    会看到root@localhost为 auth_socket

  • root@localhost 的认证方式改为 mysql_native_password(兼容 Navicat)
-- 修改认证插件并设置密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';

-- 刷新权限
FLUSH PRIVILEGES;
  • 再次查看认证方式是否改为mysql_native_password

  • 退出MySQL(之后本地也无法使用sudo mysql免密登录了),再用Navicat 登录应该成功了。
0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区