SSPI是一种用于带单点登录的安全认证的Windows技术。 PostgreSQL在negotiate
模式中将使用 SSPI,它在可能的情况下使用Kerberos并在其他情况下自动降回到NTLM。只有在服务器和客户端都运行着Windows时,SSPI才能工作。或者在非 Windows 平台上GSSAPI可用时,SSPI也能工作。
当使用Kerberos认证时,SSPI和GSSAPI的工作方式相同,详见Section 20.6。
下列被支持的配置选项用于SSPI:
include_realm
如果设置为 0,在通过用户名映射之前(Section 20.2),来自已认证用户 principal 的 realm 名称会被剥离掉。我们不鼓励这样做,这种方法主要是为了向后兼容性而存在的,因为它在多 realm 环境中是不安全的(除非也使用krb_realm
)。推荐用户让 include_realm 设置为默认值(1)并且在pg_ident.conf
中提供一条显式的映射来把 principal 名称转换成PostgreSQL用户名。
compat_realm
如果被设置为 1,该域的 SAM 兼容名称(也被称为 NetBIOS 名称)被用于include_realm
选项。这是默认值。如果被设置为 0,会使用来自 Kerberos 用户主名的真实 realm 名称。
不要禁用这个选项,除非你的服务器运行在一个域账号(这包括一个域成员系统上的虚拟服务账号)下并且所有通过 SSPI 认证的所有客户端也在使用域账号,否则认证将会失败。
upn_username
如果这个选项和compat_realm
一起被启用,来自 Kerberos UPN 的用户名会被用于认证。如果它被禁用(默认),会使用 SAM 兼容的用户名。默认情况下,对于新用户账号这两种名称是一样的。
注意如果没有显式指定用户名,libpq会使用 SAM 兼容的名称。如果你使用的是libpq或者基于它的驱动,你应该让这个选项保持禁用或者在连接字符串中显式指定用户名。
map
允许在系统和数据库用户名之间的映射。详见Section 20.2。
对于一个 GSSAPI/Kerberos 原则,例如username@EXAMPLE.COM
(或者更不常见的username/hostbased@EXAMPLE.COM
),
用于映射的用户名会是username@EXAMPLE.COM
(或者
username/hostbased@EXAMPLE.COM
,相应地),除非
include_realm
已经被设置为 0,在那种情况下
username
(或者username/hostbased
)是
映射时被视作系统用户名的东西。
krb_realm
设置领域为对用户 principal 名进行匹配的范围。如果这个参数被设置,只有那个领域的用户将被接受。如果它没有被设置,任何领域的用户都能连接,服从任何已完成的用户名映射。