在 mysql 中使用 unix_socket 與 localhost 以外的主機

在 mysql 中使用 unix_socket 與 localhost 以外的主機

為了在測試盒上複製一些腳本行為,我需要透過 unix 套接字使用 root 對 mysql 進行身份驗證。

它與 sudo mysql 一起工作正常,但是當我執行 sudo mysql -h testhost 時,我得到:

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

我已將 testhost 新增到我的主機檔案中

127.0.0.1 localhost testhost

我還更新了 mysql grants

    | GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket USING '*59D9CEFB549F231CFA8634AC47153FD4F3CCC29F' WITH GRANT OPTION |
| GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED VIA unix_socket USING '*59D9CEFB549F231CFA8634AC47153FD4F3CCC29F'

答案1

「Unix 套接字」不是 TCP/IP 套接字。他們是總是僅限於目前系統 – 無法透過網路連接到另一個系統的套接字。

因此,主機名稱localhost在 MySQL 中是特殊的,客戶端實際上不會嘗試尋找其 IP 位址根本不。當您連接到它時,您不是連接到 127.0.0.1 也不是 ::1 – 您實際上連接到/var/run/mysqld/mysqld.sock或一些類似的路徑。

如果您想模擬網路連接,請運行mysql -h 127.0.0.1mysql -h ::1

網路 (TCP/IP) 連接不能使用IDENTIFIED VIA unix_socket,因為它們不傳輸客戶端的 UID(尤其是不以任何安全敏感的方式)。他們必須使用密碼、X.509 憑證或 GSSAPI。

相關內容