PG 19 OAuth 认证改进,太实用了 看完想立刻升级
PostgreSQL 认证终于"活"过来了!PG 19 这两个大招,太实用了
PG 19 的 OAuth 认证增强,两个改动直击痛点,看完想立刻升级。
PG 19 OAuth 两板斧,彻底解决老难题
PostgreSQL 引入 OAuth 认证后,社区发现两个硬伤:
痛点一:调试只能"全开",Bearer Token 全部明文打印,谁敢在生产用?
痛点二:OAuth 配置只能全局设定,多租户场景根本没法玩。
现在,PG 19 全解决了。
第一板斧:PGOAUTHDEBUG 从"裸奔"到"穿衣出门"
旧设计有多危险?
PGOAUTHDEBUG=UNSAFE
一开,HTTP 流量 + Bearer Token 全部打印到 stderr,敏感信息裸奔。
新设计:按需开启,危险选项强制"打标签"
# 安全用法:只统计调用次数
PGOAUTHDEBUG=call-count
# 危险操作:必须加 UNSAFE: 前缀
PGOAUTHDEBUG=UNSAFE:trace,http
不加前缀?系统直接警告并忽略:
WARNING: PGOAUTHDEBUG option "trace" is unsafe (ignored)
核心逻辑:不安全选项(http/trace/dos-endpoint)必须显式声明 UNSAFE: 前缀。想用 trace?先把"危险"二字写清楚。
第二板斧:HBA 级 OAuth 配置,多租户的救星
老问题
所有 OAuth 连接共用一套 GUC 全局配置,tenant A 和 tenant B 无法差异化。
新方案:每个 HBA 条目独立配置
# pg_hba.conf
# 企业客户 A:专属 issuer + 审计日志
hostssl postgres tenant_a 10.0.1.0/24 \
oauth issuer=https://corp-a.auth.example.com \
validator.authn_id="corp-a-user" \
validator.audit_level=verbose
# 普通客户:不同 issuer
hostssl postgres public 0.0.0.0/0 \
oauth issuer=https://public.auth.example.com \
validator.authn_id="public-user"
验证器模块通过 GetOAuthHBAOption() 获取 per-entry 配置,差异化策略轻松实现。
一句话总结
觉得有用?转发给做 PostgreSQL 运维的朋友。
这两个 commit 让 OAuth 认证从"能用"走向"好用",PG19 升级值得期待。
参考资料:
PGOAUTHDEBUG 改造:src/interfaces/libpq/oauth-debug.h HBA 级选项注册:RegisterOAuthHBAOptions / GetOAuthHBAOption API 完整解读:公众号回复"OAuth"获取原文链接