Verwenden Sie unix_socket in MySQL mit einem anderen Host als localhost

Verwenden Sie unix_socket in MySQL mit einem anderen Host als localhost

Um einige Skriptverhalten auf einer Testbox zu replizieren, muss ich MySQL über einen Unix-Socket als Root authentifizieren.

Mit sudo mysql funktioniert es einwandfrei, aber wenn ich sudo mysql -h testhost eingebe, erhalte ich:

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

Ich habe Testhost zu meiner Hosts-Datei hinzugefügt

127.0.0.1 localhost testhost

Ich habe auch MySQL-Zuschüsse aktualisiert

    | 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

Und

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

Antwort1

"Unix-Sockets" sind keine TCP/IP-Sockets. Sie sindstetsnur auf das aktuelle System beschränkt – es ist nicht möglich, über das Netzwerk eine Verbindung zum Socket eines anderen Systems herzustellen.

Aus diesem Grund localhostist der Hostname in MySQL etwas Besonderes und der Client versucht nicht, seine IP-Adresse nachzuschlagenüberhaupt. Und wenn Sie sich damit verbinden, verbinden Sie sich weder mit 127.0.0.1 noch mit ::1 – Sie verbinden sich tatsächlich mit /var/run/mysqld/mysqld.sockoder einem ähnlichen Pfad.

Wenn Sie eine Netzwerkverbindung imitieren möchten, führen Sie mysql -h 127.0.0.1oder aus mysql -h ::1.

Netzwerkverbindungen (TCP/IP)kann nichtverwenden IDENTIFIED VIA unix_socket, da sie die UID des Clients nicht übertragen (insbesondere nicht auf sicherheitsrelevante Weise). Sie müssen Passwörter, X.509-Zertifikate oder GSSAPI verwenden.

verwandte Informationen