postgresql数据库连接问题

遇到的错误:

致命错误: 没有用于主机 "11.22.33.44", 用户 "postgres", 数据库 "postgres", no encryption 的 pg_hba.conf 记录

这是 PostgreSQL 的 客户端认证失败 错误,说明 PostgreSQL 服务器拒绝了来自 IP 11.22.33.44 的连接请求,因为 pg_hba.conf 文件中没有允许该客户端连接的规则。


✅ 问题原因

PostgreSQL 默认只允许本地连接(localhost127.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 服务

  1. Win + R,输入 services.msc
  2. 找到服务:PostgreSQL x64 16(版本号可能不同)
  3. 右键 → 重启

💡 重启后,配置才会生效!


🔧 第五步:检查防火墙

确保 Windows 防火墙允许 PostgreSQL 的端口(默认是 5432)入站:

  1. 打开 Windows Defender 防火墙 → 高级设置
  2. 入站规则 → 新建规则
  3. 类型:端口 → TCP → 特定本地端口:5432
  4. 允许连接 → 命名如 "PostgreSQL Remote Access"
  5. 完成

如果你在公司网络或云服务器(如阿里云、腾讯云),还需检查安全组/网络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';

✅ 验证是否成功

  1. 在服务器端运行:

    <BASH>

    复制代码
    netstat -an | findstr 5432

    应该看到类似:

    <TEXT>

    复制代码
    TCP 0.0.0.0:5432 0.0.0.0:0 LISTENING

    (说明监听了所有 IP)

  2. telnetTest-NetConnection 测试端口是否可达:

    复制代码
    <POWERSHELL>
    复制代码
    Test-NetConnection 10.194.227.76 -Port 5432

🔐 安全建议

项目 建议
pg_hba.conf 不要用 trust,用 md5scram-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 的相关部分,逐行分析。

相关推荐
8Qi810 小时前
Redis哨兵模式(Sentinel)深度解析
java·数据库·redis·分布式·缓存·sentinel
数据库小组10 小时前
从业务库到实时分析库,NineData 构建 MySQL 到 SelectDB 同步链路
数据库·mysql·数据库管理工具·数据同步·ninedata·数据库迁移·selectdb
CDN36011 小时前
CDN HTTPS 证书配置失败?SSL 部署与域名绑定常见问题
数据库·https·ssl
Chengbei1111 小时前
一次比较简单的360加固APP脱壳渗透
网络·数据库·web安全·网络安全·系统安全·网络攻击模型·安全架构
寒秋花开曾相惜11 小时前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
mcooiedo11 小时前
mybatisPlus打印sql配置
数据库·sql
wudl556611 小时前
MySQL 8.0.42 Docker 开发部署手册
数据库·mysql·docker
xhuiting11 小时前
MySQL专题总结(四)—— 高可用
java·数据库·mysql
kjmkq11 小时前
目工业级宽温SSD哪个品牌不掉盘最稳定?宽温环境下的稳定性性技术解析
数据库·存储
Predestination王瀞潞11 小时前
Java EE3-我独自整合(第二章:Spring IoC 入门案例)
数据库·spring·java-ee