这种认证方法的工作方式与 password 类似,只不过它使用 RADIUS 作为密码验证方式。RADIUS 只用于验证用户名/密码对。因此,在使用 RADIUS 进行认证之前,用户必须已经存在于数据库中。
使用 RADIUS 认证时,会向配置好的 RADIUS 服务器发送一条 Access Request 消息。 该请求的类型为 Authenticate Only,并包含 user name、password(加密的)以及 NAS Identifier 参数。 该请求会使用与服务器共享的密钥进行加密。 RADIUS 服务器会返回 Access Accept 或 Access Reject 作为响应。PostgreSQL 不支持 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"""
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。