SSHトンネルを介して接続するときのMySQLアクセス拒否エラー


12

数か月間、ローカルテストサーバーで実行されているMySQLインスタンスにSSHトンネルを介して問題なく接続してきました。突然ですが、私が考えることができる変更はありませんが、サーバーは次のエラーでSequel Proからのログを拒否しようとしました:

アクセスが拒否されたため、ホスト127.0.0.1に接続できません。

ユーザー名とパスワードを再確認し、現在の場所からのアクセスが許可されていることを確認してください。

MySQLは言いました:ユーザー 'root' @ 'localhost'のアクセスは拒否されました(パスワードを使用:YES)

SSHトンネルを介してではなく、SSHを介してサーバーに直接接続すると、ターミナルからログインできます。この問題は、Sequel Proや自分自身に限ったことではありません。MySQLWorkbenchを介して接続すると、オフィスの他のユーザーと同じエラーが発生します。私はmysqladmin正気のためにパスワードをリセットしましたが、それは間違いなく問題ではありません。

さらに調べ始めたとき、Sequel Proで入力した「127.0.0.1」ではなく、「localhost」としてサーバーが報告しているエラーに気づきました。友人は、それはおそらく悪いエラー処理であると示唆しましたが、ローカルホストとMySQLの127.0.0.1の大きな違いを考えると、奇妙に思えます。

トンネリングの問題を回避するために、root @%へのアクセスを許可して、直接接続できるようにしました。ほとんどの場合、これは機能します。テーブルデータを表示したり、新しいデータベースを作成したりできます。唯一の問題は、ユーザーを作成するときにエラーが発生することです。

ユーザー 'root' @ '%'のアクセスが拒否されました(パスワードを使用:YES)

奇妙なことに、ユーザーは実際に作成されますが、それは単に付与の問題だと思います。繰り返しますが、rootとしてログインすると、端末から何でもできます。

トンネル接続と(おそらく)許可コマンドがアクセス拒否エラーを受信して​​いる理由を解明するのに役立つ人はいますか?

参考までに、MySQはバージョン5.6.16で、ほとんどがデフォルト設定で、Homebrewを介してMAC OS X Serverマシンにインストールされます。

更新

ルートが現在アクセスを許可されているホストのリストは次のとおりです。

mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host           | user |
+----------------+------+
| %              | root |
| 127.0.0.1      | root |
| ::1            | root |
| localhost      | root |
+----------------+------+
4 rows in set (0.00 sec)

私が理解しているように、最初の行( "%")は本当に他の行を冗長にする必要がありますか?

更新2

助成金の問題を修正しました。root @%ユーザーにはすべての特権が付与されているわけではなくwith grant option、最後に追加の特権が付与されているため、付与する以外のすべてのことが可能です。それでも、SSHトンネルが拒否されている理由を知りたいと思っています。


「%」アカウントを作成する前に、「127.0.0.1」と「localhost」を作成しましたが、どちらも機能しませんでしたか?
スヴェレ14

localhostは実際に正しいホストにいる場合にのみ機能するため、理論上は127.0.0.1(localhostに相当するネットワーク)のみがsshトンネルを介して機能するはずです。少なくともOSのようなUNIXでは。
スヴェレ14

回答:


18

MySQLでは、localhostキーワードはMySQLソケットを使用する接続用に予約されており127.0.0.1、127.0.0.1上のMySQLネットワークポートへのTCP接続にはip-address を使用する必要があります。サーバの両方が、具体的にユーザーに権限を付与しなければならないことを、この手段127.0.0.1およびクライアントが使用しなければならない-h 127.0.0.1代わりに、ローカルのソケットに接続するのトンネルを通過します。

SSHポート転送を使用してアクセスを許可するには、次のようなものが必要です。

GRANT SELECT ON *.* TO user@`127.0.0.1`

そして、実行します

FLUSH PRIVILEGES;

そしておそらく

FLUSH QUERY CACHE;

それでも動作しない場合は、サーバープロセスを再起動します。

エラーメッセージ127.0.0.1では、逆DNSルックアップが変換されlocalhostてデバッグが困難になります。

マニュアルでは、それについて説明します。

Unixでは、MySQLプログラムはホスト名localhostを特別に処理します。これは、他のネットワークベースのプログラムと比較して予想されるものとは異なる可能性が高い方法です。localhostへの接続の場合、MySQLプログラムはUnixソケットファイルを使用してローカルサーバーへの接続を試みます。これは、ポート番号を指定する- -portまたは-Pオプションが指定されている場合でも発生します。クライアントがローカルサーバーにTCP / IP接続を確立するようにするには、--hostまたは-hを使用して、ホスト名の値127.0.0.1、またはローカルサーバーのIPアドレスまたは名前を指定します。--protocol=TCPオプションを使用して、localhostの場合でも、接続プロトコルを明示的に指定することもできます。例えば:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

この--protocolオプションを使用すると、他のオプションが通常他のプロトコルにデフォルト設定される場合でも、特定のタイプの接続を確立できます。


2
あ!その後、127.0.0.1が表示されると予想されたときに、エラーメッセージにlocalhostが表示される理由を説明します。それでもなお、rootユーザーには@ 127.0.0.1のすべての特権が付与されていますが、SSHトンネルを介して接続すると、アクセス拒否エラーが表示されます。正確な文IのRANは、次のとおりです。grant all on *.* to 'root'@'127.0.0.1' with grant option;
アダム・

私はこの問題を抱えていますが、それがホスト対ソケットの問題であることは明らかです。私が入力するとssh -h 127.0.0.1 -u root -p、サーバー上でリモート接続も拒否されます。
ファジィ

-h 127.0.0.1mysqlを再起動してサーバーでの接続の失敗を解決しましたが、sshソケットはまだ機能しません
-fuzzyTew

さあ行こう。1.サーバーは@ 127.0.0.1に付与する必要があります。これは、サーバーを再起動するまでかかりませんでした。2.ローカルソケットではなくトンネルが使用されるように、ローカル接続 localhostではなく 127.0.0.1でなければなりません
ファジィ

1

過去にssh tunelsで見たことがあります。「localhost」へのすべての付与と「127.0.0.1」へのすべての付与には違いがあるため、「localhost」付与の代わりにまたは「localhost」付与に加えて付与を試みてください。


あるいは逆に、あなたのケースでは、それは次のようになります
スヴェレ

おかげで、質問が更新され、ルートが許可されているホストのリストが含まれるようになりました。Sequel ProでMySQLサーバーとして「127.0.0.1」と入力したにもかかわらず、MySQLエラーが「localhost」として報告していたのは奇妙でした。しかし、これは問題だとは思わない。
アダム14

すべての異なるユーザーにパスワードを持っていますか?また、トンネル経由でmysqlに接続する場合、実際に使用する構文は何ですか?
スヴェレ14

mysqlセットアップのRootユーザーに制限はありますか?
スヴェレ14

すべてのルートパスワードが同じであることを保証するために、grantステートメントを再実行しidentified by ..ますが、喜びはありません。
アダム14

0

Sequelを使用してトンネルを作成する代わりに、自分でトンネルを作成するのは何ですか?

ssh -Cc blowfish -Nf -vv -L3306:localhost:3306 sshuser @ domain

次に、127.0.0.1:3306にSequelで接続しますか?端末(またはsshクライアントログ)に何か表示されますか?

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