MySQLユーザーのホストはデータベースによってどのように評価されますか?サーバーはからデータベースに接続しようとしますmyhostname
が、そのサーバーのホスト名をで設定しても失敗します/etc/hostname
。IPを使用すると機能します。
ユーザーは次のように作成されました。
GRANT ALL ON db.* TO 'dude'@'myhostname';
MySQLユーザーのホストはデータベースによってどのように評価されますか?サーバーはからデータベースに接続しようとしますmyhostname
が、そのサーバーのホスト名をで設定しても失敗します/etc/hostname
。IPを使用すると機能します。
ユーザーは次のように作成されました。
GRANT ALL ON db.* TO 'dude'@'myhostname';
MySQLエラーは、サーバーマシンがユーザーの接続元と見なすホスト名を示します。DNS設定に応じて、これはクライアントが自分自身に割り当てられていると考えるホスト名である場合とそうでない場合があります。サーバーから見た名前は、GRANT
ステートメントで設定する必要がある名前です。
(これは論理的です。サーバーがホストAliceに特権を与えることを知っているとします。ホストBobがいます。これは私のホストなので、名前をAliceに変更できます。これを行うだけでAliceの特権が与えられれば、GRANT
スキーム全体が完全になります。安全ではありません!ホストはアリスだと思っていますが、サーバーは私のIPを見て、DNSに「これは誰ですか?」と尋ね、「彼はボブです」を受け取ります。アリスの特権を盗むことはできますが、DNSレコードを危険にさらす必要があります。何とかして)
ピンチで、クライアントIPとホスト名をサーバー/etc/hosts
ファイルに追加します。ただし、これはハックであり、適切なDNS設定を使用することをhosts
お勧めします。ハックを忘れると、数か月後に頭を悩ませるのに長い時間がかかる可能性があります。
MySQLマニュアルのDNSルックアップ最適化とホストキャッシュで説明されているように:
サーバーはスレッドセーフを使用してホスト名の解決を実行し
gethostbyaddr_r()
、gethostbyname_r()
オペレーティングシステムがホスト名をサポートしている場合は呼び出します。それ以外の場合、ルックアップを実行するスレッドはミューテックスをロックし、gethostbyaddr()
代わりに呼び出しgethostbyname()
ます。
したがって、接続するIPの解像度は、myhostname
MySQLではなくオペレーティングシステムの問題です。まず、OSがクライアントIPを正しく解決していることを確認し、解決していない場合は、OSまたはネームサービスの構成をデバッグする必要があります(この件に関する質問は、StackOverflowではなくスーパーユーザーまたはサーバー障害に向けた方がよい場合があります)。