受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

20.11. RADIUS 认证 #

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

使用 RADIUS 认证时,会向配置好的 RADIUS 服务器发送一条 Access Request 消息。 该请求的类型为 Authenticate Only,并包含 user namepassword(加密的)以及 NAS Identifier 参数。 该请求会使用与服务器共享的密钥进行加密。 RADIUS 服务器会返回 Access AcceptAccess Reject 作为响应。PostgreSQL 不支持 RADIUS 记账。

可以指定多个 RADIUS 服务器,这种情况下会按顺序依次尝试。如果某台服务器返回否定响应,则认证失败;如果没有收到响应,则继续尝试列表中的下一台服务器。要指定多台服务器,可用双引号括起整个列表,并用逗号分隔服务器名称。如果指定了多台服务器,其他 RADIUS 选项也可以写成逗号分隔的列表,以便为每台服务器分别提供不同取值;也可以只指定单个值,此时该值会应用到所有服务器。

RADIUS 支持下列配置选项:

radiusservers

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

radiussecrets

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

Note

只有当 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"""

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。