使用 ssl 运行 postgreSQL 13.2。
我需要从需要连接 URI 的第三方应用程序连接到数据库,但它不起作用。因此,我使用具有相同凭据的两种不同格式测试了与 psql 的连接。一个有效,一个无效。
以下命令将我作为用户 myuser 登录到 mydb:
# psql -U myuser -d mydb -h 127.0.0.1 -p 5432 -W
Password:
psql (13.2 (Debian 13.2-1.pgdg100+1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.
mydb=>
但是此命令失败:
# psql postgresql://myuser:[email protected]:5432/mydb?sslmode=require
psql: error: FATAL: password authentication failed for user "myuser"
我使用完全相同的凭据。我已经验证了 10 多次。删除“sslmode=require”并不能解决问题。
我的 pg_hba.conf 文件包含:
host mydb myuser 127.0.0.1/32 password
我把它放在我的 pg_hba.conf 文件的第一行,所以它不能挂在任何其他行上。
我究竟做错了什么?
我使用的密码恰好包含
%d0
. 使用参数登录时效果很好。但是,如果您使用连接 URI,它会被解释为百分比编码的值。巧合的是,我的密码包含百分号,后跟一个有效的十六进制数字。更改密码或对连接 URI 进行适当的百分比编码是解决此问题的方法。连接 URI 中有几个字符必须进行百分比编码。