我能够让SCRAM-SHA-256身份验证与pgpool一起工作,但我还没有找到一个很好的示例来在pgbouncer中设置它。我在试着用auth_query。在postgres中,pgbouncer将连接的用户具有加密的密码并存储在SCRAM-SHA-256中。但是我不知道如何在userlist.txt中创建条目。应该是这样的格式:
SCRAM-SHA-256$<iterations>:<salt>$<storedkey>:<serverkey>
storedkey和serverkey到底是什么,我如何生成它们?我可以使用哪些工具来创建它?在pgpool中,我可以使用pg_enc,但我没有看到pgbouncer的任何东西。
发布于 2021-10-07 04:20:43
您不需要自己构造SCRAM散列密码,您可以通过查询PostgreSQL数据库中的pg_authid
表来获得它:
SELECT rolpassword
FROM pg_authid
WHERE rolname = 'pgbouncer';
然而,正如the documentation所说:
身份验证文件中存储的密码或密码有两个用途。首先,如果配置了基于密码的身份验证方法,则它们用于验证传入客户端连接的密码。其次,如果后端服务器需要基于密码的身份验证(除非直接在数据库的连接字符串中指定密码),则将它们用作到后端服务器的传出连接的密码。如果密码以纯文本或MD5哈希形式存储,则后一种方法有效。如果客户端身份验证也使用SCRAM,PgBouncer数据库定义没有指定用户名,并且SCRAM密钥在PgBouncer和PostgreSQL服务器中是相同的(相同的盐和迭代,而不仅仅是相同的密码),则SCRAM密钥只能用于登录到服务器。这是由于SCRAM的固有安全属性造成的:存储的SCRAM密钥本身不能用于派生登录凭据。
因此,如果将该用户用作auth_user
,则不能对该用户使用SCRAM散列密码,但必须使用明文密码。
https://stackoverflow.com/questions/69473519
复制相似问题