1. PostgreSQL认证机制的前世今生
数据库认证就像你家门锁的升级史。早期的PostgreSQL就像用简易挂锁(MD5),现在换成了智能指纹锁(SCRAM-SHA-256)。这个转变背后是安全需求的不断提升,但就像老钥匙开不了新锁,很多客户端工具会突然"认不出"新式认证。
我处理过最典型的案例是某电商系统升级后,凌晨突然出现大面积"authentication method 10 not supported"报错。这个数字10其实就是SCRAM-SHA-256在协议中的代号,就像超市商品条形码,客户端扫到不认识的编码就会拒收。
认证方式演进时间线:
- 1996年:PostgreSQL首次引入MD5认证
- 2017年:SCRAM-SHA-256加入PG10版本
- 2020年:MD5被正式标记为弱加密方法
- 2023年:PG16默认禁用MD5认证
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 认证协议的技术内幕
2.1 MD5为何被淘汰
MD5就像用明信片传密码——内容能被任何人看见。它的工作流程是:
- 客户端发送用户名
- 服务端返回随机盐值
- 客户端计算
MD5(密码+盐值) - 服务端验证哈希值
我在渗透测试中用Wireshark抓包,不到5分钟就能截获并破解这种认证。更可怕的是,很多运维至今还在用这种配置:
bash复制# 危险示例(pg_hba.conf)
host all all 192.168.1.0/24 md5
2.2 SCRAM-SHA-256的防御之道
SCRAM协议就像需要双方配合的保险箱转盘:
- 客户端先发送
client-first-message包含随机数 - 服务端回复
server-first-message带自己的随机数和盐值 - 双方各自计算
SaltedPassword = HMAC(密码, 盐值) - 最终通过三次哈希核对完成认证
实测对比:
| 安全指标 | MD5 | SCRAM-SHA-256 |
|---|---|---|
| 防重放攻击 | ❌ | ✅ |
| 防中间人攻击 | ❌ |
