web-dev-qa-db-ja.com

ホスト 'xxx.xx.xxx.xxx'はこのMySQLサーバーに接続することを許可されていません

これは簡単なことではありませんが、私は私の人生のために動かすことはできません
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」とホスト「%」を持つユーザーのエントリがまったく同じです。

私は私の知恵の終わりにいて、そして進む方法がわからない。どんなアイデアでも大歓迎です。

588
concept47

おそらくセキュリティ上の予防措置です。新しい管理者アカウントを追加してみてください。

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:接続の確認」も参照してください。

700
Yannick Motton

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で接続する必要があります。

231
Aditya P Bhatt

私のエラーメッセージは似ていて、 ' ホストXXXはこのMySQLサーバへの接続を許可されていません '私はrootを使っていましたが。これはrootが正しいパーミッションを持っていることを確認する方法です。

私の設定

  • Ubuntu 14.04 LTS
  • MySQL v5.5.37

解決策

  1. 'etc/mysql/my.cnf'の下のファイルを開きます
  2. 以下をチェックしてください。

    • ポート(デフォルトでこれは 'port = 3306'です)
    • bind-address(デフォルトではこれは 'bind-address = 127.0.0.1'です。もしすべてを開きたいのならこの行をコメントアウトしてください。私の例では実際のサーバは10.1.1.7です)
  3. 実際のサーバー上のMySQLデータベースにアクセスします(リモートアドレスはユーザー 'root'としてポート3306で123.123.123.123で、データベース '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 service mysqld restart

  5. これでデータベースにリモート接続できるはずです。たとえば、MySQL Workbenchを使用していて、「Hostname:10.1.1.7」、「Port:3306」、「Username:root」と入力しています。
101
Will

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

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

後藤特権>新しいユーザーの追加

enter image description here

任意のホストを選択 希望のユーザー名に

enter image description here

66
HimalayanCoder

以下の手順を実行してください。

1)mysqlに接続する

mysql -uroot -p

2)ユーザーを作成する

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

3)許可を与える

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

4)特権をフラッシュする

FLUSH PRIVILEGES;
55
minhas23

メッセージ*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クライアントを許可にどのようにマッピングするかが決定的に重要なので、これは重要です。

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

私のサーバーのHostファイルにMySQLクライアントの逆引き参照を許可することでこの問題を解決しました。

24

権限テーブルを手動で(INSERT、UPDATEなどを使用して)変更する場合は、FLUSH PRIVILEGESステートメントを実行して、権限テーブルをリロードするようにサーバーに指示してください。

PS: any Hostが any userに接続することを許可することはお勧めしません(特にrootの使用ではありません)。クライアント/サーバーアプリケーションにmysqlを使用している場合は、サブネットアドレスを使用してください。 Webサーバーまたはアプリケーションサーバーでmysqlを使用している場合は、特定のIPを使用してください。

15
Pascal Thivent

簡単な方法:

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

それから

FLUSH PRIVILEGES;

やった!

8
user5510975

MySqlのGUIツール(SQLyog)が提供するインターフェースを使うだけです。

ユーザーマネージャをクリックしてください: enter image description here

さて、あなたが他のどのリモートPCにもアクセスを許可したいのなら、下の図のように、Hostフィールドの値が%(ワイルドカード)であることを確認してください。

enter image description here

4
BabaNew

簡単な方法は、rootアカウントでphpmyadminにログインすることです。そこにはmysqlデータベースがあり、ユーザーテーブルを選択し、そこにrootアカウントを編集し、Hostフィールドに%wild cardを追加します。そしてsshフラッシュ特権を通して

 FLUSH PRIVILEGES;
3
user889030

これが最近のmysqlインストールである場合は、他のものを変更する前に、単にこのコマンドを実行してから再試行してください。

flush privileges;

これだけでUbuntu 16.04、mysql 5.7.20の問題が解決します。 YMMV.

2
Alex R

ここでの回答の大部分は、2つのHost値を持つユーザーを作成することを示しています。1つはlocalhost用、もう1つは%用です。

Rootのような組み込みのlocalhostユーザーを除いて、これを行う必要はありません。どこからでもログインできる新しいユーザーを作成するだけの場合は、次のコマンドを使用できます。

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

