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


668

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

私は頭がおかしいので、どうすればよいかわかりません。どんなアイデアでも大歓迎です。


セキュリティ対策にほとんどの状況では、rootとしてログインすることはできません...
AO_

回答:


816

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

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


17
Yannickを捕まえることはできましたが、ルート以外のユーザーにすべての特権を付与することはお勧めしません。おそらく削減されたセットですか?
Corey Ballou、

3
まあ、これは確かに良い考えではありませんが、 'root'がすべてのホストから接続できるようにすることは、同じ特権レベルであるため、まったく同じです。
Yannick Motton、2009年

2
あなたは私のポイントパスカルを逃したと思います。重要なのは、「root」ユーザーにはすでにこれらの権限があり、任意のIPにそのユーザーとして認証させたいということです。したがって、これが本当に彼が望んでいることである場合、新しい管理者ユーザー(まったく同じ権限を持つ)を作成するデフォルトの例は、彼がしようとしていることの代わりになります。
Yannick Motton

2
そうです、Yannick、私は最後まで読んでコメントを削除します。ただし、AFAIK、パーミッションはMySQLで正常に機能しているため、次のようになります。1.多分、OPは付与テーブルを手動で変更してから、特権をフラッシュする必要があります。2.多分、彼はrootに適切な付与構文を使用していません。別の管理ユーザーを追加することで回避できる場合がありますが、実際の問題であるIMHOは解決されません。
Pascal Thivent、2009年

1
すべてのホストからルートへのアクセスを提供することは適切な解決策ではないと感じました。代わりに、新しいユーザーを作成して、特権のセットを減らしました。使用したセットは、MySQL Workbenchでは「DBManager」と記述されています。また、ローカルネットワークの特定のホストグループ、特に192.168.0。%からのアクセスのみを許可しました
Gustavo Guevara 14

272

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


5
これが私のために働くために上記のステップを完了した後にmysqlを再起動する必要がありました。
料金所

username @ localhostを作成する必要がありますか?username @%を作成するだけでは十分ではありませんか?つまり、username @%を作成しただけでは、localhostからそのユーザーに接続できなくなりますか?
Sorin Postelnicu 2017年

1
ええ@localhost、特権がどういうわけか異なっていても作成することは理にかなっていますが、ここではそれらは同じであり、おそらく何よりも混乱しそうです(一方が存在しないことに気づかずにパスワードを変更すると、ログインがその1つに当たる可能性があるなど) )。
Bratchley 2017年

初心者としては本当に
役に立ち

1
Windowsのコンテナー化されたlaravelアプリケーションで「SQLSTATE [HY000] [1130]ホスト 'DESKTOP-xxx.xx'はこのMariaDBサーバーへの接続を許可されていません」を解決してくれてありがとう
Zulqarnain

117

私のエラーメッセージも同様で、ルートを使用していても、「ホスト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データベースにアクセスします(たとえば、リモートアドレスがポート3306でユーザー「root」として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サービスmysqld再起動

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

1
use dataentry行をスキップできます(ほとんどの人はそのデータベースを作成しないためです)。
Jedidja

3
私はmysql最後にサービスを再起動せずにこれを行うことができました
Ryan Tuck

5
FLUSH PRIVILEGES再起動する必要がないようにする必要があります。
アダムB

これは、サービスを再起動せずに、FLUSH PRIVILEGESがインストールされたWindows 10上のMySQL 5.5で私に役立ちました。Windowsでは、サービスのプロパティは、構成に使用されるmy.iniファイルを識別する必要があります(プロパティ|一般|実行可能ファイルへのパス)
FreeText

bind-address = "0.0.0.0"を指定すると、すべてのインターフェイスでリッスンし、リモート接続が機能すると想定しましたが、誤りでした。はい、netstatはmysqlが0.0.0.0(すべてのインターフェース)でリッスンしていることを示しましたが、質問のタイトルでエラーが発生していました。bind-address行を完全に削除すると、動作し始めました。変だ。
へんの

73

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

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

Goto Privileges> Add a new User

ここに画像の説明を入力してください

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

ここに画像の説明を入力してください


とても役に立ちました。ありがとうございます
アンダーソン・ラヴェルデ

65

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

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

mysql -uroot -p

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

kubectl exec -it [pod-name] -- /bin/bash
mysql -uroot -p

2)ユーザーを作成する

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

