在 IPv6 地址上拒绝 Postgres 连接访问

Raf*_*ian 11 postgresql authentication postgresql-9.1

在 Windows 上安装了 PostgreSQL 9.1 x64,设置了一个监听地址,但是在与 pgAdmin 连接时出现以下错误。不知道为什么 PostgreSQL 看到的是我的 IPv6 地址而不是我的常规 IP 地址:

在此处输入图片说明

为了让身份验证工作,根据错误消息,我更新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
Run Code Online (Sandbox Code Playgroud)

我让这个工作了,它涵盖了整个 IPv6 地址空间,但是如何指定 IPv6 范围以获得更多限制?

host  mydb  myuser  ::/0   trust
Run Code Online (Sandbox Code Playgroud)

问题

  • 为什么 pgAdmin 选择我的 IPv6 地址而不是我的普通 IP?
  • 如何在不诉诸于 IPv6 的情况下指定范围::/0

小智 19

以 开头的 IPv6 地址fe80:是链路本地地址。它们不能跨不同的子网或 Internet 进行路由。它们仅用于连接到同一 LAN 的机器之间的通信。链路本地范围定义为fe80::/10。如果您信任本地 LAN 上的每个人,那么您可以这样做

host  all  all  fe80::/10  trust
Run Code Online (Sandbox Code Playgroud)

如果您不信任本地 LAN 上的每个人,那么您可能想要使用用户名+密码保护:

host  all  all  fe80::/10  md5
Run Code Online (Sandbox Code Playgroud)

指定时md5您仍然使用用户名+密码保护,但密码不再以可读格式传输。由于您不信任本地 LAN 上的人,因此您可能也不应该通过网络发送可窥探的密码。