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 的用户也应尽快计划升级。
所有其他用户应在下次计划的停机时间内应用此更新。
此次发布解决了四个安全漏洞
由于 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 相关的修复txid_status() 中可能出现的“无法访问事务状态”的失败INSERT .. VALUES 语句中处理显式 DEFAULT 项CREATE TABLE IF NOT EXISTS .. AS EXECUTE .. 语句的缺失支持lc_time 设置与数据库编码不一致时导致的编码问题data 目录中其他文件相同的权限创建 current_logfiles 文件pg_verify_checksums 验证其指向的数据目录是否为正确的 PostgreSQL 版本contrib/postgres_fdw 修复,包括一个关于远程分区的问题,在该问题中 UPDATE 可能导致结果不正确或崩溃此次更新还包含 tzdata 2019a 版本,用于更新巴勒斯坦和 Metlakatla 的 DST 法律变更,以及以色列的历史数据修正。Etc/UCT 现在是 Etc/UTC 的向后兼容链接,而不是一个生成现在通常是拼写错误的缩写 UCT 的独立时区。PostgreSQL 仍将接受 UCT 作为输入时区缩写,但不会输出它。
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户不需要转储和重新加载数据库或使用 pg_upgrade 来应用此更新版本;您可以直接关闭 PostgreSQL 并更新其二进制文件。
跳过了一个或多个更新版本的用户可能需要执行额外的、更新后的步骤;有关详细信息,请参阅早期版本的发布说明。
PostgreSQL 9.4 将于 2020 年 2 月 13 日停止接收修复。请参阅我们的 版本策略 以获取更多信息。