Postgresql peer 认证

pg_hba.conf 里的 peer 是一种‌本地认证方式 ‌,它直接使用当前操作系统用户的身份来匹配数据库用户,‌不验证密码‌。‌

🔑 核心机制

  • ‌原理 ‌:当通过 Unix 套接字(本地连接)访问数据库时,PostgreSQL 会获取发起连接的操作系统用户名,并检查该用户名是否与请求的数据库用户名一致(或通过 pg_ident.conf 映射匹配)。
  • ‌使用场景 ‌:通常用于本地单用户环境或 DBA 运维登录,因为操作系统层面已经完成了一次身份认证。
  • ‌限制 ‌:‌仅适用于本地连接 ‌(Unix socket),远程 TCP/IP 连接无法使用 peer,若配置会改用 ident 认证。‌

⚙️ 配置示例

在 pg_hba.conf 中,常见的 local 行配置如下:

复制代码

conf

local all all peer

如果你需要将特定的操作系统用户映射到不同的数据库用户,可以配置 pg_ident.conf 文件,并在 pg_hba.conf 中指定映射名(例如 map=ss)。

复制代码

conf

# pg_ident.conf # MAPNAME SYSTEM-USERNAME PG-USERNAME

ss aaa test

复制代码

conf

# pg_hba.conf

local all all peer

map=ss

这样,操作系统用户 aaa 就能以数据库用户 test 的身份免密登录。‌

❌ 常见问题:Peer authentication failed

当你使用 psql 连接时,如果收到 Peer authentication failed 错误,通常是因为‌当前操作系统用户与数据库用户名不匹配‌。‌

  • ‌解决方法 1 ‌:切换到与数据库用户名一致的操作系统用户,例如 sudo su - postgres 后再连接。
  • ‌解决方法 2 ‌:修改 pg_hba.conf,将该行认证方式改为 md5、scram-sha-256 或 password,然后执行 pg_ctl reload 或 SELECT pg_reload_conf(); 使配置生效。
  • ‌注意‌:修改为密码认证后,需要确保对应数据库用户已设置密码。‌

⚠️ 安全提示

peer 认证本身比较安全(比 trust 强),因为它依赖操作系统的用户身份验证,不会明文传输密码。 但请注意:

  • ‌生产环境 ‌不建议使用 trust(无条件信任),peer 适合本地运维场景。
  • 如果需要远程连接,应使用 scram-sha-256 或 md5 等密码认证方式,并限制客户端 IP 范围。‌
相关推荐
Small-Young6 小时前
数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南
数据库·spring boot·mysql·postgresql·乐观锁·并发控制
瀚高PG实验室7 小时前
瀚高数据库运行日志(错误日志)查看与分析方法
数据库·postgresql·瀚高数据库
snow@li7 小时前
PostgreSQL:PostgreSQL(PG)全景深度梳理
数据库·postgresql
瀚高PG实验室8 小时前
HGHAC集群版本升级
数据库·postgresql·瀚高数据库
IvorySQL9 小时前
PostgreSQL 日报|子表 CHECK 约束恢复标记错误(11 月 2 日)
数据库·postgresql
ss27319 小时前
PostgreSQL常见索引问题与解决方案
数据库·postgresql
瀚高PG实验室21 小时前
发布端逻辑复制槽消失
数据库·postgresql·瀚高数据库
ss27321 小时前
PostgreSQL慢查询定位与优化
数据库·postgresql
l1t1 天前
DeepSeek总结的如何在 PostgreSQL 中删除一张 4 TB 的表
数据库·postgresql
l1t1 天前
DeepSeek总结的pgrust以光速编程:构建 Gravity 查询引擎
数据库·人工智能·postgresql