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

Cod*_*key 3 mysql ssh ssh-tunnel

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

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

当我在 putty 会话中通过 SSH 连接到盒子时,我可以很好地连接到它。 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'关于什么的,这是否指出了问题?

谢谢!

Mic*_*ton 5

实际上,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)
Run Code Online (Sandbox Code Playgroud)

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

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

我们大多数人通过确保所有三行的密码设置相同来处理此问题。