1. ホーム
  2. mysql

[解決済み] ホスト 'xxx.xx.xxx.xxx' はこのMySQLサーバーへの接続を許可されていません。

2022-03-13 05:52:35

質問

簡単なことなのですが、私は できない どうしてもうまくいきません。
MySQLサーバーにリモートで接続しようとしているところです。

  • として接続します。
    mysql -u root -h localhost -p  

  • は正常に動作しますが、試してみてください。
    mysql -u root -h 'any ip address here' -p

  • はエラーで失敗します。
    ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server

mysql.user テーブルには、ホスト 'localhost' を持つユーザ 'root' のエントリと、ホスト '%' を持つ別のエントリがまったく同じように存在します。

どうしたらいいのかわからず、途方に暮れています。 どんなアイデアでも歓迎します。

どのように解決するのですか?

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

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;

パスカルや他の人が指摘しているように、この種のアクセス権を持つユーザーをどのIPにも開放するのは良い考えとは言えません。もし管理ユーザが必要なら、rootを使い、それをlocalhostに置いてください。それ以外の場合は、必要な権限を正確に指定し、Pascalが提案するように、ユーザのアクセス権を制限してください。

編集する

MySQL FAQより。

が表示される原因がわからない場合 アクセス拒否された場合、ユーザー テーブルのすべてのエントリで、Host の値は、ワイルドカードを含む(エントリー または'_'文字を含むもの)。A 非常に一般的なエラーは、新しい のエントリは、Host='%'と User='some_user'だと思い込んでいます。 ローカルホストを指定することで は同じマシンから接続します。しかし これがうまくいかない理由は デフォルトの特権には のエントリは、Host='localhost' と User=''です。このエントリでは、ホスト の値である「localhost」よりも よりも具体的であるため、'%' が使用されます。 の場合、新しいエントリよりも優先されます。 ローカルホストからの接続 正しい 手順としては、2番目のエントリを挿入します。 で、Host='localhost' と User='some_user' とするか、あるいは のエントリは、Host='localhost' と User=''です。エントリーを削除した後 を発行することを忘れないでください。 ステートメントを使用して、グラントテーブルを再読み込みします。 また、項5.4.4, "アクセス 制御、ステージ1:接続 検証」を参照してください。