PostgreSQL 14.5、13.8、12.12、11.17、10.22 和 15 Beta 3 发布!

发布于 2022-08-11,作者:PostgreSQL 全球开发小组
PostgreSQL 项目 安全

PostgreSQL 全球开发小组发布了 PostgreSQL 所有受支持版本的更新,包括 14.5、13.8、12.12、11.17 和 10.22,以及 PostgreSQL 15 的第三个 beta 版本。此版本修复了一个安全漏洞,并修复了过去三个月中报告的 40 多个错误。

有关更改的完整列表,请查看发行说明

PostgreSQL 10 即将停止维护

PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果您在生产环境中运行 PostgreSQL 10,我们强烈建议您计划升级到更新的、受支持的 PostgreSQL 版本,以便您继续收到错误和安全修复。请参阅我们的版本控制策略以获取更多信息。

安全问题

CVE-2022-2625:扩展脚本替换不属于该扩展的对象。

受影响的版本:10 - 14。安全团队通常不测试不受支持的版本,但这个问题已经存在很久了。

一些扩展使用CREATE OR REPLACECREATE IF NOT EXISTS命令。然而,有些扩展没有遵守文档规定的仅针对已知已是扩展成员的对象。攻击需要权限在至少一个模式中创建非临时对象,能够引诱或等待管理员在该模式中创建或更新受影响的扩展,并且能够引诱或等待受害者使用CREATE OR REPLACECREATE IF NOT EXISTS中目标对象。

考虑到所有三个先决条件,攻击者可以以受害者角色(可能是超级用户)的身份运行任意代码。已知受影响的扩展包括 PostgreSQL 捆绑和非捆绑的扩展。PostgreSQL 在核心服务器中阻止此攻击,因此无需修改各个扩展。

PostgreSQL 项目感谢 Sven Klemm 报告此问题。

关于 PostgreSQL 15 Beta 的说明

此版本标志着 PostgreSQL 15 的第三个 beta 版本,并使社区离暂定在第三季度末左右全面上市更近一步。

本着开源 PostgreSQL 社区的精神,我们强烈建议您在您的系统上测试 PostgreSQL 15 的新功能,以帮助我们消除可能存在的错误或其他问题。虽然我们不建议您在生产环境中运行 PostgreSQL 15 Beta 3,但我们鼓励您找到方法针对此 beta 版本运行您的典型应用程序工作负载。

您的测试和反馈将有助于社区确保 PostgreSQL 15 坚持我们交付世界上最先进的开源关系数据库的稳定、可靠版本的标准。请阅读更多关于我们的beta 测试过程以及您如何做出贡献的信息

https://postgresql.ac.cn/developer/beta/

您可以在发行说明中找到有关 PostgreSQL 15 的所有功能和更改的信息

https://postgresql.ac.cn/docs/15/release-15.html

错误修复和改进

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

此版本包含

  • 修复在遇到缺失的表空间目录时,在备用服务器上重播CREATE DATABASE预写日志(WAL)记录的问题。
  • 添加对作为普通目录而不是指向其他目录的符号链接的表空间的支持。
  • 修复CREATE INDEX中的权限检查以使用用户的权限。这修复了依赖于修复CVE-2022-1552之前的行为的损坏的转储/恢复场景。
  • 在扩展查询协议中,在CREATE DATABASE和其他无法在事务块中运行的命令之后强制立即提交。
  • 修复检查事务可见性时的竞争条件,当使用同步复制时更容易发生。
  • 修复扩展统计信息的不正确的权限检查代码。
  • 修复扩展统计信息机制以处理布尔值表达式上的最常见值(MCV)类型统计信息。
  • 避免当MCV 类型扩展统计信息array变量上时,使用常量= ANY(array)子句的规划器核心转储。
  • 允许在ANALYZE计算扩展统计信息时取消它。
  • 修复ALTER TABLE ... ENABLE/DISABLE TRIGGER以处理分区表上的触发器的递归。
  • 拒绝FROM中具有 1600 多列的ROW()表达式和函数。
  • 修复逻辑复制订阅者中的内存泄漏。
  • 修复当目标表被分区时,逻辑复制中副本标识的检查。
  • 安排在SPI_commit()中提交时错误后进行清理,而不是期望调用者这样做。这包括修复PL/Python中相同情况的修复,该修复报告了 Python 3.11 上的崩溃和较旧版本 Python 3 上的内存泄漏。
  • 改进libpq中在管道模式下处理空闲状态。
  • psql \watch命令中,在使用 control-C 取消后回显一个换行符。
  • 修复pg_upgrade以检测接受anyarray参数的函数的不可升级用法。
  • 几个postgres_fdw修复,包括当存在WITH CHECK OPTION约束时防止批量插入。

有关可用更改的完整列表,请查看发行说明

更新

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

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

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

更新到 PostgreSQL 15 Beta 3

要从 Beta 2、Beta 1 或 PostgreSQL 的早期版本升级到 PostgreSQL 15 Beta 3,您需要使用类似于在 PostgreSQL 的主要版本之间升级的策略(例如,pg_upgradepg_dump/pg_restore)。有关更多信息,请访问有关升级的文档部分。

测试错误和兼容性

每个 PostgreSQL 版本的稳定性很大程度上取决于您(社区),使用您的工作负载和测试工具测试即将到来的版本,以便在 PostgreSQL 15 全面上市之前发现错误和回归。由于这是一个 beta 版本,因此数据库行为、功能细节和 API 的更改仍然是可能的。您的反馈和测试将有助于确定新功能的最终调整,因此请在不久的将来进行测试。用户测试的质量有助于确定我们何时可以发布最终版本。

在 PostgreSQL wiki 中公开提供了一个未解决问题的列表。您可以使用 PostgreSQL 网站上的此表单报告错误

https://postgresql.ac.cn/account/submitbug/

链接