如何在Debian的Postgres 10中使用scram-sha-256?出现“FATAL:password authentication failed”错误。

15

我编辑了pg_hba.conf文件:

sudo su postgres
nano /etc/postgresql/10/main/pg_hba.conf

并添加了这行:

local   all             username                               scram-sha-256

在那个文件中,我把所有的md5都改成了scram-sha-256

作为postgres用户,我创建了一个拥有超级用户权限的新用户:

sudo su postgres
psql

CREATE USER username WITH SUPERUSER PASSWORD 'password';

然后我重新启动了Postgres:

/etc/init.d/postgresql restart

我曾尝试使用pgAdmin4登录,更改了数据库连接属性下的用户名。但是psql -U username testdb < ./testdb.sql和这种方式都不起作用,因为我收到以下消息:

致命错误:用户“username”的密码验证失败

那么如何在我的Debian9/KDE机器上使用scram-sha-256使Postgres工作?当我将所有的md5保留在pg_hba.conf中时,它之前是可以工作的。


或者如果已经配置了日志记录,您将在日志中看到:DETAIL: 用户“foouser”没有有效的SCRAM验证器。 的确,让PostgreSQL配置为实际以正确的格式存储这些哈希值是有意义的。 - David Tonhofer
如何从md5升级到scram-sha-256的简单逐步教程 - Mateech
2个回答

21

官方手册 中提到:

如果确保所有客户端库都支持 SCRAM 并且新版本的密码验证方式 scram-sha-256 已经生效,你可以将 postgresql.conf 中的 password_encryption 参数设置为 scram-sha-256,然后让所有用户设置新密码,并在 pg_hba.conf 中修改认证方法规范为 scram-sha-256 以升级现有的 md5 安装。


1
我记得的另一个问题是,用户必须使用已添加对 SCRAM 协议支持的连接库/驱动程序。也许楼主的 psql 支持 SCRAM,但他们的 pgAdmin 不支持? - Basil Bourque
1
在postgresql.conf文件中设置了'scram-sha-256',重新启动postgresql并ALTER用户后,它可以正常工作。我没有在配置文件中设置它,因为这不是从MD5升级到SCRAM,而是一个新的安装,并且password_encryption行被注释掉了。在重新启动postgresql之前ALTER用户时,我也遇到了同样的错误。这确实很清楚;但也许把它移到“scram-sha-256”部分会是个好主意,因为我期望加密方法的任何信息都应该在那里。 - mYnDstrEAm

0

同时检查当前密码哈希格式:

postgres=# select passwd from pg_shadow where usename='username';
passwd
--------------
md5...

postgres=# set password_encryption = 'scram-sha-256';
SET
postgres=# alter user username with password 'secretpass';
ALTER ROLE
postgres=# select passwd from pg_shadow where usename='username';
passwd
--------------------------
SCRAM-SHA-256$...
(1 row)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接