我正在尝试配置我的 Postgres 实例,以便只有本地计算机和我的计算机(通过互联网)才能访问数据库。该postgresql.conf
文件有一个参数listen_addresses
,可用于设置授予访问权限的 IP 地址列表。
所以我将其设置为,listen_addresses 'localhost,a.b.c.d'
这意味着它将授予访问权限localhost
,a.b.c.d
也就是我的 IP 地址。但在这种情况下,它只授予本地主机的访问权限。
listen_addresses 'a.b.c.d'
也不起作用。我仔细检查了互联网 IP 地址,但它是正确的。我试过了
listen_addresses 'localhost' // works only for local machine.
listen_addresses '*' // works for both local and my machine
listen_addresses 'localhost,a.b.c.d' // does not work for my machine
listen_addresses 'a.b.c.d' // does not work for my machine
所以我这里遗漏了什么吗?
答案1
您对监听地址的概念的理解是错误的。
listen_addresses
是运行 PostgreSQL 的服务器上的接口的 IP 地址列表,可用于连接 PostgreSQL 服务。
例如,您的 PostgreSQL 服务器具有 IP 地址192.168.10.1
,您指定:
listen_addresses 'localhost,192.168.10.1';
这意味着所有可以到达 IP 地址的客户端都192.168.10.1
可以连接到 PostgreSQL 服务器。
如果您想通过连接客户端的 IP 地址来限制连接,那么您有两个选择:
- 使用 PostgreSQL 的基于主机的访问机制对连接应用 IP 限制使用
pg_hba.conf
。 看客户端身份验证。 - 添加防火墙规则,阻止除您想要允许的 IP 地址之外的所有 IP 地址连接到 PostgreSQL 端口。