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 范围。‌
相关推荐
IvorySQL7 小时前
PostgreSQL 日报|逻辑解码 DDL 子事务缺陷修复(10 月 12 日)
数据库·postgresql
瀚高PG实验室8 小时前
瀚高数据库序列介绍、使用及值不连续、重复写入等现象处理
数据库·postgresql·瀚高数据库
这个DBA有点耶8 小时前
PostgreSQL HOT更新:频繁更新表的索引膨胀根因与fillfactor调优
数据库·sql·postgresql
ss27312 小时前
PG实战笔记 | 04 PostgreSQL市场地位与实际案例
数据库·postgresql
码匠许师傅14 小时前
【C++三方组件】libpqxx:PostgreSQL 的 C++ 客户端
开发语言·c++·postgresql
瀚高PG实验室14 小时前
业务无法通过hgproxy访问数据库
数据库·postgresql·瀚高数据库
snhna1 天前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
周小董1 天前
[1369]Windows上安装PostgreSQL
数据库·windows·postgresql
ss2732 天前
03 -AI时代首先数据库-PostgreSQL发展历史:从伯克利到AI数据库
postgresql
东风微鸣2 天前
精简 Ubuntu Linux 固件包:每个 N100 节点省下约 450 MB
linux·ubuntu·postgresql