リモートMySQL接続を有効にする:エラー1045(28000):ユーザーのアクセスが拒否されました


136

MySQL 5.1.31はWindows XPで実行されます。

ローカル MySQLサーバー(192.168.233.142)から、次のようにrootとして接続できます。

>mysql --host=192.168.233.142 --user=root --password=redacted

リモートマシン(192.168.233.163)、私は、MySQLのポートが開いていることを見ることができます。

# telnet 192.168.233.142 3306
Trying 192.168.233.142...
Connected to 192.168.233.142 (192.168.233.142).

しかし、リモートマシンからmysqlに接続しようとすると、次のメッセージが表示されます。

# mysql --host=192.168.233.142 --user=root --password=redacted
ERROR 1045 (28000): Access denied for user 'root'@'192.168.233.163' (using password: YES)

mysql.userに2つのエントリしかない:

Host         User     Password
--------------------------------------
localhost    root     *blahblahblah
%            root     [same as above]

リモートアクセスを有効にするには、さらに何が必要ですか?

編集

以下のPauloで提案されているように、%のmysql.userエントリをIP固有のエントリに置き換えようとしたので、ユーザーテーブルは次のようになります。

Host             User     Password
------------------------------------------
localhost        root     *blahblahblah
192.168.233.163  root     [same as above]

その後、マシンを再起動しましたが、問題は解決しません。

回答:


211

これをrootとして置く必要があります:

GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'IP' IDENTIFIED BY 'PASSWORD' with grant option;

;

ここで、IPはアクセスを許可するIPで、USERNAMEは接続に使用するユーザー、PASSWORDは関連するパスワードです。

任意のIPからのアクセスを許可する場合は、 %は、IPの代わりにです。

そして、あなたは置くだけです

FLUSH PRIVILEGES;

または、mysqlサーバーを再起動してください。


ローカルのmysqlクライアントなしでこれを行う方法はありますか?
cmcginty 2013

特定のIPの権限を削除する方法
Umair Ayub、2014

4
stackoverflow.com/a/21151255/470749は、バインドアドレスの設定をコメントアウトする必要があるので、私にも役立ちました。リモート権限を付与するだけでは機能しませんでした。
ライアン

8
回答では説明されていませんがPASSWORD、アカウントのパスワードに置き換えてください。私は唯一の変更の上にしようとしたUSERNAMEIP、私は変更されるまで、それは私のために動作しませんでしたPASSWORD
Richard Parnaby-King 2014

これを行った後、次の回答で述べられていることも実行してください: stackoverflow.com/a/21151255/445438
budhajeewa

85

これを行うまで、リモートアクセスを許可した後も同じエラーが発生しました。

から /etc/mysql/my.cnf

新しいバージョンのmysqlでは、ファイルの場所は /etc/mysql/mysql.conf.d/mysqld.cnf

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

(この行をコメント: bind-address = 127.0.0.1

次にを実行しservice mysql restartます。


6
または、bind-address = 0.0.0.0に変更します
lolski '17 / 10/17

2
コメントアウトだけでbind-addressはうまくいきませんでした。どちらかbind-address = 0.0.0.0またはbind-address = <server_ip>作品。
チャンティアル

58

MySQLサーバーではデフォルトでリモートアクセスが無効になっています。ユーザーにリモートアクセスを提供するプロセスは次のとおりです。

  1. sql binフォルダーに移動するか、次の場所に追加します PATH
  2. rootにログイン mysql -uroot -proot(またはrootパスワードが何であれ)ます。
  3. 成功するとあなたは mysql>
  4. そのユーザーにすべてのアクセスを許可します。

GRANT ALL PRIVILEGES ON *.* TO 'username'@'IP' IDENTIFIED BY 'password';

ここでIPは、リモートアクセスを許可するIPアドレスです。 %するIPアドレスです(任意のIPアドレス。

例:

C:\Users\UserName> cd C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin

C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.27 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.25 sec)

これは他のユーザー向けです。

mysql> GRANT ALL PRIVILEGES ON *.* TO 'testUser'@'%' IDENTIFIED BY 'testUser';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

これが役に立てば幸い


+1の詳細については、それが0 rows affected標準であることがわかりました:)また、service mysqld restart最後に推奨されます。[ mysqldたまにあるだけですmysql]
ネイサン・ドートマン、2014

#注:バージョン5.6+の場合、「grant all on ...」を使用します(特権なし)
Nicke Manarin

21

パウロの助けが私を解決に導きます。次の組み合わせでした。

  • パスワードにドル記号が含まれていた
  • Linuxシェルから接続しようとした

bashシェルは、ドル記号を環境変数に展開するための特殊文字として扱うため、円記号でエスケープする必要があります。ちなみに、ドル記号がパスワードの最後の文字である場合、これを行う必要はありません

たとえば、パスワードが「pas $ word」の場合、Linux bashから次のように接続する必要があります。

