0

0

php连接postgresql提示认证失败_php连pg认证问题解决【方案】

蓮花仙者

蓮花仙者

发布时间:2026-01-27 09:27:40

|

132人浏览过

|

来源于php中文网

原创

pg_connect()报authentication failed的主因是pg_hba.conf中host规则未匹配PHP连接的IP+用户+数据库组合、localhost被解析为::1而配置仅含127.0.0.1/32、密码错误或用户无LOGIN权限、服务未重载配置、PHP连接串触发peer而非md5认证、scram-sha-256密码加密与旧版PHP不兼容。

php连接postgresql提示认证失败_php连pg认证问题解决【方案】

pg_connect() 报错 authentication failed 的常见原因

不是密码错了就是认证方式不匹配。PostgreSQL 默认启用 peermd5 认证,而 PHP 用 pg_connect() 连接时默认走 TCP(localhost 解析为 127.0.0.1),这时 pg 实际查的是 host 行的规则,而非 local 行 —— 很多人改了 local 却没动 host,导致白忙活。

  • pg_hba.confhost 规则未覆盖 PHP 所用的 IP+用户+数据库组合
  • PHP 连接串用了 localhost,但 PostgreSQL 把它解析成 IPv6 的 ::1,而 pg_hba.conf 只写了 127.0.0.1/32
  • 用户密码确实不对,或该用户没被赋予登录权限(ALTER USER xxx WITH LOGIN;
  • PostgreSQL 服务没重载配置:sudo systemctl reload postgresqlpg_ctl reload

连接串写法直接影响认证路径

PHP 的 pg_connect() 参数顺序和关键字很关键。用 host=localhosthost=127.0.0.1 在 pg 看来是两条不同规则;前者可能触发 peer(仅限 Unix socket),后者强制走 TCP + md5

  • 要确保走 TCP 并用密码:显式写 host=127.0.0.1 port=5432 user=xxx password=yyy dbname=zzz
  • 避免只写 host=localhost,除非你确认 pg_hba.conf 有对应 host ... localhost 规则
  • 测试连通性优先用命令行:psql -h 127.0.0.1 -U your_user -d your_db,成功了再调 PHP

pg_hba.conf 必须匹配的三要素

每一行规则必须同时满足「连接方式 + 客户端地址 + 数据库 + 用户」才生效。漏掉任意一个,就 fallback 到下一行,最终可能落到 reject

  • 加一行明确的 host 规则,例如:host all all 127.0.0.1/32 md5开发环境够用)
  • 如果 PHP 和 PostgreSQL 不在同一机器,把 127.0.0.1/32 换成实际来源 IP 或网段,如 192.168.1.0/24
  • 修改后必须重载,SELECT pg_reload_conf(); 也行,但要注意权限
  • 检查当前生效规则:sudo -u postgres psql -c "SELECT * FROM pg_hba_file_rules();"

密码加密方式不兼容也会失败

PostgreSQL 10+ 默认用 scram-sha-256 加密存储密码,但老版本 PHP 的 pgsql 扩展(尤其 php7.4 及更早)不支持该机制,会静默降级失败。

Etna
Etna

Etna:用文字做AI世界的造物主

下载

立即学习PHP免费学习笔记(深入)”;

  • 临时方案:在 postgresql.conf 中设 password_encryption = md5,然后 ALTER USER xxx WITH PASSWORD 'yyy';
  • 长期方案:升级 PHP 到 8.0+,并确认 pgsql 扩展编译时链接了足够新版本的 libpq
  • 验证密码加密方式:SELECT rolname, rolpassword FROM pg_authid WHERE rolname = 'your_user';,若含 SCRAM-SHA-256 字样即为新格式

实际调试时,最省时间的做法是先关掉所有干扰:临时把 pg_hba.conf 最上面加一行 host all all 127.0.0.1/32 trust,确认 PHP 能连上,再逐步收紧规则。很多人卡在以为问题出在代码,其实只是配置没对齐。

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

158

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

978

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

199

2023.11.16

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有l、d、d5、di、ds、dv、df、dn、db、dg、dp、c、pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

269

2023.11.20

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

356

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2078

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

348

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

256

2023.09.05

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

9

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 9.6万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号