ローカルホスト以外のホストでMySQLのunix_socketを使用する

ローカルホスト以外のホストでMySQLのunix_socketを使用する

テスト ボックスでスクリプトの動作を複製するには、UNIX ソケット経由で root で 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

「Unixソケット」はTCP/IPソケットではありません。いつも現在のシステムのみに制限されており、ネットワーク経由で別のシステムのソケットに接続することはできません。

そのため、ホスト名はlocalhostMySQLでは特別なものであり、クライアントは実際にIPアドレスを検索しようとはしません。まったく/var/run/mysqld/mysqld.sockそして、これに接続すると、127.0.0.1 や ::1 に接続するのではなく、実際には または同様のパスに接続します。

ネットワーク接続を模倣したい場合は、mysql -h 127.0.0.1または を実行しますmysql -h ::1

ネットワーク (TCP/IP) 接続できないを使用しますIDENTIFIED VIA unix_socket。クライアントの UID を転送しないためです (特にセキュリティ上重要な方法では転送しません)。パスワード、X.509 証明書、または GSSAPI を使用する必要があります。

関連情報