SSH トンネル経由で Navicat を使用して MariaDB に接続できないのはなぜですか?

SSH トンネル経由で Navicat を使用して MariaDB に接続できないのはなぜですか?

私はいつも 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'、それが問題を示していますか?

ありがとう!

答え1

実は三つMySQL のルート ユーザーが微妙に異なります。(これは本当に面倒ですが、ずっとこの状態が続いており、おそらく今後も変わらないでしょう...)

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ホストを持つユーザーは、localhostUNIX ソケットを使用して接続する場合にのみ使用されます。その他のユーザーは、それぞれ IPv4 または IPv6 を介して TCP ソケット経由で接続するときに使用されます。

Navicat で SSH ポート転送を行う場合、TCP ソケット、具体的には IPv6 TCP ソケットが使用されます (IPv6 は IPv4 よりも優先されるため)。そのため、そのユーザーが認証対象となります。

私たちのほとんどは、3 行すべてでパスワードが同じに設定されていることを確認することで、この問題に対処します。

関連情報