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 用户名。
- 如果设置为 0,则在通过用户名 Map(Section 20.2)之前,将剥离已认证用户主体的领域名称。不建议这样做,并且主要用于向后兼容,因为除非在多领域环境中使用
-
compat_realm
- 如果设置为 1,则
include_realm
选项使用域的 SAM 兼容名称(也称为 NetBIOS 名称)。这是默认值。如果设置为 0,则使用 Kerberos 用户主体名称中的真实领域名称。
- 如果设置为 1,则
除非您的服务器在域帐户下运行(包括域成员系统上的虚拟服务帐户),并且所有通过 SSPI 进行身份验证的 Client 端也都在使用域帐户,否则身份验证将失败,请不要禁用此选项。
-
upn_username
- 如果与
compat_realm
一起启用此选项,则使用 Kerberos UPN 中的用户名进行身份验证。如果禁用(默认),则使用 SAM 兼容用户名。默认情况下,这两个名称对于新用户帐户是相同的。
- 如果与
请注意,如果未指定显式用户名,则 libpq 使用 SAM 兼容名称。如果使用 libpq 或基于 libpq 的驱动程序,则应禁用此选项或在连接字符串中显式指定用户名。
-
map
- 允许在系统用户名和数据库用户名之间进行 Map。有关详情,请参见Section 20.2。对于 SSPI/Kerberos 主体,例如
[email protected]
(或更不常见的是username/[email protected]
),用于 Map 的用户名是[email protected]
(或分别为username/[email protected]
),除非include_realm
已设置为 0,在这种情况下为username
(或username/hostbased
)。Map 时被视为系统用户名。
- 允许在系统用户名和数据库用户名之间进行 Map。有关详情,请参见Section 20.2。对于 SSPI/Kerberos 主体,例如
-
krb_realm
- 设置领域以匹配用户主体名称。如果设置了此参数,则仅接受该领域的用户。如果未设置,则无论完成任何用户名 Map,任何领域的用户都可以连接。