![Use unix_socket no mysql com host diferente de localhost](https://rvso.com/image/1609693/Use%20unix_socket%20no%20mysql%20com%20host%20diferente%20de%20localhost.png)
Para replicar algum comportamento de script em uma caixa de teste, preciso autenticar o mysql com root via soquete unix.
Funciona bem com sudo mysql, mas quando faço sudo mysql -h testhost recebo:
ERROR 1698 (28000): Access denied for user 'root'@'localhost'
Eu adicionei testhost ao meu arquivo hosts
127.0.0.1 localhost testhost
Eu também atualizei as concessões do 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
E
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED VIA unix_socket USING '*59D9CEFB549F231CFA8634AC47153FD4F3CCC29F'
Responder1
"Soquetes Unix" não são soquetes TCP/IP. Eles sãosemprelimitado apenas ao sistema atual – não é possível conectar-se ao soquete de outro sistema pela rede.
Por causa disso, o nome do host localhost
é especial no MySQL e o cliente não tenta realmente procurar seu endereço IPde forma alguma. E quando você se conecta a ele, você não está se conectando a 127.0.0.1 nem ::1 – você está realmente se conectando a /var/run/mysqld/mysqld.sock
algum caminho semelhante.
Se você quiser imitar uma conexão de rede, execute mysql -h 127.0.0.1
ou mysql -h ::1
.
Conexões de rede (TCP/IP)não podeuse IDENTIFIED VIA unix_socket
, porque eles não transferem o UID do cliente (especialmente de qualquer forma sensível à segurança). Eles devem usar senhas, certificados X.509 ou GSSAPI.