![ローカルホスト以外のホストでMySQLのunix_socketを使用する](https://rvso.com/image/1609693/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88%E4%BB%A5%E5%A4%96%E3%81%AE%E3%83%9B%E3%82%B9%E3%83%88%E3%81%A7MySQL%E3%81%AEunix_socket%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B.png)
テスト ボックスでスクリプトの動作を複製するには、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ソケットではありません。いつも現在のシステムのみに制限されており、ネットワーク経由で別のシステムのソケットに接続することはできません。
そのため、ホスト名はlocalhost
MySQLでは特別なものであり、クライアントは実際に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 を使用する必要があります。