mysqlはクライアントのホスト名をどのように決定しますか?


14

特定のホスト名からのみMySQLデータベースに接続できるMySQLユーザーを作成しようとしています。

db_name。*のすべてを、「some_passwd」で識別される「user_name」@「appserver-lan.mydomain.com」に付与します。

mysql dbのユーザーテーブルを確認すると、ユーザーが正常に作成されたことがわかります。

mysqlを使用します。User = 'user_name'およびHost = 'appserver-lan.mydomain.com'のユーザーから*を選択します

または

「username」@「appserver-lan.mydomain.com」の付与を表示

指定したホスト名は、amazon-ec2名のエイリアスであり、AWS DNSサーバーによって解決されると、LANアドレスになります。

[root @ db_server〜]#ホストappserver-lan.mydomain.com

appserver-lan.mydomain.comは、ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.comのエイリアスです。ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.comのアドレスは10.xxxです。 .xxx.xxx

問題は、このappserver-lanからデータベースLAN IPに接続しようとすると、パスワードが正しいにもかかわらず、アクセス拒否エラーが発生することです。ここで奇妙なのは、エラーに表示されるホスト名が、ユーザーの作成時に指定したホスト名ではないことです。

エラー1045(28000):ユーザー 'user_name' @ ' appserver.mydomain.com 'のアクセスが拒否されました(パスワードを使用:YES)

だから、私の質問は次のとおりです。mysqlはどのようにクライアントのホスト名を決定するのですか?私はチェックし、「appserver.mydomain.com」も「appserver-lan.mydomain.com」も指し示していないので、逆DNSルックアップではそうではないと考えています。さらに、dbサーバーには、/ etc / hosts上のappserverに関連するエントリがありません。

要約すると、ホスト "%"またはLAN IPに特権を付与することはうまく機能するため、ホスト名解決の問題であると確信しています。

私が欠けているもののアイデアはありますか?


なぜ逆DNSではないと思いますか?するとどうなりますhost -t PTR 10.1.2.3か?
ゾレダチェ

host -t PTR 10.xxx.xxx.xxx xxx.xxx.xxx.10.in-addr.arpaドメイン名ポインターip-10-xxx-xxx-xxx.ec2.internal。ご覧のとおり、これはエラーメッセージ(appserver.mydomain.com)に表示されるホスト名ではないため、MySQLが逆ルックアップを実行していないと思いました。
ルイスフェルナンドアレン

回答:


13

DNS逆引き参照を使用します。クライアントのIPアドレスを取得し、その名前に対して返されたPTRレコードを使用します。

私の意見では、名前に基づいて認証を行うことはあまり役に立ちません。代わりにIPアドレスの使用を検討することをお勧めします。

MysqlがDNSを使用する方法については、このドキュメントを参照してください。


リンクをありがとう、@ Zoredache。AWS内部インターフェイスはDHCPを使用するため、IPアドレスの使用は避けたいと思います(IPアドレスの変更は、サーバーの起動時はいつでも)とPTRレコードを使用します。ここで奇妙なのは、逆ルックアップを使用しているため、「ユーザー@ ip-10-xxx-xxx-xxx.ec2.internalのアクセスが拒否されました」と言う必要があることです。appserver.mydomain.comの代わりに...
ルイスフェルナンドアレン

1
代わりにホストベースのファイアウォールを使用するか、SSLおよびCertベースの認証を設定して、IP /名前認証をすべてスキップできますか。
ゾレダチェ

3

MySQLは、ホスト名を取得するために、IPアドレスで逆DNSルックアップを実行します。AWS EC2で実行している場合は、サーバーにエラスティックIPを割り当て(これには追加料金はかかりません)、ホスト名に移動するエラスティックIPのリバースDNSをセットアップするようAmazonに依頼できます。

DBサーバーもEC2にありますか?その場合、インスタンスのプライベートIPアドレスが使用され、そうでない場合はパブリックIPアドレスが使用されるためです。appserver-lanは、putlicではなく、サーバーに割り当てられた10.XXX.XXX.XXXプライベートIPであるため、投稿から見えます。

同じ地域内のサーバーしか持っていないので、異なる地域と通信する場合、どのIPアドレスが使用されるかはわかりません。


はい、EC2でも同じ地域にあります。先端をありがとう、アンディ。通信に有効なIPを指定しても、EC2インスタンスが内部IPを使用してそれらの間で通信することを知りませんでした。それが私の問題を解決しました=]
ルイスフェルナンドアレン

3

mysqlサーバーが逆DNSルックアップを誤って実行しているように見える、同様の問題が発生しました。

私が抱えていた問題は、サーバーが「user」@「reverse.dns」だけでなく「user」@「1.2.3.4」のアクセス許可を持っていることでした。IPアドレスのみを持つユーザーには最小限の権限がありましたが、mysqlサーバーはホスト名を持つユーザーではなくそのユーザーの権限を使用し、「ユーザー 'user'@'1.2.3.4'のアクセスが拒否されました」というメッセージを返しました。IPアドレスを持つユーザーを削除すると、問題が修正され、サーバーがホスト名で他のユーザーを使用するように強制されました。


0

また、IPV4とIPV6のホスト名とIPアドレスが一致せず、ユーザー権限にホスト名のみが使用される問題も見ました。たとえば、IPV6リバースDNSはあるがフォワードIPV6 DNSはない場合。

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