PostgreSQL 11.3、10.8、9.6.13、9.5.17 和 9.4.22 发布!

由 PostgreSQL 全球开发小组于 2019-05-09 发布
PostgreSQL 项目 安全

PostgreSQL 全球开发小组已发布我们数据库系统所有受支持版本的更新,包括 11.3、10.8、9.6.13、9.5.17 和 9.4.22。此版本修复了 PostgreSQL 服务器中的两个安全问题、两个 PostgreSQL Windows 安装程序中发现的一个安全问题,以及在过去三个月内报告的 60 多个错误。

使用 EnterpriseDB 和 BigSQL 的 Windows 安装程序安装 PostgreSQL 的用户应尽快升级。同样,运行任何版本的 PostgreSQL 9.5、9.6、10 和 11 的用户也应计划尽快升级。

所有其他用户应计划在下次计划停机时应用此更新。

安全问题

此版本已关闭四个安全漏洞

  • CVE-2019-10127: BigSQL Windows 安装程序未清除宽松的 ACL 条目
  • CVE-2019-10128: EnterpriseDB Windows 安装程序未清除宽松的 ACL 条目

由于 EnterpriseDB 和 BigSQL Windows 安装程序都没有锁定 PostgreSQL 二进制安装目录和数据目录的权限,因此无特权的 Windows 用户帐户和无特权的 PostgreSQL 帐户可能会导致 PostgreSQL 服务帐户执行任意代码。

此漏洞存在于这些安装程序的所有受支持的 PostgreSQL 版本中,并且可能存在于较旧的版本中。两组安装程序都已修复新安装和现有安装的这些目录的权限。如果您使用其他方法在 Windows 上安装了 PostgreSQL,我们建议您检查您的 PostgreSQL 二进制目录是否仅对受信任的用户可写,并且您的数据目录是否仅对受信任的用户可访问。

PostgreSQL 项目感谢 Conner Jones 报告此问题。

在此版本之前,运行 PostgreSQL 11 的用户可以通过向分区表执行精心制作的 INSERT 语句来读取服务器内存的任意字节。

PostgreSQL 通过对列中可用的数据进行采样来维护表的统计信息;在查询计划过程中会参考此数据。在此版本之前,能够执行 SQL 查询且具有读取给定列权限的用户可以创建一个泄漏运算符,该运算符可以读取从该列中采样的任何数据。如果这恰好包含用户被行安全策略禁止查看的行中的值,则用户可以有效地绕过该策略。此问题已通过仅当表的没有相关行安全策略时,才允许非防泄漏运算符使用此数据来修复。

此问题存在于 PostgreSQL 9.5、9.6、10 和 11 中。PostgreSQL 项目感谢 Dean Rasheed 报告此问题。

错误修复和改进

此更新还修复了在过去几个月内报告的 60 多个错误。其中一些问题仅影响 11 版本,但许多问题会影响所有受支持的版本。

其中一些修复包括

  • 多个目录损坏修复,包括一个与在分区表上运行 ALTER TABLE 相关的问题
  • 多个分区修复
  • 避免在尝试跨事务提交持久化游标查询时发生错误导致服务器崩溃
  • 避免在回滚创建了许多表的事务时出现 O(N^2) 性能问题
  • 修复 txid_status() 中可能出现的“无法访问事务状态”失败
  • 修复可更新的视图以处理 INSERT .. VALUES 语句中显式的 DEFAULT 项,其中有多个 VALUES 行
  • 修复 CREATE VIEW 以允许零列视图
  • 添加对 CREATE TABLE IF NOT EXISTS .. AS EXECUTE .. 语句的缺失支持
  • 确保出现在行级安全策略表达式中的子 SELECT 使用正确的用户权限执行
  • 当 xmloption 设置为 content 时,根据 SQL:2006 及更高版本的要求,接受 XML 文档作为 xml 类型的有效值
  • 修复 11.2、10.7、9.6.12、9.5.16 和 9.4.21 中引入的 GIN 索引 WAL 记录的不兼容性,该不兼容性影响了运行这些版本的副本服务器从旧版本的主服务器读取 GIN 索引的更改
  • 多个内存泄漏修复以及动态共享内存管理的修复
  • 在某些情况下,当失败表明“不支持操作”时,放宽对 fsync 和 sync_file_range 失败的恐慌
  • 查询计划器的多个修复,其中一些修复应导致计划改进
  • 修复热备 postmaster 在收到智能关闭请求后可能无法关闭的竞争条件
  • SCRAM 身份验证的多个修复
  • 修复 lc_time 设置的处理,该设置暗示的编码与数据库的编码不同
  • 创建 current_logfiles 文件,使其具有与服务器 data 目录中其他文件相同的权限
  • 多个 ecpg 修复
  • 使 pg_verify_checksums 验证它指向的数据目录是否为正确的 PostgreSQL 版本
  • contrib/postgres_fdw 的多个修复,包括一个用于远程分区的问题,其中 UPDATE 可能导致不正确的结果或崩溃
  • 多个 Windows 修复

此更新还包含 2019a 版本的 tzdata,其中包含巴勒斯坦和梅特拉卡特拉的 DST 法律变更,以及以色列的历史修正。Etc/UCT 现在是 Etc/UTC 的向后兼容链接,而不是生成缩写 UCT 的单独区域,而如今这通常是拼写错误。PostgreSQL 仍然接受 UCT 作为输入区域缩写,但不会输出它。

更新

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

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

PostgreSQL 9.4 将于 2020 年 2 月 13 日停止接收修复。有关更多信息,请参阅我们的版本控制策略

链接