我在从在线源连接到 PostgreSQL 数据库时遇到问题。
PostgreSQL 似乎设置得很好,它在默认端口 5432 上运行,并且 postgresql.conf 有以下行
listen_addresses = '*'
pg_hba.conf 有以下内容
host dbname usname all md5
我可以在 pgadmin 中使用以下凭据从另一台计算机连接到 PostgreSQL 数据库
Name local
Host 192.xx.xx.xx
Port 5432
Maintenance DB dbname
Username usname
Password psword
使用这些我可以完美连接它似乎工作正常。
然后我在ADSL路由器上转发端口192.xx.xx.xx:5432,并使用公共IP地址197.xx.xx.xx(对互联网IP可见)进行检查 http://www.canyouseeme.org/ 我可以看到端口转发正常。
我已经禁用了 SELinux 并暂时禁用了防火墙。
但是,当我尝试使用连接时
Name online
Host 197.xx.xx.xx
Port 5432
Maintenance DB dbname
Username usname
Password psword
我收到服务器不监听错误消息
could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "197.xx.xx.xx" and accepting TCP/IP connections on port 5432?
为什么是这样?我是否需要添加额外的步骤来使其通过端口转发接受连接?
答案1
all
host
在 中某行的 CIDR 字段中无效pg_hba.conf
。
来自默认文件本身的注释pg_hba.conf
:
# 主机数据库用户 CIDR 地址方法 [选项]
和
CIDR-ADDRESS 指定记录匹配的主机集。它由 IP 地址和 CIDR 掩码组成,CIDR 掩码是一个整数(介于 0 和 32 (IPv4) 或 128 (IPv6) 之间),指定掩码中有效位数。或者,您可以在单独的列中写入 IP 地址和网络掩码来指定主机集。
试试这个:
host dbname usname 197.xx.xx.xx/32 md5
这将允许仅从远程主机 197.xx.xx.xx 从 usname 连接到 dbname
如果要允许整个 197.xx.xx /24 子网,请使用:
host dbname usname 197.xx.xx.0/24 md5