3)アクセス許可を付与する

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

4)フラッシュ特権

FLUSH PRIVILEGES;

4
ERROR 1045(28000):アクセスは、ユーザー'ルート'のために拒否されました@ 'localhostの'(passwoYESを使用して)Y
Gank

11
\ *。\ *は*。*である必要がありますか?
sgarg

26

メッセージ*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クライアントの逆引きを可能にする私のサーバーのホストファイルのエントリは、この問題を解決しました。


1
「MySQLサーバーからMySQLクライアントへの応答です。」ありがとう、私はエラーがどこから来ているのか、私のマシンかサーバーかと思っていました。「ERROR 1130(HY000):」などのエラーが発生します
PJ Brunet 2013年

20

簡単な方法:

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

その後

FLUSH PRIVILEGES;

できた!


%は何を意味していますか?
データ

1
それはすべてのようです。あなたは例のようにすることができます:WHERE CustomerName LIKE 'a%'-"a"で始まるすべての値を検索します
user5510975

16

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

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


4

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

ユーザーマネージャをクリックします。 ここに画像の説明を入力してください

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

ここに画像の説明を入力してください


4

以下のための1:ここでの回答のほとんどは、あなたが2つのホスト値を持つユーザーの作成を示しlocalhost、およびのための1つを%

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

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

そしてそれはうまくいきます。(他の人が述べたように、任意のドメインからユーザーに管理者特権を与えることは恐ろしい考えです。)


3

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

 FLUSH PRIVILEGES;

これは私とこれを組み合わせるのに役立ちました:GRANT ALL PRIVILEGES ON GRANT OPTIONを指定して 'root' @ '%'にする。
Lanklaas

2

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

flush privileges;

これだけで、Ubuntu 16.04、mysql 5.7.20での問題が修正されます。YMMV。


2

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

私の場合は、コントロールパネルのターゲットサーバーDBに移動します。MySQL管理-> DBを選択->表示されます。「Access Hosts」、ここにリモートホストを追加するだけです。 ここに画像の説明を入力してください

pleskなどの他のC.パネルにも同様のオプションがあると思います。

参考になれば幸いです。


2

さて、上記の答えのどれも私にとってうまくいきませんでした。多くの調査の結果、解決策を見つけました。私は遅れるかもしれませんが、これは将来的に他の人を助けるかもしれません。

ターミナルからSQLサーバーにログインします

 mysql -u root -p
 -- root password
GRANT ALL ON *.* to root@'XX.XXX.XXX.XX' IDENTIFIED BY 'password';

これにより、権限の問題が解決されます。

エラーを解決する前に

問題を解決した後

ハッピーコーディング!!


1

まああなたができることは単にmysql.cfgファイルを開いて、Bind-addressをこれに変更する必要があることです

bind-address = 127.0.0.1

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

これを見てあなたはそれからアイデアを持つことができます。

これは本当のソルです


3
これは関連していますが、同じ問題ではありません。最初に受け取ったエラーは、クライアントがMySQLサーバーに正常に接続しているが、認証に失敗したことを示しています。bind-addressが127.0.0.1に設定されている場合、代わりに接続拒否エラーが発生します。
軸索

しかし、これはすべてのホストがサーバーnaに接続できるようにするアドレスですか?
Kishan Bheemajiyani 2014

