PostgreSQL 10.1、9.6.6、9.5.10、9.4.15、9.3.20 和 9.2.24 发布!
发布于 2017-11-09,由 PostgreSQL 全球开发组发布
社区 PostgreSQL 项目
PostgreSQL 全球开发组发布了其数据库系统所有受支持版本的更新,包括 10.1、9.6.6、9.5.10、9.4.15、9.3.20 和 9.2.24。本次发布修复了三个安全问题。本次发布还修复了 BRIN 索引、逻辑复制以及过去三个月报告的其他错误中发现的问题。
所有使用受影响版本 PostgreSQL 的用户都应尽快更新。如果您使用 BRIN 索引或 contrib/start-scripts,请参阅发行说明以了解额外的升级后步骤。
安全问题
本次发布修复了三个安全漏洞
CVE-2017-12172:启动脚本允许数据库管理员修改 root 拥有的文件
在此版本之前,postmaster(在新版本中为 "postgres")进程的启动日志文件是在该进程仍由 root 拥有时打开的。在这种设置下,数据库所有者可以指定一个他们无权访问的文件,并导致该文件被日志数据损坏。
此修复确保启动日志文件以运行 PostgreSQL 服务器的用户身份打开。任何使用过启动脚本的用户都需要确保启动日志文件归运行 PostgreSQL 服务器的用户所有。
CVE-2017-15099:INSERT ... ON CONFLICT DO UPDATE 未能强制执行 SELECT 权限
在此版本之前,“INSERT ... ON CONFLICT DO UPDATE” 不会检查执行用户是否具有对执行冲突检查的索引执行“SELECT”的权限。此外,在启用了行级安全性(RLS)的表中,“INSERT ... ON CONFLICT DO UPDATE” 在执行更新之前不会检查该表的 SELECT 策略。
此修复确保“INSERT ... ON CONFLICT DO UPDATE” 在执行前会检查表权限和 RLS 策略。
错误修复和改进
本次更新还修复了过去几个月报告的许多错误。其中一些问题仅影响版本 10,但许多问题影响所有受支持的版本。
- 修复了 BRIN 索引中的竞态条件,该条件可能导致某些行未包含在索引中。
- 修复了从 PL 语言函数调用逻辑解码时发生的崩溃。
- 对逻辑复制进行了多项修复。
- 恢复了 CTE(公共表表达式)附加到 INSERT/UPDATE/DELETE 语句的行为,使其恢复到 10 版本之前的状态。
- 防止在处理嵌套触发器触发时发生的低概率崩溃。
- 当 FILTER 子句中的条件评估为 FALSE 时,不评估聚合函数的参数表达式。这符合 SQL 标准行为。
- 修复了当多个 GROUPING SETS 列包含相同的简单变量时出现的查询结果不正确的问题。
- 修复了在 SELECT 的目标列表中评估返回集函数时,查询生命周期内的内存泄露。
- 对并行查询执行进行了多项修复,包括修复了包含特定类型位图扫描的某些查询在并行执行时发生的崩溃。
- 修复了 json_build_array()、json_build_object()、jsonb_build_array() 和 jsonb_build_object() 以正确处理显式的 VARIADIC 参数。
- 防止无限浮点数值被转换为 numeric 类型。
- 修复了 autovacuum 的“工作项”逻辑,以防止可能的崩溃和工作项的静默丢失。
- 对 VIEWs 进行了多项修复,涉及在视图末尾添加列。
- 修复了用户创建的范围数据类型的可哈希性检测。
- 改进了在查询规划中使用列的扩展统计信息。
- 防止在语句超时(statement_timeout)之前发生时,idle_in_transaction_session_timeout 被忽略。
- 修复了由于会话中执行任何查询之前处理了超过 20 亿个事务而导致 NOTIFY 消息丢失的低概率问题。
- 对文件系统交互进行了多项修复。
- 在 COPY 或 lo_export() 中文件创建失败时,正确恢复 umask 设置。
- 修复 pg_dump 以确保其按照有效顺序发出 GRANT 命令。
- 修复 pg_basebackup 对表空间路径的匹配,通过规范化两个路径后再进行比较,以提高 Windows 兼容性。
- 修复 libpq,使其在尝试读取 "~/.pgpass" 文件时不需要用户主目录存在。
- 对 ecpg 进行了多项修复。
本次更新还包含 tzdata 2017c 版本,更新了斐济、纳米比亚、北塞浦路斯、苏丹、汤加和特克斯和凯科斯群岛的时区信息,以及对阿拉斯加、阿皮亚、缅甸、加尔各答、底特律、爱尔兰、纳米比亚和帕果帕果的历史性修正。
9.2 版本生命周期结束通知
PostgreSQL 9.2 版本现已生命周期结束 (EOL)。社区将不再为该版本发布任何额外的更新或安全补丁。仍在使用 9.2 的用户请尽快升级。有关更多信息,请参阅我们的 版本策略。
链接