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

如何解决DBeaver连接Docker PostgreSQL容器时的SCRAM认证错误?

PostgreSQL容器升级后SCRAM认证失败解决方法

问题原因

PostgreSQL 12及更早版本默认使用MD5哈希存储用户密码,而PostgreSQL 14+版本默认启用SCRAM-SHA-256作为密码认证机制。你从旧库导入数据后,用户的密码哈希仍为MD5格式,但新容器的pg_hba.conf配置要求使用SCRAM认证,导致密码验证失败,出现以下错误:

FATAL: password authentication failed for user "[USERNAME]"
DETAIL: User "[USERNAME]" does not have a valid SCRAM secret.
Connection matched pg_hba.conf line 100: "host all all all scram-sha-256"

解决方案

方法一:更新用户密码为SCRAM格式(推荐,更安全)

  1. 进入运行中的PostgreSQL容器:
docker exec -it [你的PostgreSQL容器名/ID] psql -U [USERNAME] -d [DATABASENAME]
  1. 在psql交互终端中执行命令重置密码(会自动转为SCRAM格式):
ALTER USER [USERNAME] WITH PASSWORD '[PASSWORD]';
  1. 退出psql后,重新用DBeaver连接即可正常登录。

方法二:临时修改pg_hba.conf允许MD5认证(过渡方案)

如果暂时不想更新密码,可以修改认证规则兼容MD5:

  1. 进入容器编辑pg_hba.conf文件:
docker exec -it [你的PostgreSQL容器名/ID] vi /var/lib/postgresql/data/pg_hba.conf
  1. 找到以下配置行:
host all all all scram-sha-256

将其修改为:

host all all all md5
  1. 重启PostgreSQL容器使配置生效:
docker restart [你的PostgreSQL容器名/ID]

注意:此方法仅作为临时过渡,长期使用建议切换到SCRAM认证以提升安全性。

方法三:初始化新容器时指定MD5认证(未导入数据时使用)

如果新容器尚未导入数据,可以在docker-compose.yml中添加环境变量指定初始化时使用MD5认证:

version: "3.7"

services:
  postgres:
    image: postgres:15-alpine
    environment:
      - POSTGRES_USER=[USERNAME]
      - POSTGRES_PASSWORD=[PASSWORD]
      - POSTGRES_DB=[DATABASENAME]
      - POSTGRES_INITDB_ARGS="--auth-host=md5"
    volumes:
      - ./volumes/postgres-15:/var/lib/postgresql/data
    restart: always
    ports:
      - "127.0.0.1:5432:5432"

启动容器后再导入数据,即可避免认证不兼容问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:50:23