為什麼我無法通過 SSH 隧道使用 Navicat 連接到 MariaDB?
我一直在 Windows 上使用 Navicat 來管理我的 MySQL/Percona 實例。
幾天前我買了一台新伺服器並安裝了 MariaDB 10.3.9。
當我在一個膩子會話中 SSHd 進入盒子時,我可以很好地連接到它。
mysql -u root -p
完美地提出來。但出於某種原因,Navicat 拋出錯誤
access denied for user 'root'@'::1' (using password: YES)
Navicat 的設置和我之前一直使用的一樣:
主機名:localhost 埠:3306 Mysql 使用者名:root Mysql 密碼:
$$ root’s mysql password $$ 使用 SSH 隧道:是 IP 地址:
$$ my server’s ip $$ SSH 使用者名:$$ my name $$ SSH 密碼:$$ my ssh password $$ 我不確定為什麼當我手動執行它時它會在 SSH 上工作,但當 Navicat 執行它時卻不是,即使它可能在很大程度上做同樣的事情。這是什麼意思
'::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)
只有在使用 UNIX 套接字進行連接時,才會使用
root
帶有 host的使用者。localhost
其他使用者分別通過 TCP 套接字、IPv4 或 IPv6 連接時使用。當你使用 Navicat 進行 ssh 埠轉發時,會使用 TCP 套接字,特別是 IPv6 TCP 套接字(因為 IPv6 優於 IPv4)。因此,該使用者是被驗證的使用者。
我們大多數人通過確保所有三行的密碼設置相同來處理這個問題。