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

程序可连接PostgreSQL 13但PGAdmin连接失败求助

问题描述

我的程序通过以下参数可正常连接本地PostgreSQL 13服务器:

username = Juan
password = <十六进制格式的密码>
host = localhost
port = 5432
dbname = madrid
schema = huv_2.9
sslmode = allow

但使用PGAdmin创建服务器连接时被拒绝,PGAdmin弹出提示:

Please enter the password for the user 'Juan' to connect the server - "PostgreSQL 13"

输入哈希、加密或明文密码均无效。我认为这和需要从scram-sha-256切换为md5的情况类似。

请问:

  1. 为什么无法让PGAdmin像程序一样连接本地服务器(规避scram-sha-256与md5的问题)?
  2. 为什么PGAdmin无法忽略C:\Program Files\PostgreSQL\13\Data下的配置文件,而我的程序可以?

问题分析与解决

核心原因

你的程序能正常连接,大概率是因为它直接发送了十六进制格式的密码哈希值,绕过了PostgreSQL的标准认证流程——相当于跳过了md5/scram的协商环节,直接提交了数据库存储的哈希结果;而PGAdmin是严格遵循PostgreSQL认证逻辑的客户端,它会先和服务器协商认证方式(scram-sha-256或md5),再要求你输入明文密码,之后按照协商好的算法加密后发送给服务器,这和你的程序连接逻辑完全不同。

关于配置文件的差异:PostgreSQL的标准客户端(包括PGAdmin)默认会读取系统级配置文件(比如pg_hba.conf、postgresql.conf)来确认认证规则;你的程序应该是硬编码了所有连接参数,且没有加载任何外部配置文件,所以看起来像是“忽略”了配置;而PGAdmin作为标准化工具,会严格遵循PostgreSQL的客户端配置逻辑,不会跳过这些文件。

解决办法

  1. 修改PostgreSQL认证方式适配PGAdmin:

    • 打开C:\Program Files\PostgreSQL\13\Data\pg_hba.conf文件
    • 找到本地连接对应的行(通常是host all all 127.0.0.1/32 scram-sha-256)
    • 将scram-sha-256改为md5,保存文件
    • 重启PostgreSQL 13服务
    • 之后在PGAdmin中输入明文密码即可正常连接
  2. 模拟程序连接逻辑(不推荐):
    这种方式需要修改PGAdmin源码或自定义连接字符串,操作复杂且存在安全风险,优先推荐第一种方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 03:07:12