↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 认证方法 / 身份认证与访问控制

gss

使用 GSSAPI 认证用户,仅适用于 TCP/IP 连接。详情参见第 20.6 节。可与 GSSAPI 加密结合使用。

当前查看 PostgreSQL 18.6。

说明

使用 GSSAPI 认证用户,仅适用于 TCP/IP 连接。详情参见第 20.6 节。可与 GSSAPI 加密结合使用。

方法
gss
配置
pg_hba.conf
清单
用户可见的源码认证方法

手册中的方法选项与替代方式

选项或术语含义
include_realm如果设为 0,则在通过用户名映射( 第 20.2 节 )之前,会先从已认证用户的主体名中去掉 realm 名称。不建议这样做;它主要是为了向后兼容而保留的,因为在多 realm 环境中这并不安全,除非同时使用了 krb_realm 。建议将 include_realm 保持为默认值(1),并在 pg_ident.conf 中提供显式映射,把主体名转换成 PostgreSQL 用户名。
map允许把客户端主体映射为数据库用户名。详见 第 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设置用于匹配用户主体名的 realm。如果设置了该参数,则只接受来自该 realm 的用户;如果未设置,则允许来自任意 realm 的用户连接,但仍受已执行的用户名映射约束。

手册定义

20.6. GSSAPI 认证

GSSAPI是一种在 RFC 2743 中定义的安全认证行业标准协议。PostgreSQL支持GSSAPI用于认证、通信加密,或两者兼而有之。GSSAPI为支持它的系统提供自动认证(单点登录)。认证本身是安全的。如果使用GSSAPI加密或SSL加密,沿数据库连接发送的数据将被加密;否则,将不会被加密。

当编译PostgreSQL时,GSSAPI 支持必须被启用,详见第 17 章。

当 GSSAPI 使用 Kerberos 时,它会使用一个标准的服务主体(认证身份)名称,其格式为 servicename/hostname@realm。某个安装实际使用的主体名(principal name)不会以任何方式硬编码在 PostgreSQL 服务器中;相反,它是在服务器读取的 keytab 文件中指定的,服务器据此确定自己的身份。如果 keytab 文件中列出了多个主体,服务器会接受其中任意一个。服务器的 realm 名称是服务器可访问的 Kerberos 配置文件中指定的首选 realm。

连接时,客户端必须知道它打算连接的服务器主体名。该主体名中的 servicename 部分通常是 postgres,但也可以通过 libpq 的连接参数krbsrvname选择其他值。hostname 部分则是 libpq 被告知要连接的完全限定主机名。realm 名称是客户端可访问的 Kerberos 配置文件中指定的首选 realm。

客户端也会有一个表示其自身身份的主体名(并且它必须持有该主体对应的有效票据)。要使用 GSSAPI 进行认证,客户端主体必须与某个 PostgreSQL 数据库用户名关联。可以使用 pg_ident.conf 配置文件将主体映射为用户名;例如,可以把 pgusername@realm 映射为简单的 pgusername。另一种做法是不做任何映射,直接在 PostgreSQL 中把完整的 username@realm 主体名用作角色名。

PostgreSQL 还支持仅通过去掉主体名称中的 realm,将客户端主体映射为用户名。保留此方式是为了向后兼容,强烈不建议使用,因为它无法区分不同 realm 中的同名用户。将 include_realm 设为 0 即可启用。在简单的单 realm 安装中,如果同时设置 krb_realm 参数,以检查主体的 realm 与其值完全一致,这种做法仍然安全;但比起在 pg_ident.conf 中指定明确映射,它的能力较弱。

服务器 keytab 文件的位置由配置参数krb_server_keyfile指定。出于安全原因,建议为 PostgreSQL 服务器单独使用一个 keytab,而不要让服务器直接读取系统 keytab 文件。请确保服务器 keytab 文件对 PostgreSQL 服务器账号可读(并且最好只读、不可写)(另见第 18.1 节)。

keytab 文件用 Kerberos 软件生成;详见 Kerberos 文档。下面的示例展示了如何使用 MIT Kerberos 的 kadmin 工具生成该文件:

kadmin% addprinc -randkey postgres/server.my.domain.org
kadmin% ktadd -k krb5.keytab postgres/server.my.domain.org

GSSAPI 认证方法支持下列认证选项:

include_realm

如果设为 0,则在通过用户名映射(第 20.2 节)之前,会先从已认证用户的主体名中去掉 realm 名称。不建议这样做;它主要是为了向后兼容而保留的,因为在多 realm 环境中这并不安全,除非同时使用了 krb_realm。建议将 include_realm 保持为默认值(1),并在 pg_ident.conf 中提供显式映射,把主体名转换成 PostgreSQL 用户名。

map

允许把客户端主体映射为数据库用户名。详见第 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

设置用于匹配用户主体名的 realm。如果设置了该参数,则只接受来自该 realm 的用户;如果未设置,则允许来自任意 realm 的用户连接,但仍受已执行的用户名映射约束。

除了这些可针对不同 pg_hba.conf 项分别设置的选项之外,还有一个服务器范围的配置参数krb_caseins_users。如果它被设为真,客户端主体与用户映射条目的匹配将不区分大小写。如果设置了 krb_realm,其匹配也同样不区分大小写。

文档与源码

来源构建
版本
18.6
构建
https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
来源指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

版本比较

PostgreSQL 17 → 18: 无变化。

比较已记录的接口与属性,排除来源指纹和构建元数据。某个样本中没有记录,不能据此判断实际引入或移除的版本。

相关条目

导出 JSON · 返回认证方法 · 收录范围为 PostgreSQL 10 至 20;最早采样版本不一定是实际引入版本。