![Verwenden Sie unix_socket in MySQL mit einem anderen Host als localhost](https://rvso.com/image/1609693/Verwenden%20Sie%20unix_socket%20in%20MySQL%20mit%20einem%20anderen%20Host%20als%20localhost.png)
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 localhost
ist 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.sock
oder einem ähnlichen Pfad.
Wenn Sie eine Netzwerkverbindung imitieren möchten, führen Sie mysql -h 127.0.0.1
oder 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.