前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PostgreSQL 版本升级到PG14后,pgbouncer 无法使用怎么回事?

PostgreSQL 版本升级到PG14后,pgbouncer 无法使用怎么回事?

作者头像
AustinDatabases
发布2024-06-07 14:21:22
750
发布2024-06-07 14:21:22
举报
文章被收录于专栏:AustinDatabasesAustinDatabases

pgbouncer 是一款在PG高并发时被使用的链接性的软件,通过它可以可以解决PG中对于高并发性能和系统消耗过高的问题,同时他软件虽小,可运行稳定,并且还有一些特殊的功能使用,这些问题我们可以放到后面去说,今天要说的是在之前在PG12可以运行良好的pgbouncer在安装到PG14后,将配置文件移植过来,通过他来登录到数据库,报无法登录密码失效的问题。

代码语言:javascript
复制
[postgres@pgce pgdata]$ psql -Utest -h 192.168.198.100 -p 6432 -d te
Password for user test: 
psql: error: connection to server at "192.168.198.100", port 6432 failed: FATAL:  password authentication failed
[postgres@pgce pgdata]$ 
[postgres@pgce pgdata]$ 

这个原因主要来源于pgbouner中对于用户验证的文件中的密码提供的方式,这点有点类似于 MYSQL 5.7 到MYSQL8 中的用户验证方式的密码变化。同样PG 也有类似的问题,这主要发生在PG14版本后,在PG14后默认的密码加密的方式变为了 scram-sha-256, 你编译安装后如果不发现这点,后续你的密码的加密方式都是 scram-sha-256

代码语言:javascript
复制
postgres=# select * from pg_shadow;
-[ RECORD 1 ]+--------------------------------------------------------------------------------------------------------------------------------------
usename      | postgres
usesysid     | 10
usecreatedb  | t
usesuper     | t
userepl      | t
usebypassrls | t
passwd       | 
valuntil     | 
useconfig    | 
-[ RECORD 2 ]+--------------------------------------------------------------------------------------------------------------------------------------
usename      | test
usesysid     | 16698
usecreatedb  | f
usesuper     | t
userepl      | f
usebypassrls | f
passwd       | SCRAM-SHA-256$4096:k7ZYyrKESo35BEpiTeGykg==$SQj7Vz76Q9W97THeHiR2zRSUFmWGuls03LXqtRW28mk=:fvuWHhZ8htnUHnNoamAHMSZ9wnkT6gmmqEq50rjOOWc=
valuntil     | 
useconfig    | 

而之前的pgbouncer userlist.txt里面的用户的密码可还是md5的设置.

那么在pgbouncer 的任何配置都不变的情况下,直接原版照抄到POSTGRESQL 14版本的数据库中,会出现无法链接的问题。解决方案也很简单,我们需要将POSTGRESQL 14中的配置文件中的用户密码的加密设定,改为md5即可。

代码语言:javascript
复制
#authentication_timeout = 1min          # 1s-600s
password_encryption = md5 #scram-sha-256        # scram-sha-256 or md5
#db_user_namespace = off


同时还需要注意的是,及时修改完毕,那么之前已经建立的用户还需要重新建立,否则改动只对之后用户生效,之前的账号是不可以的。

代码语言:javascript
复制
postgres=# select * from pg_shadow ;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |                                                                passwd                             
                                    | valuntil | useconfig 
----------+----------+-------------+----------+---------+--------------+---------------------------------------------------------------------------------------------------
------------------------------------+----------+-----------
 postgres |       10 | t           | t        | t       | t            |                                                                                                   
                                    |          | 
 test     |    16698 | f           | t        | f       | f            | SCRAM-SHA-256$4096:k7ZYyrKESo35BEpiTeGykg==$SQj7Vz76Q9W97THeHiR2zRSUFmWGuls03LXqtRW28mk=:fvuWHhZ8h
tnUHnNoamAHMSZ9wnkT6gmmqEq50rjOOWc= |          | 
(2 rows)

postgres=# drop user test;
DROP ROLE
postgres=# create user test superuser password 'test';
CREATE ROLE
postgres=# select * from pg_shadow ;
 usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |               passwd                | valuntil | useconfig 
----------+----------+-------------+----------+---------+--------------+-------------------------------------+----------+-----------
 postgres |       10 | t           | t        | t       | t            |                                     |          | 
 test     |    16699 | f           | t        | f       | f            | md505a671c66aefea124cc08b76ea6d30bb |          | 
(2 rows)



在重新建立用户后,我们再次尝试通过原来的方式通过pgbouncer 登录到数据库系统中就可以了。

代码语言:javascript
复制
[postgres@pgce pgdata]$ psql -Utest -h 192.168.198.100 -p 6432 -d test
Password for user test: 
psql (14.7)
Type "help" for help.

test=# 

再次尝试,之前的报的 FATAL: password authentication failed 的问题就解决了。

同时pgbouncer 也已经支持了 scram-sha-256 的密码验证方式,如果不想调整postgresql 的密码加密的方法,那么就需要更新的pgbouncer 的软件搭配来使用,那么在userlist 文件中存放的密码也就必须是 scram_sha_256 的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档