これは簡単なことではありませんが、私は私の人生のために動かすことはできません。
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;
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:接続の確認」も参照してください。
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
で接続する必要があります。
私のエラーメッセージは似ていて、 ' ホストXXXはこのMySQLサーバへの接続を許可されていません '私はrootを使っていましたが。これはrootが正しいパーミッションを持っていることを確認する方法です。
私の設定 :
解決策
以下をチェックしてください。
実際のサーバー上の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
Sudo service mysqld restart
任意のホスト名からユーザーにアクセス権を付与する必要があります。
これは、phpmyadminから新しい権限を追加する方法です。
後藤特権>新しいユーザーの追加
任意のホストを選択 希望のユーザー名に
以下の手順を実行してください。
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;
メッセージ*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クライアントの逆引き参照を許可することでこの問題を解決しました。
権限テーブルを手動で(INSERT、UPDATEなどを使用して)変更する場合は、FLUSH PRIVILEGES
ステートメントを実行して、権限テーブルをリロードするようにサーバーに指示してください。
PS: any Hostが any userに接続することを許可することはお勧めしません(特にroot
の使用ではありません)。クライアント/サーバーアプリケーションにmysqlを使用している場合は、サブネットアドレスを使用してください。 Webサーバーまたはアプリケーションサーバーでmysqlを使用している場合は、特定のIPを使用してください。
簡単な方法:
Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD';
それから
FLUSH PRIVILEGES;
やった!
簡単な方法は、rootアカウントでphpmyadminにログインすることです。そこにはmysqlデータベースがあり、ユーザーテーブルを選択し、そこにrootアカウントを編集し、Hostフィールドに%wild cardを追加します。そしてsshフラッシュ特権を通して
FLUSH PRIVILEGES;
これが最近のmysqlインストールである場合は、他のものを変更する前に、単にこのコマンドを実行してから再試行してください。
flush privileges;
これだけでUbuntu 16.04、mysql 5.7.20の問題が解決します。 YMMV.
ここでの回答の大部分は、2つのHost値を持つユーザーを作成することを示しています。1つはlocalhost
用、もう1つは%
用です。
Rootのような組み込みのlocalhostユーザーを除いて、これを行う必要はありません。どこからでもログインできる新しいユーザーを作成するだけの場合は、次のコマンドを使用できます。
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;
そしてそれはちょうどうまくいきます。 (他の人が言ったように、どのドメインからでもユーザーに管理者権限を与えるのはひどい考えです。)
あなたがたまたまWindows上で走っているならば。簡単な解決策は、MySQLサーバーインスタンス設定ウィザードを実行することです。それはスタートメニューのあなたのMYSQLグループにあります。最後の画面から2番目の画面で、「リモートマシンからのrootアクセスを許可する」というボックスをクリックします。
まああなたができることはただmysql.cfgファイルを開くことですそしてあなたはこれにBind-addressを変更しなければなりません
バインドアドレス= 127.0.0.1
そしてmysqlを再起動すると、そのサーバーをこれに接続できるようになります。
これを見て、あなたはそれをアイデアの形にすることができます。
私も同じ問題に直面していました。私は私のために2分でそれを解決した
サーバーAからサーバーBのデータベースに接続しようとしているとします。
問題: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アカウントも機能するようにします。
CPANELソリューション
Cpanelに移動し、Remote MySQLを探します。入力フィールドにIPを追加します。
ホスト(%ワイルドカードを使用できます)
Ipとは何か覚えているようにコメントしてくださいそれは私にとってそれでした。
これは DirectAdmin のために働きます。
DirectAdmin
に行きます。MySQL Management
に行きなさい。database
を選択してください。Accesse Host
タブの下にはフィールドがあります。この欄はxxx.xx.xxx.xx
で埋めてください。Add Host
をクリックしてください。終了しました。 your_database_username
とyour_database_password
でこのDBにアクセスできます。
とても簡単!
この答えは誰かに役立つかもしれません...
これらすべての答えは助けにはなりませんでした、それから私は1つの重要なことをチェックするのを忘れたことに気付きました。
私は別のポートで実行されている港湾労働者コンテナーでmysqlを実行しています。私はmysqlサーバーが実行されているポート3306でホストマシンをポイントしていました。私のコンテナはポート33060でサーバーを公開しています。だから今回は間違ったサーバーを見ていました!やあ!
この問題に直面している誰かがSQLyog内からそれを経験しているという偶然の機会に、これは起こりました:
私は(SQLyog内から)リモートデータベースに接続し、数時間働いていました。その後、私は数分間システムを去り、そして私の仕事を続けるために戻ってきました - ERROR 1130 !試したことは何もなかった。 SQLyogを再起動しても解決しませんでした。それから私はシステムを再起動しました - それはまだうまくいきませんでした。
だから私は端末から接続してみました - それはうまくいった。それからSQLyogでそれを再試行しました...そしてそれはうまくいきました。 「ランダムなコンピュータの風変わり」以外には説明できませんが、誰かに役立つかもしれないと思います。
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
あなたが外部から接続しようとしたときにルートへのパスワード、そしてこれはおそらくあなたと一緒に発生したので、このエラー。