遇到的错误:
致命错误: 没有用于主机 "11.22.33.44", 用户 "postgres", 数据库 "postgres", no encryption 的 pg_hba.conf 记录
这是 PostgreSQL 的 客户端认证失败 错误,说明 PostgreSQL 服务器拒绝了来自 IP 11.22.33.44 的连接请求,因为 pg_hba.conf 文件中没有允许该客户端连接的规则。
✅ 问题原因
PostgreSQL 默认只允许本地连接(localhost 或 127.0.0.1),不允许远程连接 。你试图从远程机器(IP 11.22.33.44)连接到 PostgreSQL,但服务器的 pg_hba.conf 没有配置允许这个 IP 的访问规则。
✅ 解决方案(分步操作)
🔧 第一步:找到 pg_hba.conf 文件
在 Windows 11 上,PostgreSQL 的配置文件通常位于:
<TEXT>
C:\Program Files\PostgreSQL\<版本号>\data\pg_hba.conf
例如:
<TEXT>
C:\Program Files\PostgreSQL\16\data\pg_hba.conf
💡 如果你不确定安装路径,可以在命令行运行:
<CMD>
pg_config --datadir或者在 PostgreSQL 服务中右键 → 属性 → 查看"可执行路径",路径的上一级就是
data目录。
🔧 第二步:编辑 pg_hba.conf
用 管理员权限 打开 pg_hba.conf(推荐使用 Notepad++ 或 VSCode,避免用记事本导致编码问题)。
在文件末尾添加一行,允许你的客户端 IP 连接:
✅ 推荐配置(允许指定 IP,使用密码认证):
<CONF>
# TYPE DATABASE USER ADDRESS METHOD
host postgres postgres 11.22.33.44/32 md5
✅ 解释:
host:TCP/IP 连接postgres:目标数据库postgres:目标用户11.22.33.44/32:只允许这个 IP(/32 表示单个 IP)md5:使用密码加密认证(推荐,比trust更安全)
🚫 不推荐(仅用于测试):
<CONF>
host all all 0.0.0.0/0 trust
⚠️ 这会允许所有 IP 无密码连接,极其危险,仅限测试环境临时使用!
✅ 更安全的建议(允许整个局域网):
<CONF>
host postgres postgres 11.22.33.0/24 md5
允许
11.22.33.x网段的所有机器连接。
🔧 第三步:修改 postgresql.conf 允许远程连接
打开同一目录下的:
<TEXT>
C:\Program Files\PostgreSQL\<版本号>\data\postgresql.conf
找到以下行:
<CONF>
#listen_addresses = 'localhost'
修改为:
<CONF>
listen_addresses = '*'
✅
*表示监听所有网络接口(包括外网)✅ 你也可以写成:
listen_addresses = 'localhost,11.22.33.44'(仅监听特定IP)
🔧 第四步:重启 PostgreSQL 服务
- 按
Win + R,输入services.msc - 找到服务:PostgreSQL x64 16(版本号可能不同)
- 右键 → 重启
💡 重启后,配置才会生效!
🔧 第五步:检查防火墙
确保 Windows 防火墙允许 PostgreSQL 的端口(默认是 5432)入站:
- 打开 Windows Defender 防火墙 → 高级设置
- 入站规则 → 新建规则
- 类型:端口 → TCP → 特定本地端口:
5432 - 允许连接 → 命名如 "PostgreSQL Remote Access"
- 完成
如果你在公司网络或云服务器(如阿里云、腾讯云),还需检查安全组/网络ACL是否开放了 5432 端口。
🔧 第六步:测试连接
在客户端机器(IP 11.22.33.44)上使用 psql 或其他工具连接:
<BASH>
psql -h 10.194.227.76 -U postgres -d postgres
⚠️ 确保你已经为
postgres用户设置了密码!如果没设,先登录本地连接设置:<SQL>
ALTER USER postgres PASSWORD 'your_strong_password';
✅ 验证是否成功
-
在服务器端运行:
<BASH>
netstat -an | findstr 5432应该看到类似:
<TEXT>
TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING(说明监听了所有 IP)
-
用
telnet或Test-NetConnection测试端口是否可达:<POWERSHELL>Test-NetConnection 10.194.227.76 -Port 5432
🔐 安全建议
| 项目 | 建议 |
|---|---|
pg_hba.conf |
不要用 trust,用 md5 或 scram-sha-256 |
listen_addresses |
不要设为 *,除非必要,尽量指定 IP |
| 用户权限 | 不要让 postgres 用户远程登录,建议创建专用用户 |
| 加密 | 使用 SSL(可选,生产环境强烈推荐) |
| 防火墙 | 仅开放必要 IP 的 5432 端口 |
✅ 总结:快速修复步骤
| 步骤 | 操作 |
|---|---|
| 1 | 编辑 pg_hba.conf,添加:host postgres postgres 11.22.33.44/32 md5 |
| 2 | 编辑 postgresql.conf,设置:listen_addresses = '*' |
| 3 | 重启 PostgreSQL 服务 |
| 4 | 开放 Windows 防火墙 5432 端口 |
| 5 | 确保 postgres 用户有密码 |
| 6 | 从客户端测试连接 |
完成以上步骤后,远程连接问题就能解决!
如果仍有问题,请查看 pg_hba.conf 的相关部分,逐行分析。