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 的相关部分,逐行分析。

相关推荐
zlwool6 小时前
图纸管理选型避坑指南
数据库·erp·设备erp·非标机械
小灰灰搞电子7 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
软件聚导航9 小时前
「聚小软 AI 助手」技术升级:从数据库检索到 RAG 知识库问答
前端·数据库·mysql·微信小程序·小程序·ai编程·rag
学习星球9 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
GoppViper10 小时前
RDF资源描述框架深度解析:语义Web的数据基石与实战逻辑
前端·数据库
2601_9621741710 小时前
Redis 简介
数据库·redis·wpf
夜雪一千10 小时前
MySQL 各种数据同步方案全梳理:从简单复制到异构同步实战
数据库·mysql
xuefuhe11 小时前
PostgreSQL源码1:select 1
postgresql
Highcharts.js12 小时前
Highcharts 下钻(Drilldown)柱状图 Demo
数据库·信息可视化·hbase·highcharts·drilldown·js模块·下钻图表
翼龙云_cloud12 小时前
阿里云国际渠道代理商:如何在ECS上部署Flask应用?
运维·数据库·阿里云·flask·云计算