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

PostgreSQL通过Flyway创建加密密码用户认证失败求助

问题分析与解决方法

核心错误原因

你用sha256sum生成的哈希和PostgreSQL要求的SCRAM-SHA-256哈希完全不是一回事。SCRAM-SHA-256不是简单对密码做SHA256哈希,它是一种加盐的哈希算法,包含盐值、迭代次数、客户端/服务器密钥等多部分信息,格式为SCRAM-SHA-256$<迭代次数>:<盐值>$<客户端密钥哈希>:<服务器密钥哈希>,普通SHA256哈希根本不满足这个格式,所以认证必然失败。

正确的处理方式

方法1:让PostgreSQL生成合法的SCRAM哈希(推荐)

直接在PostgreSQL服务器上生成目标用户的加密密码,再把哈希值复制到Flyway脚本:

  1. 登录PostgreSQL命令行:
psql -U postgres -d your_database
  1. 执行命令创建/更新用户(替换your_user和Password!为实际值):
CREATE USER your_user WITH ENCRYPTED PASSWORD 'Password!';
-- 若用户已存在,用ALTER语句
-- ALTER USER your_user WITH ENCRYPTED PASSWORD 'Password!';
  1. 查询系统表获取生成的完整SCRAM哈希:
SELECT rolpassword FROM pg_roles WHERE rolname = 'your_user';
  1. 把查询到的哈希值(格式类似SCRAM-SHA-256$4096:abc123...$def456...:ghi789...)复制到Flyway脚本:
CREATE USER your_user WITH ENCRYPTED PASSWORD 'SCRAM-SHA-256$4096:abc123...$def456...:ghi789...';

方法2:用pgcrypto函数自动化生成哈希

如果需要自动化生成,可借助PostgreSQL的pgcrypto扩展:

  1. 先启用扩展:
CREATE EXTENSION IF NOT EXISTS pgcrypto;
  1. 生成合规的SCRAM哈希:
SELECT scram_build('Password!');

返回的结果可直接复制到Flyway脚本中使用。

关键注意点

  • 不要手动构造SCRAM哈希格式,哪怕加了SCRAM-SHA-256前缀,缺少盐和迭代次数等核心参数也无法通过认证。
  • Flyway脚本中使用哈希时,必须用单引号包裹完整的哈希字符串,且不能修改哈希的任何部分。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 20:03:18