20.8. 身份验证

身份验证方法的工作方式是从 ident 服务器获取 Client 端的 os 用户名,并将其用作允许的数据库用户名(具有可选的用户名 Map)。仅在 TCP/IP 连接上支持此功能。

Note

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

ident 支持以下配置选项:

  • map

    • 允许在系统用户名和数据库用户名之间进行 Map。有关详情,请参见Section 20.2

RFC 1413 中描述了“标识协议”。实际上,每个类 Unixos 都附带一个标识服务器,默认情况下,该服务器侦听 TCP 端口 113. ident 服务器的基本功能是回答诸如“什么用户发起了从端口* X 断开并连接到我的端口 Y * 的连接”之类的问题。由于 PostgreSQL 在构建物理连接时都知道 X Y *,因此它可以查询连接 Client 端主机上的 ident 服务器,并且理论上可以确定任何给定连接的 os 用户。

此过程的缺点在于,它取决于 Client 端的完整性:如果 Client 端计算机不受信任或受到威胁,攻击者可能会在端口 113 上几乎运行任何程序并返回他们选择的任何用户名。因此,此身份验证方法仅适用于封闭网络,在封闭网络中,每台 Client 端计算机都受到严格控制,并且数据库和系统 Management 员紧密联系。换句话说,您必须信任运行身份服务器的计算机。注意警告:

标识协议不打算用作授权或访问控制协议。
--RFC 1413

某些 ident 服务器具有非标准选项,该选项使用仅原始计算机 Management 员知道的密钥来使返回的用户名被加密。在 ident 服务器和 PostgreSQL 一起使用时,不得使用该选项,因为 PostgreSQL 无法解密返回的字符串来确定实际的用户名。