localhost가 아닌 호스트와 함께 mysql에서 unix_socket을 사용하십시오.

localhost가 아닌 호스트와 함께 mysql에서 unix_socket을 사용하십시오.

테스트 상자에서 일부 스크립트 동작을 복제하려면 유닉스 소켓을 통해 루트로 mysql을 인증해야 합니다.

sudo mysql에서는 잘 작동하지만 sudo mysql -h testhost를 수행하면 다음과 같은 결과가 나타납니다.

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

내 호스트 파일에 testhost를 추가했습니다.

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

"유닉스 소켓"은 TCP/IP 소켓이 아닙니다. 그들은언제나현재 시스템에만 제한됩니다. 네트워크를 통해 다른 시스템의 소켓에 연결할 수 없습니다.

그 때문에 호스트 이름은 localhostMySQL에서 특별하고 클라이언트는 실제로 IP 주소를 조회하려고 시도하지 않습니다.조금도. 그리고 여기에 연결하면 127.0.0.1이나 ::1에 연결되지 않습니다. 실제로는 /var/run/mysqld/mysqld.sock또는 유사한 경로에 연결되는 것입니다.

네트워크 연결을 모방하려면 mysql -h 127.0.0.1또는 를 실행하십시오 mysql -h ::1.

네트워크(TCP/IP) 연결할 수 없다를 사용하십시오 IDENTIFIED VIA unix_socket. 왜냐하면 클라이언트의 UID를 전송하지 않기 때문입니다(특히 보안에 민감한 방식이 아닌 경우). 비밀번호, X.509 인증서 또는 GSSAPI를 사용해야 합니다.

관련 정보