1

我能够获得 SCRAM-SHA-256 身份验证以与 pgpool 一起使用,但我无法找到一个很好的示例如何在 pgbouncer 中进行设置。我正在尝试使用 auth_query。在 postgres 中,pgbouncer 将连接的用户将密码加密并存储在 SCRAM-SHA-256 中。但我不知道如何在 userlist.txt 中创建条目。这应该是格式:

SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey>

存储密钥和服务器密钥到底是什么,我如何生成它们?我可以使用哪些工具来创建它?在 pgpool 中,我可以使用 pg_enc,但我没有看到任何 pgbouncer。

4

1 回答 1

1

您不需要自己构建 SCRAM 哈希密码,您可以通过查询pg_authidPostgreSQL 数据库中的表来获取它:

SELECT rolpassword
FROM pg_authid
WHERE rolname = 'pgbouncer';

但是,正如文档所述

存储在身份验证文件中的密码或机密有两个用途。首先,如果配置了基于密码的身份验证方法,它们用于验证传入客户端连接的密码。其次,如果后端服务器需要基于密码的身份验证(除非直接在数据库的连接字符串中指定密码),它们将用作到后端服务器的传出连接的密码。如果密码以纯文本或 MD5 散列形式存储,则后者有效。SCRAM 机密只能用于登录服务器,前提是客户端身份验证也使用 SCRAM,PgBouncer 数据库定义未指定用户名,并且 PgBouncer 和 PostgreSQL 服务器中的 SCRAM 机密相同(相同的盐和迭代,而不仅仅是相同的密码)。

因此,如果该用户用作auth_user,则不能为该用户使用 SCRAM 散列密码,但必须使用明文密码。

于 2021-10-07T04:20:43.303 回答