PostgreSQL 将密码加密从 SCRAM 降级为 md5

Posted

技术标签:

【中文标题】PostgreSQL 将密码加密从 SCRAM 降级为 md5【英文标题】:PostgreSQL downgrade password encryption from SCRAM to md5 【发布时间】:2021-07-19 18:17:27 【问题描述】:

我需要将用户 postgres 的密码加密从 scram-sha-265 降级为 md5

我尝试修改 pg_hba.confpostgresql.conf 文件,将密码加密从 scram-sha-256 更改为 md5 但之后我无法连接到数据库。

我正在使用 PostgreSQL 13 和 PgAdmin 4 v5。

感谢您的帮助和建议!

PS:我必须这样做,因为 RStudio 无法使用 scram 身份验证管理连接。

【问题讨论】:

你遇到了什么错误?日志文件说了什么? 错误是 postgresqlNewConnection(drv, ...) 中的错误:RS-DBI 驱动程序:(无法在 dbname“progetto_bd”上连接 postgres@127.0.0.1:5432:SCRAM 身份验证需要libpq 版本 10 或以上) 我很确定库版本在10以上 但是错误信息很确定它不是。我认为我们可以在这里处理错误消息。我看过很多次,从不知道它是错的。 【参考方案1】:

您需要重新加载数据库,然后再次设置用户的密码(可能使用超级用户帐户),以便用户再次拥有经过 MD5 哈希处理的密码。使用psql 以超级用户身份连接到数据库,然后:

SELECT pg_reload_conf();

-- to verify the settings are like you want:

SHOW password_encryption;
SELECT * FROM pg_hba_file_rules();

-- change the password

\password myuser

【讨论】:

你能更精确一点吗?谢谢:) 我已经扩展了我的答案。 感谢您的回答。登录到 psql 后,我一一尝试了这些行,但除了“\password myuser”之外,什么都没有返回给我。这正常吗?同样对于“myuser”,它告诉我角色“myuser”不存在;所以我尝试了“postgresql”仍然无法正常工作......请问有什么建议吗? @Helene 你忘了分号。【参考方案2】:

我按照以下步骤解决了:

在文件 postgresql.conf

中将 password_encryption 更改为 md5

在文件 pg_hba.conf

中将 scram-sha-256 的前 3 次出现更改为 trust
# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

重启postgresql服务

执行psql -U postgres(不会要求你输入密码)

使用命令更改密码/password

在文件 pg_hba.conf

中将 trust 的前 3 次出现更改为 md5
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

重启postgresql服务

【讨论】:

以上是关于PostgreSQL 将密码加密从 SCRAM 降级为 md5的主要内容,如果未能解决你的问题,请参考以下文章

pgbouncer 和 scram-sha-256 设置

PostgreSQL用户密码如何通过md5加密存储,是否加了salt

如何使用 PostgreSQL 加密密码?

使用 md5 加密密码而不是明文密码登录 PostgreSQL

在 PostgreSQL 中使用加密密码创建用户

python2.7 + pymongo:错误:使用 SCRAM-SHA-256 需要未消化的密码