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,将该行认证方式改为 md5scram-sha-256password,然后执行 pg_ctl reloadSELECT pg_reload_conf(); 使配置生效。
  • 注意‌:修改为密码认证后,需要确保对应数据库用户已设置密码。‌

⚠️ 安全提示

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

  • 生产环境 ‌不建议使用 trust(无条件信任),peer 适合本地运维场景。
  • 如果需要远程连接,应使用 scram-sha-256md5 等密码认证方式,并限制客户端 IP 范围。‌
相关推荐
JavaPub-rodert1 小时前
一个后台系统如何同时支持 MySQL、PostgreSQL、SQLite、SQL Server?从 ShiyuAdmin 的 GORM 多数据库适配说起
数据库·mysql·postgresql
夏炳辉.21 小时前
Rocky Linux 8 从零安装 psql(PostgreSQL 客户端)
linux·运维·postgresql
像风一样自由20201 天前
17.Milvus如何完成一次向量相似度检索
人工智能·postgresql·大模型·milvus·rag·智能体
像风一样自由20201 天前
19.Milvus数据分片扩展与高并发设计
postgresql·大模型·milvus·rag·智能体
l1t3 天前
DeepSeek总结的修复pgrust v0.2 #83:generate_series 聚合及其底层的两个成本 - #84
数据库·postgresql
2601_962181963 天前
数据库之PostgreSQL详解
数据库·postgresql
pnoker3 天前
IoT DC3 时序存储选型:四款数据库可插拔
数据库·物联网·postgresql·时序数据库·influxdb·tdengine·iotdb
xuefuhe4 天前
PostgreSQL源码1:select 1
postgresql
IvorySQL4 天前
PostgreSQL 日报|内核多项缺陷修复与数据校验补丁推进(8 月 27 日)
数据库·postgresql·区块链