Skip to content

21.7. SSPI 身份验证#

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

在使用Kerberos身份验证时,SSPI的工作方式与GSSAPI相同;有关详细信息,请参见第 21.6 节

以下配置选项受SSPI支持

include_realm

如果设置为 0,则在通过用户名映射(第 21.2 节)传递之前,将从经过身份验证的用户主体中剥离领域名称。不建议这样做,并且主要出于向后兼容性的目的而提供,因为在多领域环境中不安全,除非还使用了 krb_realm。建议将 include_realm 设置为默认值 (1),并在 pg_ident.conf 中提供明确的映射,以将主体名称转换为 PostgreSQL 用户名。

compat_realm

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

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

upn_username

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

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

map

允许在系统和数据库用户名之间进行映射。有关详细信息,请参见第 21.2 节。对于 SSPI/Kerberos 主体,例如 [email protected](或不太常见的 username/[email protected]),用于映射的用户名为 [email protected](或 username/[email protected]),除非 include_realm 已设置为 0,在这种情况下,username(或 username/hostbased)在映射时被视为系统用户名。

krb_realm

设置域以匹配用户主体名称。如果设置此参数,则只接受该域的用户。如果未设置此参数,则可以连接任何域的用户,具体取决于执行的用户名映射。