在 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 添加到我的 hosts 文件中

127.0.0.1 localhost testhost

我还更新了 mysql 授权

    | 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。

相关内容