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

20.11. RADIUS 认证 #

这种认证方法与 password 认证方法类似,只不过它使用 RADIUS 作为密码验证方法。RADIUS 仅用于验证用户名/密码对。因此,在使用 RADIUS 进行认证之前,用户必须已存在于数据库中。

使用 RADIUS 认证时,会向配置的 RADIUS 服务器发送一个 Access Request 消息。此请求的类型为 Authenticate Only,并包含 user namepassword(已加密)和 NAS Identifier 参数。请求将使用与服务器共享的密钥进行加密。RADIUS 服务器将使用 Access AcceptAccess Reject 来响应此请求。不支持 RADIUS 记账。

可以指定多个 RADIUS 服务器,在这种情况下,它们将按顺序尝试。如果从服务器收到否定响应,认证将失败。如果没有收到响应,将尝试列表中的下一个服务器。要指定多个服务器,请用逗号分隔服务器名称,并将列表括在双引号内。如果指定了多个服务器,其他 RADIUS 选项也可以作为逗号分隔的列表给出,以便为每个服务器提供单独的值。它们也可以指定为单个值,在这种情况下,该值将应用于所有服务器。

RADIUS 支持以下配置选项:

radiusservers

要连接的 RADIUS 服务器的 DNS 名称或 IP 地址。此参数是必需的。

radiussecrets

在与 RADIUS 服务器安全通信时使用的共享密钥。此值必须与 PostgreSQL 和 RADIUS 服务器上的值完全相同。建议此字符串至少为 16 个字符。此参数是必需的。

注意

加密向量的有效性仅在 PostgreSQL 使用 OpenSSL 构建时才具有密码学强度。在其他情况下,与 RADIUS 服务器的传输只能视为混淆,而不安全,如有必要应采取外部安全措施。

radiusports

要连接的 RADIUS 服务器的端口号。如果未指定端口,将使用默认的 RADIUS 端口(1812)。

radiusidentifiers

用作 RADIUS 请求中 NAS Identifier 的字符串。此参数可用于识别用户尝试连接的数据库集群,这对于 RADIUS 服务器上的策略匹配非常有用。如果未指定标识符,将使用默认值 postgresql

如果 RADIUS 参数值中必须包含逗号或空格,可以通过将值括在双引号中来实现,但这很麻烦,因为现在需要两层双引号。在 RADIUS 密钥字符串中包含空格的示例如下:

host ... radius radiusservers="server1,server2" radiussecrets="""secret one"",""secret two"""

提交更正

如果您在本文档中发现任何不正确之处,与您对特定功能的实际体验不符,或者需要进一步的说明,请使用 此表单 报告文档问题。