文章目录
环境
系统平台:N/A
版本:9.0.5
症状
使用 .pgpass 免密登录时,psql 在启动阶段输出告警:
$(客户端安装用户) psql
WARNING:IsEncryptNon-base64 encoding.
psql (14.20)
hgdb-client-V9.0.5
输入 "help" 来获取帮助信息.
highgo=#
该告警不阻断登录,也不影响后续 SQL 执行,但每次连接都会输出。检查 .pgpass 可确认其中密码为明文:
$ cat .pgpass
#hostname:port:database:username:password
localhost:5866:*:highgo:password
问题原因
HGDB V9.0.5 对 .pgpass 中 password 字段做 base64 编码校验。当该字段以明文存放时,客户端在读取阶段判定其未按 base64 编码,输出 WARNING:IsEncryptNon-base64 encoding.。
该机制的用途是避免口令以可读明文出现在文件中,增强密码安全性。
解决方案
使用 HGDB 客户端自带的 pg_pgpass 工具对 .pgpass 文件进行编码处理。该工具位于数据库安装目录的bin/中。
pg_pgpass 原地修改 .pgpass,且会将文件中所有明文密码一并加密,执行前先备份:
$ cp .pgpass .pgpass.bak
执行加密:
$ pg_pgpass .pgpass
#hostname:port:database:username:password
WARNING:IsEncryptNon-base64 encoding.
localhost:5866:*:highgo:SbGDA8mH3xxx+XqZ9ssyI8lgFxxeAY9b+YPACM3ilLKgTM5xx10XKuWSixxKlxx3CPfdyKYGIwDX2/9Vw1xxOHpl5xxXyfgqcqWPmUTc=
确认文件内容已变更:
$ cat .pgpass
#hostname:port:database:username:password
localhost:5866:*:highgo:SbGDA8mH3xxx+XqZ9ssyI8lgFxxeAY9b+YPACM3ilLKgTM5xx10XKuWSixxKlxx3CPfdyKYGIwDX2/9Vw1xxOHpl5xxXyfgqcqWPmUTc=
前四列 hostname:port:database:username 保持不变,仅 password 字段被替换为编码后的字符串。
验证
重新执行 psql,告警消失且无需输入密码即可登录:
$ psql
psql (14.20)
hgdb-client-V9.0.5
输入 "help" 来获取帮助信息.
highgo=# \q
注意事项
pg_pgpass 对文件内所有条目统一处理。多实例、多用户共用的 .pgpass 会一并变更,执行前需确认保留备份以便回退。