![Utilice unix_socket en mysql con un host que no sea localhost](https://rvso.com/image/1609693/Utilice%20unix_socket%20en%20mysql%20con%20un%20host%20que%20no%20sea%20localhost.png)
Para replicar algún comportamiento de script en una caja de prueba, necesito autenticar mysql con root a través de un socket Unix.
Funciona bien con sudo mysql, pero cuando hago sudo mysql -h testhost obtengo:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
He añadido testhost a mi archivo de hosts.
127.0.0.1 localhost testhost
También he actualizado las subvenciones de 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
Y
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED VIA unix_socket USING '*59D9CEFB549F231CFA8634AC47153FD4F3CCC29F'
Respuesta1
Los "sockets Unix" no son sockets TCP/IP. Ellos sonsiemprelimitado únicamente al sistema actual: no es posible conectarse a la toma de otro sistema a través de la red.
Por eso, el nombre de host localhost
es especial en MySQL y el cliente en realidad no intenta buscar su dirección IP.en absoluto. Y cuando te conectas a él, no te estás conectando a 127.0.0.1 ni a ::1; en realidad, te estás conectando a /var/run/mysqld/mysqld.sock
una ruta similar.
Si desea imitar una conexión de red, ejecute mysql -h 127.0.0.1
o mysql -h ::1
.
Conexiones de red (TCP/IP)no puedouse IDENTIFIED VIA unix_socket
, porque no transfieren el UID del cliente (especialmente no de ninguna manera sensible a la seguridad). Deben utilizar contraseñas, certificados X.509 o GSSAPI.