postgre-sql / 11.2 / reference / sspi-auth.html

20.7. SSPI 验证

SSPI 是一种 Windows 技术,用于通过单点登录进行安全身份验证。 PostgreSQL 将在negotiate模式下使用 SSPI,并在可能的情况下使用 Kerberos,在其他情况下会自动退回到 NTLM。仅当服务器和 Client 端都运行 Windows 时,或者在非 Windows 平台上,当 GSSAPI 可用时,SSPI 身份验证才起作用。

使用 Kerberos 身份验证时,SSPI 的工作方式与 GSSAPI 相同。有关详情,请参见Section 20.6

SSPI 支持以下配置选项:

  • include_realm

    • 如果设置为 0,则在通过用户名 Map(Section 20.2)之前,将剥离已认证用户主体的领域名称。不建议这样做,并且主要用于向后兼容,因为除非在多领域环境中使用krb_realm,否则它也不安全。建议将include_realm设置为默认值(1),并在pg_ident.conf中提供显式 Map,以将主体名称转换为 PostgreSQL 用户名。
  • compat_realm

    • 如果设置为 1,则include_realm选项使用域的 SAM 兼容名称(也称为 NetBIOS 名称)。这是默认值。如果设置为 0,则使用 Kerberos 用户主体名称中的真实领域名称。

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

  • upn_username

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

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

  • map

    • 允许在系统用户名和数据库用户名之间进行 Map。有关详情,请参见Section 20.2。对于 SSPI/Kerberos 主体,例如username@EXAMPLE.COM(或更不常见的是username/hostbased@EXAMPLE.COM),用于 Map 的用户名是username@EXAMPLE.COM(或分别为username/hostbased@EXAMPLE.COM),除非include_realm已设置为 0,在这种情况下为username(或username/hostbased)。Map 时被视为系统用户名。
  • krb_realm

    • 设置领域以匹配用户主体名称。如果设置了此参数,则仅接受该领域的用户。如果未设置,则无论完成任何用户名 Map,任何领域的用户都可以连接。