PGSSLMODE=allow pg_dump执行无效 连接PostgreSQL提示需SSL连接
PostgreSQL pg_dump SSL连接报错解决方案
报错核心信息:
pg_dump: error: connection to database "schema_name" failed: FATAL: SSL connection is required. Please specify SSL options and retry. FATAL: no pg_hba.conf entry for host "x.x.x.x", user "admin", database "schema_name", SSL on
1 修正客户端SSL连接参数
远程服务器强制要求SSL连接,你当前设置的PGSSLMODE=allow规则为优先尝试非SSL连接,失败才会切换SSL连接,不符合服务端要求,需调整为强制SSL模式:
调整后的命令参考:
PGSSLMODE=require pg_dump -h <远程主机地址> -p 5432 -U admin -d <你的实际数据库名> <你需要的表过滤等其他参数>
注意:原有命令缺少-U指定用户名、-d指定数据库名参数,默认会读取你当前操作系统用户名作为数据库用户名,匹配同名的默认数据库,极易出现匹配错误
2 修复服务端pg_hba.conf访问规则
第二个报错明确说明开启SSL后,你的客户端IP、用户名、目标数据库没有匹配的访问规则,需要登录PostgreSQL服务端操作:
- 找到pg_hba.conf配置文件,常见路径为
/var/lib/postgresql/<PG版本号>/main/pg_hba.conf(Debian/Ubuntu系)或/var/lib/pgsql/<PG版本号>/data/pg_hba.conf(RHEL/CentOS系) - 在配置文件靠前位置新增匹配规则:
如需放开该IP下所有库所有用户的SSL访问权限,可以写成:hostssl <你的数据库名> admin <你的客户端IP>/32 scram-sha-256hostssl all all <你的客户端IP>/32 scram-sha-256 - 保存配置后重载PostgreSQL服务,无需重启实例即可生效:
数据库内执行:SELECT pg_reload_conf();
系统级执行:systemctl reload postgresql
3 可选:客户端SSL证书配置
如果完成前两步后仍然报错,说明服务端要求验证客户端SSL证书,需要在命令中补充证书路径参数:
PGSSLMODE=verify-full PGSSLROOTCERT=<根证书路径> PGSSLCERT=<客户端公钥路径> PGSSLKEY=<客户端私钥路径> pg_dump -h <远程主机地址> -p 5432 -U admin -d <你的实际数据库名>
注意事项
- pg_hba.conf规则按照从上到下的顺序匹配,新增的规则必须放在所有拒绝你访问的规则之前才会生效
- 生产环境不建议配置0.0.0.0/0作为允许访问的IP段,避免数据库暴露风险
- 如果你的客户端IP为动态IP,可以替换为对应网段,例如
192.168.1.0/24
内容的提问来源于stack exchange,提问作者GhostProgrammer
相关产品推荐
相关产品推荐

