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

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

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

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

使用 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 多个 bug。其中一些问题仅影响版本 11,但许多问题会影响所有受支持的版本。

部分修复包括:

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

此次更新还包含 tzdata 2019a 版本,用于更新巴勒斯坦和 Metlakatla 的 DST 法律变更,以及以色列的历史数据修正。Etc/UCT 现在是 Etc/UTC 的向后兼容链接,而不是一个生成现在通常是拼写错误的缩写 UCT 的独立时区。PostgreSQL 仍将接受 UCT 作为输入时区缩写,但不会输出它。

更新

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

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

PostgreSQL 9.4 将于 2020 年 2 月 13 日停止接收修复。请参阅我们的 版本策略 以获取更多信息。

链接