pgbouncer配置SCRAM-SHA-256认证及userlist.txt生成方法咨询
SCRAM-SHA-256在pgbouncer中的配置相关问题解答
1. storedkey和serverkey的定义
二者都是SCRAM-SHA-256认证协议中的标准密钥:
- storedkey:由用户明文密码经过哈希迭代、加盐计算后生成,用于服务端验证客户端发送的身份凭证合法性
- serverkey:同样由明文密码按照标准算法生成,用于服务端向客户端证明自身持有正确的密码衍生信息,避免客户端连接到伪造服务端
两个密钥都不需要手动计算,PostgreSQL存储的SCRAM格式密码中已经包含了完整的上述字段,完全符合pgbouncer要求的格式。
2. 符合要求的userlist.txt条目生成方法
方法1:直接从PostgreSQL系统表导出(最稳妥)
登录PostgreSQL超级用户,执行以下SQL查询即可直接获取可直接写入userlist.txt的完整条目:
SELECT rolname || ' ' || rolpassword FROM pg_authid WHERE rolname = '你的pgbouncer连接用户名';
将查询得到的整行结果直接复制粘贴到userlist.txt中即可。
方法2:通过PostgreSQL内置函数生成
如果不想查询系统表,也可以直接调用内置函数指定明文密码生成对应哈希串:
SELECT pg_scram_sha_256('你的用户明文密码');
得到哈希串后,在userlist.txt中按用户名 哈希串的格式写入即可。
3. 配套工具说明
- pgbouncer没有类似pgpool的
pg_enc的独立加密工具,生产环境更推荐直接从PostgreSQL中获取已有哈希值,避免明文密码泄露风险 - 从pgbouncer 1.17版本开始,官方附带的
mkauth.py脚本支持直接连接PostgreSQL批量生成符合SCRAM格式要求的userlist.txt文件,无需手动拼接内容
4. auth_query配置示例
如果使用auth_query模式完成认证,需要在pgbouncer.ini中做如下配置:
auth_type = scram-sha-256 auth_query = SELECT usename, passwd FROM pg_shadow WHERE usename=$1 auth_user = 有权限查询pg_shadow的用户名
注意pgbouncer版本最低需要1.16及以上才支持SCRAM-SHA-256认证,低版本需先升级。
内容的提问来源于stack exchange,提问作者vamfoom
相关产品推荐
相关产品推荐

