我一直在 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 中的 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
具有主機的使用者。localhost
當透過 TCP 套接字、分別透過 IPv4 或 IPv6 連線時使用其他使用者。
當您使用 Navicat 進行 ssh 連接埠轉送時,將使用 TCP 套接字,特別是 IPv6 TCP 套接字(因為 IPv6 優於 IPv4)。因此該用戶就是進行身份驗證的用戶。
我們大多數人透過確保所有三行的密碼設定相同來處理此問題。