ident 认证方法通过从一个 ident 服务器获得客户端的操作系统用户名并且用它作为被允许的数据库用户名(和可选的用户名映射)来工作。它只在 TCP/IP 连接上支持。
当为一个本地(非 TCP/IP)连接指定 ident 时,将实际使用 peer 认证(见第 21.9 节)。
支持以下配置选项ident
:
map
允许在系统用户和数据库用户名称之间进行映射。详细信息请参见第 21.2 节。
“Identification Protocol”被描述在
RFC 1413中。
几乎每个类Unix的操作系统都默认安装了一个ident服务器,监听TCP
端口113。ident服务器的基本功能是回答类似于“哪个用户发起了
从你的端口X
到我的端口Y
的连接?”这样的问题。
由于PostgreSQL在建立物理连接时知道X
和
Y
,它可以查询连接客户端主机上的ident服务器,
理论上可以确定任何给定连接的操作系统用户。
这个过程的缺点是它依赖于客户端的完整性:如果客户端机器不可信或者被攻破,攻击者可能在 113 端口上运行任何程序并且返回他们选择的任何用户。因此这种认证方法只适用于封闭的网络, 这样的网络中的每台客户端机器都处于严密的控制下并且数据库和操作系统管理员操作时可以方便地联系。换句话说,你必须信任运行 ident 服务器的机器。注意这样的警告:
标识协议的本意不是作为一种认证或访问控制协议。 | ||
--RFC 1413 |
有些 ident 服务器有一个非标准的选项,它导致返回的用户名是被加密的,使用的是只有原机器管理员知道的一个密钥。当与PostgreSQL配合使用 ident 服务器时,一定不要使用这个选项,因为PostgreSQL没有任何方法对返回的字符串进行解密以获取实际的用户名。