# mysql --host=192.168.233.142 --user=root --password=pas\$word

4
上記に加えて、/
etc

2
または、単一引用符を使用して$の拡張を防ぐこともできます:mysql --host=192.168.233.142 --user=root --password='pas$word' stackoverflow.com/a/6697781/500942
jalanb

パスワードの「$」。貴重な。トンありがとう!!
Nagendra Kakarla

しばらくモニターに頭をぶつけた後、これに出くわしました。持っていた !と@私のパスワード。変更されたパスワード、フラッシュされた特権と私はそれに戻ってきました。ありがとう!
AJM

9

ファイアウォールはありますか?ポート3306が開いていることを確認してください。

Windowsでは、デフォルトでmysql rootアカウントが作成され、インストール中にリモートマシンからのアクセスを有効にするオプションを選択していない限り、localhostからのアクセスのみが許可されます。

ホスト名として「%」を使用して目的のユーザーを作成または更新します。

例:

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

6
サーバーは "エラー1045(28000):アクセスが拒否されました"で応答します...ファイアウォールブロックがタイムアウトになると...
Paulo H.

最初に投稿したかっただけです。私の悪い
Vamsi Krishna B

@クリッシュ-あなたが提案したことはすべて質問ですでにカバーされています
マイク・チェンバレン

5
  1. もう一度flush privilegesやり直してください。

  2. サーバーを再起動して、権限を再ロードしてください。

  3. ホスト「192.168.233.163」でユーザーを作成してみてください。「%」はすべてを許可しないようです(奇妙です)


ありがとう、私はそれを試しましたが、役に立ちませんでした。私はあなたの提案で質問を更新しました。
Mike Chamberlain

4
別のユーザーを作成してみて、すべての助成金を設定することを忘れてはいけない:CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass'; GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' WITH GRANT OPTION;
パウロH.

4

私の場合、私はセントOS上のリモートmysqlサーバーに接続しようとしていました。多くの解決策(すべての特権の付与、IPバインディングの削除、ネットワークの有効化)を行った後も、問題は解決されませんでした。

結局のところ、さまざまなソリューションを検討していると、iptablesに出くわしました。その結果、mysqlポート3306が接続を受け入れていないことに気付きました。

ここでは、この問題を確認して解決した方法について簡単に説明します。

  • ポートが接続を受け入れているかどうかの確認:

    telnet(mysql server ip)[portNo]

  • ポートでの接続を許可するIPテーブルルールを追加します。

    iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

  • 本番環境ではこれをお勧めしませんが、iptablesが適切に構成されていない場合は、ルールを追加しても問題が解決しない可能性があります。その場合、以下を実行する必要があります。

    サービスiptables停止

お役に立てれば。


3

動的IPを使用している場合は、192.168.2。%にアクセスを許可するだけでよいので、毎回IPアドレスへのアクセスを許可する必要はありません。


1

私は、Amazon EC2 LinuxインスタンスのMYSQLへのリモートログインに苦労していました。解決策は、私のセキュリティグループにMySQLポート3306のインバウンドルールを含めて、IPアドレス(または0.0.0.0/0)を含めることです。このルールを追加するとすぐにリモートで接続できます。


1

mysql設定ファイルの新しい場所は

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

0

MySQL ODBC 3.51ドライバーでは、パスワードの特殊文字は処理されません。

"警告– GRANTコマンドのパスワードに!@#$%^?などの特殊文字が含まれている場合、MySQL ODBC 3.51で深刻な問題が発生する可能性があります。MySQLODBC 3.51 ODBCドライバーは、パスワードボックスでこれらの特殊文字をサポートしていません。あなたが受け取ることになるだけでエラーメッセージは(パスワードを使用して:YES)、「アクセスが拒否される」」 -からhttp://www.plaintutorials.com/install-and-create-mysql-odbc-connector-on-windows-7/


0

ユーザー/ホストの組み合わせがパスワードなしで作成された可能性があります。

(GUIアプリを使用して)既存のユーザーに新しいホストを追加するとき、既存のパスワードが新しいユーザー/ホストの組み合わせにも使用されると想定していました。

でログインできました

mysql -u username -p PASSWORD

ローカルで、IPADDRESSからではなく

mysql -u --host=HOST -p PASSWORD

(パスワードを使用せずにIPADDRESSから実際にログインできます)

mysql -u --host=HOST

アクセスを許可するパスワードの設定:

set password for '<USER>'@'<IPADDRESS>' = '<PASSWORD>';

1
ありがとう、Mysqlサーバーにリモートで接続するために長い時間を費やしましたが、この行は非常に役立ちました。ユーザーのパスワードを設定するときにエラーが発生ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal numberし、この記事が表示されました:knowmysql.blogspot.com/2013/09/…これらの手順を実行した後、ようやくサーバーに接続できました。
アンディフォースノ2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.