2025年9月25日: PostgreSQL 18 发布!

发布 PostgreSQL 14.1、13.5、12.9、11.14、10.19 和 9.6.24!

发布于 2021-11-11,作者 PostgreSQL Global Development Group
PostgreSQL 项目 安全

PostgreSQL Global Development Group 发布了其数据库系统所有受支持版本的更新,包括 14.1、13.5、12.9、11.14、10.19 和 9.6.24。此次发布修复了两个安全漏洞,并解决了过去三个月报告的 40 多个错误。

此外,这是 **PostgreSQL 9.6 的最终发布版本**。如果您在生产环境中使用 PostgreSQL 9.6,我们建议您制定升级计划。

有关更改的完整列表,请参阅 发行说明

安全问题

CVE-2021-23214:服务器处理中间人攻击的未加密字节

受影响的版本:9.6 - 14。安全团队通常不测试不受支持的版本,但此问题存在已久。

当服务器配置为使用 trust 认证,同时要求 clientcert,或者使用 cert 认证时,中间人攻击者可以在连接首次建立时注入任意 SQL 查询,即使使用了 SSL 证书验证和加密。

PostgreSQL 项目感谢 Jacob Champion 报告此问题。

CVE-2021-23222:libpq 处理中间人攻击的未加密字节

受影响的版本:9.6 - 14。安全团队通常不测试不受支持的版本,但此问题存在已久。

中间人攻击者可以在 SSL 证书验证和加密的情况下,向客户端的最初几次查询注入虚假响应。

如果满足更多先决条件,攻击者可以窃取客户端的密码或其他在会话早期传输的机密数据。攻击者必须能够让客户端的目标服务器将机密数据暴露给攻击者。已知具有此属性的实现是易受 CVE-2021-23214 攻击的 PostgreSQL 配置。

与任何对 CVE-2021-23214 的攻击一样,服务器必须使用 trust 认证并要求 clientcert,或者使用 cert 认证。要泄露密码,客户端必须拥有密码,这在使用易受 CVE-2021-23214 攻击的认证配置时并不常见。攻击者必须有其他方法访问服务器才能检索窃取的数据(一个有效的、非特权登录账户就足够了)。

PostgreSQL 项目感谢 Jacob Champion 报告此问题。

错误修复和改进

此次更新修复了过去几个月报告的 40 多个错误。下面列出的问题会影响 PostgreSQL 14。其中一些问题也可能影响 PostgreSQL 的其他受支持版本。

部分修复包括:

  • 修复了主服务器在发送完包含部分 WAL 记录的 WAL 段后崩溃时的物理复制问题。在应用此次更新时,请先更新您的备用服务器,以便在主服务器发生崩溃时,它们能够准备好处理此修复。
  • 修复了并行 VACUUM,使其能够处理低于 min_parallel_index_scan_size 阈值的索引,前提是该表至少有两个大于该阈值的索引。此问题不影响 autovacuum。如果您受到此问题的影响,应重新索引任何手动 vacuum 过的表。
  • 修复了导致 CREATE INDEX CONCURRENTLYREINDEX CONCURRENTLY 写入损坏索引的原因。您应重新索引任何并发创建的索引。
  • 修复了附加/分离分区时可能导致某些 INSERT/UPDATE 查询在活动会话中行为异常的问题。
  • 修复了使用 CREATE TYPE 创建新范围类型时可能导致后续事件触发器或 CREATE TYPE 命令后续执行出现问题的情况。
  • 修复了复合类型中包含的域的数组元素字段的更新问题。
  • 禁止组合使用 FETCH FIRST WITH TIESFOR UPDATE SKIP LOCKED
  • 修复了数值 power() 函数中的一个边界情况精度丢失问题。
  • 修复了子事务中 Portal 快照恢复可能导致崩溃的问题。例如,在 PL/pgSQL 中,当 COMMIT 紧随一个执行查询的 BEGIN ... EXCEPTION 块时,可能会发生这种情况。
  • 当事务在导出快照后失败时,能够正确清理。这可能发生在创建了一个复制槽然后回滚,之后在同一会话中创建了另一个复制槽的情况下。
  • 修复了备用服务器上的“溢出子事务”回绕跟踪问题,该问题可能导致性能下降。
  • 确保在备用服务器升级为主服务器的过程中,对预备事务进行正确统计。
  • 在重命名表时,确保使用正确的锁定级别。
  • 避免在删除拥有正在并发删除的对象角色的情况下发生崩溃。
  • shared_memory_typesysv 时,禁止将 huge_pages 设置为 on。
  • 修复了 PL/pgSQL 中的 RETURN QUERY 的查询类型检查。
  • pg_dump 进行了多项修复,包括正确转储非全局默认权限的能力。
  • 使用 CLDR 项目的数据将 Windows 时区名称映射到 IANA 时区。

此次更新还包含了 tzdata 2021e 版本,以应对斐济、约旦、巴勒斯坦和萨摩亚的夏令时(DST)法律变更,以及巴巴多斯、库克群岛、圭亚那、纽埃、葡萄牙和汤加的历史性修正。

此外,Pacific/Enderbury 时区已重命名为 Pacific/Kanton。同时,以下时区已合并到附近人口更多、自 1970 年以来时钟与其一致的时区中:Africa/Accra、America/Atikokan、America/Blanc-Sablon、America/Creston、America/Curacao、America/Nassau、America/Port_of_Spain、Antarctica/DumontDUrville 和 Antarctica/Syowa。在所有这些情况下,之前的时区名称仍保留为别名。

有关所有更改的完整列表,请参阅 发布说明

PostgreSQL 9.6 已结束生命周期 (EOL)

这是 PostgreSQL 9.6 的最终发布版本。如果您在生产环境中使用 PostgreSQL 9.6,我们建议您制定升级计划,迁移到更新的、受支持的 PostgreSQL 版本。请参阅我们的 版本策略 以获取更多信息。

更新

所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。

跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。

有关更多详细信息,请参阅 发行说明

链接