为什么我无法通过 SSH 隧道使用 Navicat 连接到 MariaDB?

为什么我无法通过 SSH 隧道使用 Navicat 连接到 MariaDB?

我一直在 Windows 上使用 Navicat 来管理我的 MySQL/Percona 实例。

前几天我买了一台新服务器,并安装了MariaDB 10.3.9。

当我在 Putty 会话中通过 SSHd 进入盒子时,我可以很好地连接到它。 mysql -u root -p完美地启动它。

但出于某种原因,Navicat 抛出了错误access denied for user 'root'@'::1' (using password: YES)

Navicat 设置与我以前一直使用的相同:

主机名:localhost 端口:3306 Mysql 用户名:root Mysql 密码:[root 的 mysql 密码]

使用 SSH 隧道:是 IP 地址:[我的服务器的 ip] SSH 用户名:[我的名字] SSH 密码:[我的 ssh 密码]

我不确定为什么当我手动执行此操作时,它可以通过 SSH 工作,但当 Navicat 执行此操作时却不行,尽管它大概在做同样的事情。这是什么意思'::1',这是否指出了问题?

谢谢!

答案1

其实有MySQL 中 root 用户有细微的不同。(这确实很麻烦,但这种情况一直存在,可能不会改变……)

MariaDB [(none)]> select Host, User from mysql.user where User = 'root';
+-----------+------+
| Host      | User |
+-----------+------+
| 127.0.0.1 | root |
| ::1       | root |
| localhost | root |
+-----------+------+
3 rows in set (0.06 sec)

root仅当使用 UNIX 套接字连接时才使用具有主机的用户localhost。其他用户分别在通过 TCP 套接字、IPv4 或 IPv6 连接时使用。

当您使用 Navicat 进行 ssh 端口转发时,将使用 TCP 套接字,特别是 IPv6 TCP 套接字(因为 IPv6 优于 IPv4)。因此该用户是被认证的对象。

我们大多数人解决这个问题的方法是确保三行密码设置相同。

相关内容