Postgresql 中文操作指南

21.11. RADIUS Authentication #

这种身份验证方法与_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 个字符的字符串。此参数是必需的。

  • radiusports

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

  • radiusidentifiers

    • 在 RADIUS 请求中用作_NAS Identifier_的字符串。此参数可用用于识别用户尝试连接的数据库集群,这对于在 RADIUS 服务器上匹配策略很有用。如果没有指定标识符,将使用默认_postgresql_。

Note

仅当 PostgreSQL 在构建时支持 OpenSSL 时,使用的加密矢量才具有较强的密码安全性。在其他情况下,向 RADIUS 服务器的传输应仅被视为混淆,而不是安全,如果有必要,应采取外部安全措施。

如果需要在 RADIUS 参数值中使用逗号或空格,可以通过将值加双引号来实现,但这很麻烦,因为现在需要双层双引号。将空格放入 RADIUS 机密字符串的示例:

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