そしてそれはちょうどうまくいきます。 (他の人が言ったように、どのドメインからでもユーザーに管理者権限を与えるのはひどい考えです。)

2
Erica Kane

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

1
Jan

まああなたができることはただmysql.cfgファイルを開くことですそしてあなたはこれにBind-addressを変更しなければなりません

バインドアドレス= 127.0.0.1

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

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

これは本当のゾルです

1
Krishna

ホスティングコントロールパネルからそれを実行するためのより良い方法を見つけるだけです(私はここでDirectAdminを使用しています)

私の場合は、単にあなたのコントロールパネルでターゲットサーバのDBに行きます。MySQL管理 - >あなたのDBを選択します - >あなたは見つけるでしょう: "Access Hosts"、単にあなたのリモートホストをここに追加してください。 enter image description here

私はPleskなどのような他のC.panelsに同様のオプションがあると思います。

私はそれがあなたにとっても参考になったことを願っています。

1
Eran Levi

私も同じ問題に直面していました。私は私のために2分でそれを解決した

サーバーAからサーバーBのデータベースに接続しようとしているとします。

0
user3437729

問題:root @ localhostがopenSUSE 42.2-1.150.x86_64上のmysql-community-serverのフレッシュインストールに接続できない。 MySQLは接続を拒否します - 期間。

溶液:

$ ls -l /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql     0 Apr 29 19:44 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  1024 Apr 29 19:44 /var/lib/mysql/mysql/user.MYI
-rw-rw---- 1 mysql mysql 10684 Apr 29 19:44 /var/lib/mysql/mysql/user.frm

ファイルuser.MYDのサイズは0です (本当に?!)私は他の作業システムから3つのファイルすべてをコピーしました。

$ /usr/sbin/rcmysql stop
$ cd /var/lib/mysql/mysql/
$ scp root@othersytem:/var/lib/mysql/mysql/user.* ./
$ /usr/sbin/rcmysql start
$ cd -
$ mysql -u root -p

私はログインすることができました。それから、それはただすべてのスキーマ特権を再適用することの問題でした。また、IPv6を無効にした場合は、一時的に再度有効にして、root @ :: 1アカウントも機能するようにします。

0
Alex D

CPANELソリューション

Cpanelに移動し、Remote MySQLを探します。入力フィールドにIPを追加します。

ホスト(%ワイルドカードを使用できます)

Ipとは何か覚えているようにコメントしてくださいそれは私にとってそれでした。

0
user2060451

これは DirectAdmin のために働きます。

  1. あなたのDirectAdminに行きます。
  2. あなたのMySQL Managementに行きなさい。
  3. あなたのdatabaseを選択してください。
  4. Accesse Hostタブの下にはフィールドがあります。この欄はxxx.xx.xxx.xxで埋めてください。
  5. Add Hostをクリックしてください。

終了しました。 your_database_usernameyour_database_passwordでこのDBにアクセスできます。
とても簡単!

この答えは誰かに役立つかもしれません...

これらすべての答えは助けにはなりませんでした、それから私は1つの重要なことをチェックするのを忘れたことに気付きました。

私は別のポートで実行されている港湾労働者コンテナーでmysqlを実行しています。私はmysqlサーバーが実行されているポート3306でホストマシンをポイントしていました。私のコンテナはポート33060でサーバーを公開しています。だから今回は間違ったサーバーを見ていました!やあ!

0
Srini

この問題に直面している誰かがSQLyog内からそれを経験しているという偶然の機会に、これは起こりました:

私は(SQLyog内から)リモートデータベースに接続し、数時間働いていました。その後、私は数分間システムを去り、そして私の仕事を続けるために戻ってきました - ERROR 1130 !試したことは何もなかった。 SQLyogを再起動しても解決しませんでした。それから私はシステムを再起動しました - それはまだうまくいきませんでした。

だから私は端末から接続してみました - それはうまくいった。それからSQLyogでそれを再試行しました...そしてそれはうまくいきました。 「ランダムなコンピュータの風変わり」以外には説明できませんが、誰かに役立つかもしれないと思います。

0
Emmanuel
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

あなたが外部から接続しようとしたときにルートへのパスワード、そしてこれはおそらくあなたと一緒に発生したので、このエラー。

0
Abd Abughazaleh