FATAL: no pg_hba.conf entry for host "10.8.86.13", user "fdkjehr_read", database "dwehr", SSL off
时间: 2025-07-26 19:24:39 浏览: 26
<think>我们正在解决PostgreSQL的错误:'FATAL:no pg_hba.conf entryfor host10.8.86.13,user fdkjehr_read, databasedwehr, SSLoff'这个错误通常表示客户端的主机地址没有被配置在pg_hba.conf文件中,因此被拒绝连接。步骤:1.找到pg_hba.conf文件的位置。2.编辑pg_hba.conf文件,添加一条记录允许该主机连接。3.重新加载PostgreSQL配置。详细步骤:1.定位pg_hba.conf文件:通常位于PostgreSQL的数据目录下。可以通过以下方式找到:-在Linux上,运行:`sudo-u postgres psql -c 'SHOWhba_file;'`-在Windows上,可以通过pgAdmin工具查看,或者查看服务属性中的数据目录。2.编辑pg_hba.conf文件:使用文本编辑器打开该文件,添加一行配置。根据错误信息,我们需要允许来自主机10.8.86.13的用户fdkjehr_read访问数据库dwehr,且不使用SSL。配置行的格式通常为:hostdatabaseuseraddressauth-method[auth-options]例如,添加以下行:hostdwehrfdkjehr_read10.8.86.13/32trust或者,如果希望使用密码验证(推荐),可以使用md5或scram-sha-256:hostdwehrfdkjehr_read10.8.86.13/32scram-sha-256注意:10.8.86.13/32表示一个单独的IP地址(32位掩码)。如果希望允许一个网段,可以使用例如10.8.86.0/24。3.重新加载配置:修改pg_hba.conf后,不需要重启数据库,只需要重新加载配置即可:sudo systemctl reloadpostgresql# Linux系统或者在PostgreSQL命令行中执行:SELECTpg_reload_conf();4.测试连接。注意事项:-如果使用密码认证,确保用户fdkjehr_read有正确的密码。-如果连接仍然失败,检查防火墙设置,确保10.8.86.13可以访问PostgreSQL的端口(默认5432)。-如果使用SSL,则错误信息中为“SSLon”,而这里错误是“SSL off”,因此我们配置的是非SSL连接。引用:PostgreSQL官方文档中关于pg_hba.conf的配置[^1]。生成相关问题:1.如何找到PostgreSQL的配置文件?2.pg_hba.conf文件中的认证方法有哪些?3.如何允许特定IP地址访问PostgreSQL数据库?4.修改pg_hba.conf后如何重新加载配置?5.PostgreSQL连接问题排查步骤有哪些?</think>### PostgreSQL "FATAL: no pg_hba.conf entry" 错误解决方案
该错误表示 PostgreSQL 的访问控制文件 `pg_hba.conf` 缺少允许指定主机/用户访问数据库的规则。以下是详细解决步骤:
#### 1. **定位并编辑 pg_hba.conf 文件**
- **查找文件位置**:
```sql
SHOW hba_file; -- 在 psql 中执行
```
或通过配置文件查找:
```bash
sudo find / -name 'pg_hba.conf' 2>/dev/null
```
- **添加访问规则**(使用 root 或 postgres 用户编辑):
```ini
# 允许特定 IP 访问(根据错误信息调整)
host dwehr fdkjehr_read 10.8.86.13/32 scram-sha-256
```
- `dwehr`:目标数据库名
- `fdkjehr_read`:用户名
- `10.8.86.13/32`:客户端 IP(/32 表示单 IP)
- `scram-sha-256`:推荐加密认证方式(也可用 `md5` 或 `trust`)[^1]
#### 2. **重新加载配置**
无需重启服务,执行以下命令生效:
```bash
sudo systemctl reload postgresql # Linux 系统
```
或在 psql 中执行:
```sql
SELECT pg_reload_conf();
```
#### 3. **验证连接**
从客户端(IP: `10.8.86.13`)测试连接:
```bash
psql -h <服务器IP> -U fdkjehr_read -d dwehr
```
#### 4. **其他注意事项**
- **防火墙检查**:确保服务器防火墙开放 5432 端口
```bash
sudo ufw allow from 10.8.86.13 to any port 5432 # Ubuntu 示例
```
- **用户权限**:确认用户拥有数据库访问权限
```sql
GRANT CONNECT ON DATABASE dwehr TO fdkjehr_read;
```
- **SSL 模式**:错误中的 `SSL off` 表示客户端未启用 SSL,如需强制 SSL,在 `postgresql.conf` 中设置:
```ini
ssl = on
```
#### 常见配置示例
| 类型 | 数据库 | 用户 | 地址 | 认证方式 | 用途 |
|------|--------|------|------|----------|------|
| `host` | `dwehr` | `fdkjehr_read` | `10.8.86.13/32` | `scram-sha-256` | 单 IP 访问 |
| `host` | `all` | `all` | `192.168.1.0/24` | `md5` | 整个子网访问 |
| `hostssl` | `prod_db` | `admin` | `0.0.0.0/0` | `cert` | 强制 SSL 连接 |
> **重要**:生产环境避免使用 `trust` 免密认证,优先用 `scram-sha-256` 或 `md5`[^1]。
阅读全文
相关推荐



















