pg_hba.conf配置里peer,indent和md5的区别

 

在 PostgreSQL 的 pg_hba.conf配置文件中,peer、ident和 md5是三种不同的认证方法。以下是它们的详细区别:
1. peer​ 认证方法
特点:
仅适用于本地连接(local connection type)
基于操作系统用户身份进行认证
不需要密码
工作原理:
PostgreSQL 检查连接客户端的操作系统用户名是否与请求的数据库用户名匹配
如果匹配,则允许连接
配置示例:
local   all     all                 peer
使用场景:
# 客户端操作系统用户 = postgres,数据库用户 = postgres
sudo -u postgres psql

# 这会成功,因为操作系统用户和数据库用户都是 postgres

# 如果尝试:
sudo -u root psql -U postgres
# 这会失败,因为操作系统用户(root) ≠ 数据库用户(postgres)
2. ident​ 认证方法
特点:
适用于本地和主机连接
通过 ident 协议检查客户端操作系统的用户身份
不需要密码
比 peer 更灵活,可以配置用户名映射
工作原理:
连接到 ident 服务器(通常运行在客户端)验证用户名
可以使用用户名映射
配置示例:
host    all     all     127.0.0.1/32    ident
host    all     all     ::1/128         ident
使用场景:
# 允许从本地主机连接,使用 ident 认证
psql -h 127.0.0.1 -U postgres
用户名映射示例:
# 在 pg_ident.conf 中定义映射
# MAPNAME  SYSTEM-USERNAME  PG-USERNAME
mymap      root             postgres
mymap      wwwuser          webuser

# 在 pg_hba.conf 中使用映射
host    all     all     127.0.0.1/32    ident map=mymap
3. md5​ 认证方法
特点:
需要密码认证
使用 MD5 哈希传输密码
适用于本地和远程连接
密码在传输前进行哈希,相对安全
工作原理:
客户端发送用户名
服务器发送随机 salt
客户端计算密码的 MD5 哈希并发送
服务器验证哈希值
配置示例:
host    all     all     0.0.0.0/0       md5
使用场景:
# 需要输入密码
psql -h 192.168.1.100 -U myuser -d mydb
# 密码: ********

三种方法的对比表格

特性peeridentmd5
适用连接类型​ 仅本地 本地和主机 本地和主机
是否需要密码​
认证基础​ 操作系统用户 ident 协议 数据库密码
安全性​ 中(本地) 中(加密传输)
使用复杂度​ 简单 中等 简单
远程支持​
4. scram-sha-256(现代推荐替代 md5)
特点:
最安全的密码认证方法
使用 SCRAM-SHA-256 协议
抵抗各种攻击(包括中间人攻击)
配置示例:
host    all     all     0.0.0.0/0       scram-sha-256
实际配置示例
开发环境配置:
# TYPE  DATABASE  USER  ADDRESS      METHOD

# 本地 socket 连接使用 peer(方便)
local   all       all                 peer

# 本地 TCP 连接使用 md5(需要密码)
host    all       all   127.0.0.1/32  md5

# 局域网连接使用 md5
host    all       all   192.168.1.0/24 md5

# 远程连接使用更安全的 scram-sha-256
host    all       all   0.0.0.0/0     scram-sha-256
生产环境安全配置:
# 本地管理连接
local   all       postgres              peer

# 应用本地连接
host    appdb     appuser   127.0.0.1/32  scram-sha-256

# 特定IP的管理连接
host    all       admin     192.168.1.100/32 scram-sha-256

# 拒绝其他所有连接
host    all       all       0.0.0.0/0        reject
认证方法选择指南
选择 peer 当:
只有本地连接
客户端和数据库在同一台机器
希望免密码登录
开发环境
选择 ident 当:
需要用户名映射功能
网络环境可控
客户端支持 ident 协议
选择 md5/scram-sha-256 当:
需要远程连接
需要密码认证
生产环境
推荐使用 scram-sha-256(更安全)
修改认证方法后的操作
# 1. 修改 pg_hba.conf
sudo vim /var/lib/pgsql/data/pg_hba.conf

# 2. 重新加载配置(不重启服务)
sudo systemctl reload postgresql

# 或者重启服务
sudo systemctl restart postgresql

# 3. 测试连接
psql -U username -h hostname -d database
总结:对于现代应用,推荐使用 scram-sha-256替代 md5,本地管理连接可以使用 peer,以获得最佳的安全性和便利性平衡。

 

 

posted @ 2025-11-11 18:00  你说夕阳很美  阅读(9)  评论(0)    收藏  举报