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.conf 和 postgresql.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的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL用户密码如何通过md5加密存储,是否加了salt