Postgresql 中文操作指南

21.7. SSPI Authentication #

SSPI 是一种使用单点登录进行安全身份验证的 Windows 技术。PostgreSQL 将在 negotiate 模式下使用 SSPI,该模式尽可能使用 Kerberos,并在其他情况下自动回退到 NTLM。SSPI 和 GSSAPI 作为客户端和服务器进行交互操作,例如,SSPI 客户端可以向 GSSAPI 服务器进行身份验证。建议在 Windows 客户端和服务器上使用 SSPI,在非 Windows 平台上使用 GSSAPI。

在使用 Kerberos 认证时,SSPI 的工作方式与 GSSAPI 相同;有关详细信息,请参阅 Section 21.6

SSPI 支持以下配置选项:

  • include_realm

    • 如果将 authenticated user principal 中的 realm 名称剥离,然后再通过用户名映射 ( Section 21.2) 传递该名称,则此名称将设置为 0。不建议这样做,并且主要用于向后兼容,因为它在多 realm 环境中不安全,除非也使用了 krb_realm。建议将 include_realm 留为默认设置 (1),并在 pg_ident.conf 中提供显式映射,以将 principal 名称转换为 PostgreSQL 用户名。

  • compat_realm

    • 如果设定为 1,则该域的 SAM 兼容名称(也称为 NetBIOS 名称)将用于 include_realm 选项。这是默认设置。如果设定为 0,则将使用来自 Kerberos 用户主体名称的真实区域名称。

    • 除非服务器在域帐户下运行(包括域成员系统上的虚拟服务帐户),并且所有通过 SSPI 进行身份验证的客户端也正在使用域帐户,否则不要禁用此选项,否则身份验证将失败。

  • upn_username

    • 如果启用此选项以及 compat_realm,将使用 Kerberos UPN 中的用户名进行身份验证。如果禁用此选项(默认),将使用与 SAM 兼容的用户名。默认情况下,对于新用户帐户,这两个名称是相同的。

    • 请注意,如果没有指定显式的用户名,libpq 将使用与 SAM 兼容的名称。如果您使用 libpq 或基于它的驱动程序,您应该禁用此选项或在连接字符串中显式指定用户名。

  • map

    • 允许在系统和数据库用户名之间进行映射。有关详细信息,请参阅 Section 21.2。对于 SSPI/Kerberos principal(例如 username@EXAMPLE.COM,或不太常见的 username/hostbased@EXAMPLE.COM),用于映射的用户名是 username@EXAMPLE.COM (或 username/hostbased@EXAMPLE.COM),除非将 include_realm 设置为 0,在这种情况下,username (或 username/hostbased)将作为系统用户名在映射时出现。

  • krb_realm

    • 设置与用户主体名称匹配的域。如果设置此参数,则只接受该域的用户。如果没有设置此参数,则任何域的用户都可以连接,具体取决于所做的用户名映射。