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 范围。‌
相关推荐
geovindu1 天前
sql: Transaction & Concurrency Patterns using postgresql 18
postgresql·数据库开发·数据库架构
thinking_talk1 天前
WorkBuddy应用生成背后的数据层:腾讯云PG
postgresql·腾讯云·云数据库
知识的搬运工旺仔2 天前
唯一索引与 NULL 值:PostgreSQL 主键约束与 NULLS NOT DISTINCT
数据库·后端·sql·postgresql
jnrjian2 天前
EDB postgresql TDE 加密的文件
postgresql
IvorySQL2 天前
PostgreSQL 日报|逻辑解码竞态条件修复(9 月 20 日)
数据库·人工智能·postgresql
XMYX-02 天前
Rocky_Linux_9.8_安装_PostgreSQL_16
postgresql
foolishlee2 天前
SCRAM-SHA-256
数据库·算法·postgresql
IvorySQL3 天前
IvorySQL 5.6 发布:PG 18.6 内核升级,沙盒即开即用
数据库·人工智能·postgresql
腾科IT教育3 天前
PGCM考试详解:认证价值、含金量及与PGCA、PGCE区别
postgresql·pg·pgcm考试·pgca考试·pgce考试
Zhu7583 天前
docker环境快速部署postgresql数据库18及以上版本
postgresql·容器