2024年9月26日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11

20.8. Ident 身份验证 #

Ident 身份验证方法通过从 ident 服务器获取客户端的操作系统用户名,并将其用作允许的数据库用户名(带有可选的用户名映射)来工作。这仅在 TCP/IP 连接上受支持。

注意

当为本地(非 TCP/IP)连接指定 ident 时,将改为使用对等身份验证(请参见第 20.9 节)。

以下配置选项支持 ident

map

允许在系统和数据库用户名之间进行映射。有关详细信息,请参见第 20.2 节

“身份验证协议”” 在RFC 1413 中进行了描述。几乎每个类 Unix 操作系统都附带一个 ident 服务器,默认情况下该服务器侦听 TCP 端口 113。ident 服务器的基本功能是回答诸如““哪个用户发起了从您的端口X发出并连接到我的端口Y的连接?””之类的问题。由于PostgreSQL在建立物理连接时都知道XY,因此它可以查询连接客户端主机上的 ident 服务器,并且理论上可以确定任何给定连接的操作系统用户。

此过程的缺点是它依赖于客户端的完整性:如果客户端机器不受信任或遭到破坏,攻击者可以在端口 113 上运行几乎任何程序并返回他们选择的任何用户名。因此,此身份验证方法仅适用于每个客户端机器都受到严格控制且数据库和系统管理员密切合作的封闭网络。换句话说,您必须信任运行 ident 服务器的机器。请注意警告

 

身份验证协议并非旨在用作授权或访问控制协议。

 
  --RFC 1413

某些 ident 服务器具有一个非标准选项,该选项会导致返回的用户名被加密,使用仅由源机器的管理员知道的密钥。当将 ident 服务器与PostgreSQL一起使用时,绝不能使用此选项,因为PostgreSQL无法解密返回的字符串以确定实际的用户名。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用此表单 报告文档问题。