WindowsにPostgreSQL 9.1 x64をインストールし、リスンアドレスを設定しましたが、pgAdminで接続すると、次のエラーが発生します。 PostgreSQLが通常のIPアドレスではなくIPv6アドレスを表示している理由がわかりません。
認証を機能させるために、エラーメッセージに基づいて、pg_hba.conf
を次のように更新しました。
Host all all fe80::c5d2:XXXX:XXXX:3bc0/12 trust
うまくいきましたが、醜く、具体的すぎます。 PostgreSQLのドキュメントに基づいて以下を試しましたが、どれも機能しませんでした。同じ「アクセス拒否」エラーが発生しました。
local all all trust
Host all all 0.0.0.0/12 trust
IPv6アドレス空間全体をカバーするこれを機能させましたが、より制限するためにIPv6範囲を指定するにはどうすればよいですか?
Host mydb myuser ::/0 trust
::/0
に頼らずにIPv6で範囲を指定するにはどうすればよいですか?fe80:
で始まるIPv6アドレスは、リンクローカルアドレスです。異なるサブネットまたはインターネット間でルーティングすることはできません。これらは、同じLANに接続されたマシン間の通信専用です。リンクローカル範囲はfe80::/10
として定義されます。ローカルLANの全員を信頼するなら、あなたはそうすることができます
Host all all fe80::/10 trust
ローカルLAN上の全員を信頼しない場合は、ユーザー名とパスワードによる保護を使用することをお勧めします。
Host all all fe80::/10 md5
md5
を指定すると、ユーザー名とパスワードによる保護が引き続き使用されますが、パスワードは読み取り可能な形式で送信されなくなります。ローカルLAN上の人を信頼していないので、おそらくスヌーピング可能なパスワードをネットワーク経由で送信すべきではありません。
PgAdminがその動作をする理由がよくわかりません。私の推奨事項は、彼らのサポートリストで質問し、そのツールの設計に関する情報と、これがバグか機能かを知ることです。 Windowsの名前解決にも関係している可能性があります。回避策として、ipv4アドレスまたは127.0.0.1への接続を指定できるようにする必要があります。
Pg_hba.confの質問に関しては、ipv4とipv6はファイル内の異なるスペースを取得するので、これを追加する必要があることは不思議ではありません。
接続できるようになった今、1つのオプションは、パスワード(ALTER USER "username" WITH PASSWORD 'password'
)。その後、pg_hba.confでipv6スペース全体をmd5に設定でき、それほど心配する必要はありません。また、Windowsドメインを使用している場合は、LDAP、SSPI、またはKerberos 5認証を使用して、ドメインメンバーのみにアクセスを許可できます。ただし、これはやや高度なトピックです。
localhost
に接続しているため、IPv6が使用されています。 localhost
はboth127.0.0.1
および::1
に解決されます。
オペレーティングシステムはIPv4よりもIPv6を優先するため、IPv6が使用されるのはそのためです(ただし、Linuxでは/etc/gai.conf
を使用して構成できます)。アドレス::1
が送信元アドレスとして使用されることはなく、リンクローカルアドレス(2000::/3
)を送信元アドレスとして残すグローバルアドレス(fe80::/10
)もありません。 。
あなたがそれについて考えるとき、すべての完全に論理的で、正常な、予想される行動。