此身份验证方法的操作方式类似于 password
,但它使用 RADIUS 作为密码验证方法。RADIUS 仅用于验证用户名/密码对。因此用户必须已经存在于数据库中,RADIUS 才能用于身份验证。
使用 RADIUS 身份验证时,将向已配置的 RADIUS 服务器发送访问请求消息。此请求的类型为 仅身份验证
,并包含 用户名
、密码
(加密)和 NAS 标识符
的参数。请求将使用与服务器共享的密码进行加密。RADIUS 服务器对此请求的响应是 访问接受
或 访问拒绝
。不支持 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"""