# 21.6.GSSAPI认证
GSSAPI是中定义的用于安全身份验证的行业标准协议RFC 2743 (opens new window).PostgreSQL支持GSSAPI进行身份验证和/或通信加密。GSSAPI为支持它的系统提供自动身份验证(单点登录)。身份验证本身是安全的。如果使用GSSAPI加密或SSL加密,则将加密沿数据库连接发送的数据;否则,它不会。
构建PostgreSQL时必须启用GSSAPI支持;看见第17章了解更多信息。
当GSSAPI使用Kerberos时,它使用以下格式的标准服务主体(身份验证标识)名称*
服务名*/*
主机名*@*
领域*
。特定安装使用的主体名称未以任何方式编码到PostgreSQL server中;而是在键表服务器读取以确定其身份的文件。如果keytab文件中列出了多个主体,服务器将接受其中任何一个主体。服务器的领域名称是服务器可访问的Kerberos配置文件中指定的首选领域。
连接时,客户端必须知道它要连接到的服务器的主体名称。这个*服务名
校长的一部分通常是博士后
,但可以通过libpq选择另一个值krbsrvname连接参数。这个主机名
*part是libpq被告知要连接到的完全限定主机名。领域名称是客户端可访问的Kerberos配置文件中指定的首选领域。
客户机还将有一个主体名称作为自己的身份(并且必须具有该主体的有效票证)。要使用GSSAPI进行身份验证,客户端主体必须与PostgreSQL数据库用户名相关联。这个pg_ident。形态
配置文件可用于将主体映射到用户名;例如pgusername@realm
可以映射到pgusername
。或者,您可以使用完整的username@realm
主体作为PostgreSQL中的角色名,不进行任何映射。
PostgreSQL还支持将客户端主体映射到用户名,只需从主体中剥离领域。这种方法支持向后兼容,但强烈反对,因为这样就无法区分具有相同用户名但来自不同领域的不同用户。要启用此功能,请设置包括!
到0.对于简单的单域安装,请结合设置克鲁王国
参数(该参数检查主体的域是否与克鲁王国
参数)仍然安全;但与在中指定显式映射相比,这是一种能力较弱的方法pg_ident。形态
.
服务器密钥表文件的位置由krb_服务器_密钥文件配置参数。出于安全原因,建议仅对PostgreSQL server使用单独的密钥表,而不允许服务器读取系统密钥表文件。确保您的服务器密钥表文件可由PostgreSQL server帐户读取(最好仅可读,不可写)。(另见第19.1节.)
keytab文件是使用Kerberos软件生成的;有关详细信息,请参阅Kerberos文档。以下示例显示了如何使用与MIT兼容的Kerberos 5实现的kadmin工具执行此操作:
kadmin% addprinc -randkey postgres/server.my.domain.org
kadmin% ktadd -k krb5.keytab postgres/server.my.domain.org
GSSAPI身份验证方法支持以下身份验证选项:
包括!
如果设置为0,则在通过用户名映射之前,已验证用户主体中的域名称将被剥离(第21.2节)。这是不鼓励的,主要是为了向后兼容,因为它在多领域环境中不安全,除非克鲁王国
也可以使用。建议您离开包括!
设置为默认值(1),并在中提供显式映射pg_ident。形态
将主体名称转换为PostgreSQL用户名。
地图
允许从客户端主体映射到数据库用户名。看见第21.2节详细信息。对于GSSAPI/Kerberos主体,例如username@EXAMPLE.COM
(或者,不太常见,用户名/hostbased@EXAMPLE.COM
),用于映射的用户名为username@EXAMPLE.COM
(或用户名/hostbased@EXAMPLE.COM
,除非包括!
已设置为0,在这种情况下用户名
(或基于用户名/主机
)映射时被视为系统用户名的内容。
克鲁王国
设置要与用户主体名称匹配的领域。如果设置了此参数,则只接受该领域的用户。如果未设置,则任何领域的用户都可以连接,这取决于所做的任何用户名映射。
除了这些设置之外,对于不同的用户,这些设置可能会有所不同pg_hba。形态
条目中,有服务器范围的条目krb_酪蛋白_用户配置参数。如果设置为true,则客户端主体将不敏感地与用户映射条目大小写匹配。克鲁王国
,如果设置,也会不敏感地匹配大小写。