しかし、ユーザーにすべてのアクセス許可を与えることは、そのユーザーがクライアントユーザーを持ち、uがすべてのアクセス許可を持つユーザーを作成することを許可されていない場合、そのbcozにとって賢明なオプションではありません。
Kishan Bheemajiyani 2014

1

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


1

WAMPサーバー+ Windows 10を使用していて、Wampアイコンを右クリックするよりも開発に使用している場合=> Wamp Settings =>Check Allow Virtual Hosts other than 127* ここに画像の説明を入力してください


0

私も同じ問題に直面していました。私はそれを私のために2分で解決しました私はcpanelを通してipリストをホワイトリストにします

サーバーAからサーバーBのデータベースに接続しようとしているとします。サーバーBに移動します。Cパネル->リモートMySQL->サーバーAのIPアドレスを入力します。


0

この答えは誰かを助けるかもしれません...

これらすべての答えは役に立たなかったので、私は重要なことを1つ確認するのを忘れていることに気付きました。ポート:)

別のポートで実行されているDockerコンテナーでmysqlを実行しています。mysqlサーバーを実行しているポート3306でホストマシンをポイントしていました。私のコンテナーはポート33060でサーバーを公開しています。そのため、これまでずっと、間違ったサーバーを見ていました。どー!


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

このエラーは、ルートへのパスワードがないため、外部から接続しようとしたときに発生する可能性があります。


0

CPANELソリューション

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

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

コメントして、IPとは何かを思い出してください。それは私にとってそれでした。


0

これは、将来のリモートmysql接続で機能します。

    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-addressディレクティブで始まる行に移動します。次のようになります。

    bind-address            = 0.0.0.0

mysqlにrootターミナルとしてログインします。

    mysql -u root -p
    -- root password

    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;

    EXIT;

最後に、次のコマンドを使用して、データベースにリモートで接続するための排他的な権限をそのマシンに付与します。

    sudo ufw allow from remote_IP_address to any port 3306

-1

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

(SQLyog内から)リモートデータベースに接続し、数時間作業しました。その後、システムを数分間離れた後、作業を​​続けるために戻ってきました-ERROR 1130!私が試したことは何もしませんでした。SQLyogを再起動しても修正されませんでした。その後、システムを再起動しました-それでも機能しませんでした。

だから私はターミナルから接続しようとしました-それはうまくいきました。その後、SQLyogで再試行しました...うまくいきました。「ランダムなコンピュータの癖」以外は説明できませんが、誰かを助けるかもしれないと思います。


-1

接続文字列を定義せずにmysqlクエリを実行しようとすると、このエラーが発生します。

おそらく、実行前に接続文字列を定義するのを忘れました。これをチェックしましたか?(悪い英語で申し訳ありません)


-1

問題: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アカウントも機能するようにします。


-1

これはDirectAdminで機能します。

  1. に移動しますDirectAdmin
  2. に移動しますMySQL Management
  3. を選択しますdatabase
  4. Accesse Hostタブの下にフィールドがあります。このフィールドにはを入力する必要がありxxx.xx.xxx.xxます。
  5. をクリックしAdd Hostます。

完成しました。これで、your_database_username&によってこのDBにアクセスできますyour_database_password
とても簡単!


-3

ここではすべての答えがうまくいかなかったので、今後他のユーザーの役に立つかもしれないとゲストに説明します。これは、MySQLだけでなく、コードの問題になる場合もあります。

使用している場合 VB.NET

このコードの代わりに:

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database

 MysqlConn = New MySqlConnection()

MysqlConn = New MySqlConnection()最初の行に移動する必要があります。だからこのようになります

 MysqlConn = New MySqlConnection()

 Dim server As String = My.Settings.DB_Server
 Dim username As String = My.Settings.DB_Username
 Dim password As String = My.Settings.DB_Password
 Dim database As String = My.Settings.DB_Database

 MysqlConn.ConnectionString = "server=" & server & ";" _
 & "user id=" & username & ";" _
 & "password=" & password & ";" _
 & "database=" & database
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.