ホスト 'xxx.xx.xxx.xxx' はこの MySQL サーバーに接続できません 質問する

ホスト 'xxx.xx.xxx.xxx' はこの MySQL サーバーに接続できません 質問する

これは非常に簡単なはずですが、どうしてもうまくいきません。MySQLサーバー
にリモート接続しようとしているだけです。

  • 次のように接続します:

    mysql -u root -h localhost -p  
    
  • 正常に動作しますが、次のことを試してください:

    mysql -u root -h 'any ip address here' -p
    
  • 次のエラーで失敗します:

    エラー 1130 (00000): ホスト 'xxx.xx.xxx.xxx' はこの MySQL サーバーに接続できません

表にはmysql.user、ホスト「localhost」のユーザー「root」のエントリと、ホスト「%」のユーザー「root」のエントリがまったく同じです。

もう途方に暮れていて、どうしたらいいのか全く分かりません。どんなアイデアでも歓迎します。

ベストアンサー1

セキュリティ上の予防措置の可能性があります。新しい管理者アカウントを追加してみてください。

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

ただし、Pascal 氏や他のユーザーが指摘しているように、このようなアクセス権を持つユーザーを任意の IP に公開するのはあまり良い考えではありません。管理ユーザーが必要な場合は、root を使用し、localhost に残しておきます。その他のアクションについては、必要な権限を正確に指定し、Pascal 氏が以下で提案しているように、ユーザーのアクセスを制限します。

編集:

MySQL FAQ より:

アクセスが拒否される理由がわからない場合は、ワイルドカードを含む Host 値 ('%' または '_' 文字を含むエントリ) を持つすべてのエントリをユーザー テーブルから削除します。よくあるエラーは、Host='%' および User='some_user' の新しいエントリを挿入することです。これにより、同じマシンから接続するために localhost を指定できると考えます。これが機能しない理由は、デフォルトの権限に Host='localhost' および User='' のエントリが含まれているためです。そのエントリの Host 値は 'localhost' で、'%' よりも具体的なため、localhost から接続するときに新しいエントリよりも優先して使用されます。正しい手順は、Host='localhost' および User='some_user' の 2 番目のエントリを挿入するか、Host='localhost' および User='' のエントリを削除することです。エントリを削除した後は、FLUSH PRIVILEGES ステートメントを発行して、許可テーブルを再ロードすることを忘れないでください。セクション 5.4.4、「アクセス制御、ステージ 1: 接続検証」も参照してください。

おすすめ記事