You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu22.04升级后pg_connect认证失败:pg_hba.conf的md5/trust问题

解决PostgreSQL md5认证失败问题(Ubuntu 22.04 + PHP)

核心问题分析

Ubuntu 22.04默认搭载的PostgreSQL版本(多为14及以上),默认密码加密方式是scram-sha-256;而你之前在Ubuntu 20.04上用的PostgreSQL 12依赖md5加密。即使修改password_encryption配置,已存在用户的密码哈希不会自动转换,这是导致认证失败的核心原因。另外PHP 7.3对SCRAM加密的支持有限,进一步加剧了md5认证流程的不匹配。

分步解决

1. 配置PostgreSQL默认密码加密为md5

编辑postgresql.conf,取消password_encryption的注释并设置为md5:

password_encryption = md5

修改后重启PostgreSQL服务:

sudo systemctl restart postgresql

2. 重置用户密码生成md5格式哈希

现有用户的密码是SCRAM格式,必须重新设置密码,让PostgreSQL生成md5哈希:

ALTER USER "sws****" WITH PASSWORD '你的用户密码';

执行该SQL前,确保已完成第一步的配置重启,保证新密码按md5规则生成。

3. 恢复pg_hba.conf的md5认证规则

将之前改为trust的行改回md5:

host    all                   all     0.0.0.0/0       md5

修改后重载PostgreSQL配置(无需重启服务):

sudo systemctl reload postgresql

4. 验证PHP连接

用简单代码测试pg_connect是否正常工作:

<?php
$conn = pg_connect("host=localhost dbname=你的数据库名 user=sws**** password=你的用户密码");
if (!$conn) {
    echo "连接失败: " . pg_last_error();
} else {
    echo "连接成功";
    pg_close($conn);
}
?>

补充说明

  • 若后续升级PHP到8.x版本,其对SCRAM-SHA-256的支持更完善,但作为教学场景,md5更适合演示基础认证逻辑,同时要向学生强调trust认证的安全风险,明确生产环境绝对禁用该方式。

内容的提问来源于stack exchange,提问作者Steven Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 16:37:09