PostgreSQL 全球开发组发布了我们数据库系统所有受支持版本的更新,包括 13.3, 12.7, 11.12, 10.17 和 9.6.22。本次发布修复了三个安全漏洞,并解决了过去三个月内报告的 45 个以上 bug。
有关更改的完整列表,请参阅 发行说明。
受影响版本:9.6 - 13。安全团队通常不测试不受支持的版本,但此问题存在已久。
在修改某些 SQL 数组值时,缺少边界检查会导致已授权的数据库用户向服务器内存的大片区域写入任意字节。
PostgreSQL 项目感谢 Tom Lane 报告此问题。
INSERT ... ON CONFLICT ... DO UPDATE 中的内存泄露受影响版本:9.6 - 13。安全团队通常不测试不受支持的版本。此功能首次出现在 9.5 中。
攻击者通过在一个精心设计的表上使用 INSERT ... ON CONFLICT ... DO UPDATE 命令,可以读取服务器内存中的任意字节。在默认配置下,任何已授权的数据库用户都可以创建先决对象并随意完成此攻击。缺乏所有数据库上的 CREATE 和 TEMPORARY 权限以及所有模式上的 CREATE 权限的用户通常无法随意使用此攻击。
PostgreSQL 项目感谢 Andres Freund 报告此问题。
UPDATE ... RETURNING 中的内存泄露受影响版本:11 - 13
攻击者通过在一个精心设计的表上使用 UPDATE ... RETURNING,可以读取服务器内存中的任意字节。在默认配置下,任何已授权的数据库用户都可以创建先决对象并随意完成此攻击。缺乏所有数据库上的 CREATE 和 TEMPORARY 权限以及所有模式上的 CREATE 权限的用户通常无法随意使用此攻击。
PostgreSQL 项目感谢 Tom Lane 报告此问题。
此更新修复了过去几个月报告的 45 个以上 bug。其中一些问题仅影响版本 13,但也可能适用于其他受支持的版本。
部分修复包括:
UPDATE ... RETURNING 输出可能存在的计算错误。ALTER TABLE ... ALTER CONSTRAINT 的问题。该命令未能调整叶子分区的约束和触发器的 DEFERRABLE 和/或 INITIALLY DEFERRED 属性,导致意外行为。更新到此版本后,您可以执行 ALTER TABLE ... ALTER CONSTRAINT 命令来修复任何行为不正确的表。ALTER TABLE ... INHERIT 附加子表时,父表中的生成列在子表中以相同的方式生成。NULL。ALTER ROLE ... SET/ALTER DATABASE ... SET 设置 role、session_authorization 和 temp_buffers 参数。AFTER 触发器中保存记录可能导致崩溃的问题。to_char() 处理负区间时的罗马数字月份格式代码的方式。\{m,n\} 量词时使用未初始化值的问题。tsvector 索引搜索可能返回错误结果的问题。psql 中 COMMIT AND CHAIN 功能的各项问题。wal_sync_method 默认设置为 fdatasync。vacuum_cleanup_index_scale_factor 参数和存储选项。psql 中 \connect service=XYZ 的先前行为,即不允许环境变量(如 PGPORT)覆盖服务文件中的条目。pg_dump 处理分区表中的生成列的方式。pg_upgrade 的额外检查。initdb 现在会打印有关如何使用反斜杠分隔符通过 pg_ctl 启动服务器的说明。pg_waldump 在生成每条记录统计信息时正确计算 XACT 记录的问题。有关所有更改的完整列表,请参阅 发布说明。
PostgreSQL 9.6 将于 2021 年 11 月 11 日停止接收修复。如果您在生产环境中使用 PostgreSQL 9.6,我们建议您计划升级到更新的、受支持的 PostgreSQL 版本。请参阅我们的 版本策略 以获取更多信息。
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。
跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。
有关更多详细信息,请参阅 发行说明。