これは非常に簡単なはずですが、どうしてもうまくいきません。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: 接続検証」も参照してください。