782

これは非常に単純なはずですが、私はそれを私の人生のために機能させることはできません。
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」のエントリが、ホスト「%」を持つ別のエントリとまったく同じエントリがあります。

私は気が遠くなり、どうすればいいのかわかりません。どんなアイデアでも大歓迎です。

4

27 に答える 27

973

おそらくセキュリティ対策です。新しい管理者アカウントを追加してみてください:

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='%' および User='some_user' で新しいエントリを挿入することです。これにより、localhost を指定して同じマシンから接続できると考えます。これが機能しない理由は、デフォルトの権限に Host='localhost' および User='' のエントリが含まれているためです。そのエントリには、'%' よりも具体的なホスト値 'localhost' があるため、localhost から接続するときに、新しいエントリよりも優先して使用されます! 正しい手順は、Host='localhost' および User='some_user' で 2 番目のエントリを挿入することです。または、Host='localhost' および User='' のエントリを削除します。エントリを削除した後、必ず FLUSH PRIVILEGES ステートメントを発行して許可テーブルをリロードしてください。セクション5.4.4「アクセス制御、ステージ 1: 接続の検証」も参照してください。

于 2009-10-13T12:47:06.640 に答える
336

phpMyAdmin またはコマンド プロンプトを使用new MySQL Userして、以下のように権限を作成して割り当てる必要があります。Query prompt

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;

CREATE USER 'username'@'%' IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

4 つのクエリがすべて完了すると、次のように接続されます。username / password

于 2013-09-16T05:56:03.537 に答える
130

root を使用していたにもかかわらず、私のエラー メッセージは同様で、「ホスト XXX はこの MySQL サーバーへの接続を許可されていません」と述べていました。root に適切な権限があることを確認する方法は次のとおりです。

私のセットアップ

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

解決

  1. 「etc/mysql/my.cnf」の下のファイルを開きます
  2. 以下を確認します。

    • ポート (デフォルトでは、これは「ポート = 3306」です)
    • bind-address (デフォルトでは、これは「bind-address = 127.0.0.1」です。すべてに開きたい場合は、この行をコメントアウトしてください。私の例では、実際のサーバーは 10.1.1.7 にあるとします)
  3. 次に、実際のサーバー上の MySQL データベースにアクセスします (リモート アドレスが 123.123.123.123、ポート 3306 でユーザー「root」として、データベース「dataentry」の権限を変更したいとします。IP アドレス、ポート、およびデータベース名を変更することを忘れないでください)。あなたの設定に)

    mysql -u root -p
    Enter password: <enter password>
    mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password';
    mysql>FLUSH PRIVILEGES;
    mysql>exit
    
  4. sudo サービス mysqld 再起動

  5. これで、データベースにリモート接続できるようになります。たとえば、MySQL Workbench を使用して、「Hostname:10.1.1.7」、「Port:3306」、「Username:root」を入力しています。
于 2014-06-11T19:31:34.580 に答える
84

次の手順を実行するだけです。

1a) mysql に接続します (localhost 経由)

mysql -uroot -p

1b) mysql サーバーが Kubernetes (K8s) で実行されており、NodePort 経由でアクセスされている場合

kubectl exec -it [pod-name] -- /bin/bash
mysql -uroot -p
  1. ユーザーを作成

    CREATE USER 'user'@'%' IDENTIFIED BY 'password';

  2. アクセス許可を付与する

    GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' WITH GRANT OPTION;

  3. 特権のフラッシュ

    FLUSH PRIVILEGES;

于 2014-03-24T09:27:50.980 に答える
79

任意のホスト名からユーザーにアクセスを許可する必要があります。

これは、phpmyadmin から新しい権限を追加する方法です

権限に移動 > 新しいユーザーを追加

ここに画像の説明を入力

目的のユーザー名に任意のホストを選択します

ここに画像の説明を入力

于 2013-06-21T11:42:26.970 に答える
30

メッセージ*Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL serverは、MySQL サーバーから MySQL クライアントへの応答です。ホスト名ではなく IP アドレスが返されることに注意してください。

に接続しようとしてmysql -h<hostname> -u<somebody> -p、IP アドレスとともにこのメッセージが返された場合、MySQL サーバーはクライアントで逆ルックアップを実行できません。これは、MySQL クライアントを許可にマップする方法であるため、重要です。

nslookup <mysqlclient>MySQL サーバーから FROMを実行できることを確認してください。それが機能しない場合は、DNS サーバーにエントリがありません。または、MySQL サーバーの HOSTS ファイルにエントリを配置することもできます ( <ipaddress> <fullyqualifiedhostname> <hostname><- ここでの順序は重要な場合があります)。

MySQL クライアントの逆ルックアップを許可するサーバーのホスト ファイルのエントリにより、まさにこの問題が解決されました。

于 2012-03-13T13:37:26.997 に答える
28

簡単な方法:

Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD'; 

それから

FLUSH PRIVILEGES;

終わり!

于 2018-11-24T08:05:40.633 に答える
17

許可テーブルを手動で (INSERT、UPDATE などを使用して) 変更する場合は、FLUSH PRIVILEGESステートメントを実行してサーバーに許可テーブルをリロードするように指示する必要があります。

PS: すべてのホストがすべてのユーザーに接続できるようにすることはお勧めしませ(特に使用しないでrootください)。クライアント/サーバー アプリケーションに mysql を使用している場合は、サブネット アドレスを優先してください。Web サーバーまたはアプリケーション サーバーで mysql を使用している場合は、特定の IP を使用します。

于 2009-10-13T12:56:36.890 に答える
5

ここでの回答のほとんどは、2 つのホスト値 (1 つは 用localhost、もう1 つは 用) を持つユーザーを作成することを示しています%

root などの組み込みの localhost ユーザーを除いて、これを行う必要はないことに注意してください。どこからでもログインできる新しいユーザーを作成するだけの場合は、次を使用できます

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;

そしてそれはうまくいきます。(他の人が言及しているように、任意のドメインのユーザーに管理者権限を付与するのはひどい考えです。)

于 2017-10-12T21:49:00.953 に答える
3

簡単な方法は、root アカウントで phpmyadmin にログインし、mysql データベースに移動してユーザー テーブルを選択し、root アカウントを編集し、ホスト フィールドに % ワイルド カードを追加することです。次に、sshフラッシュ権限を介して

 FLUSH PRIVILEGES;
于 2016-02-21T10:52:44.357 に答える
1

私も同じ問題に直面していました.2分で解決しました.cpanelを介してIPをホワイトリストに登録するだけです.

サーバー A からサーバー B のデータベースに接続しようとしているとします。サーバー B の [Cpanel] -> [リモート MySQL] -> [サーバー A の IP アドレス] に移動し、それだけです。

于 2014-12-04T22:37:53.387 に答える
1

たまたま Windows で実行している場合。簡単な解決策は、MySQL サーバー インスタンス構成ウィザードを実行することです。これは、スタート メニューの MYSQL グループにあります。最後から 2 番目の画面で、「リモート マシンからのルート アクセスを許可する」というボックスをクリックします。

于 2016-06-22T14:18:20.070 に答える
0

できることは、mysql.cfg ファイルを開くだけで、Bind-address をこれに変更する必要があります。

バインドアドレス = 127.0.0.1

次にmysqlを再起動すると、そのサーバーをこれに接続できるようになります。

これを見て、あなたはそれを形にすることができます。

これが本物のソル

于 2014-02-04T07:31:11.020 に答える