这种认证方法与 password
认证方法类似,只不过它使用 RADIUS 作为密码验证方法。RADIUS 仅用于验证用户名/密码对。因此,在使用 RADIUS 进行认证之前,用户必须已存在于数据库中。
使用 RADIUS 认证时,会向配置的 RADIUS 服务器发送一个 Access Request 消息。此请求的类型为 Authenticate Only
,并包含 user name
、password
(已加密)和 NAS Identifier
参数。请求将使用与服务器共享的密钥进行加密。RADIUS 服务器将使用 Access Accept
或 Access 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"""
如果您在本文档中发现任何不正确之处,与您对特定功能的实际体验不符,或者需要进一步的说明,请使用 此表单 报告文档问题。