【IT168 资讯】近日,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:启动脚本允许数据库管理员修改根拥有的文件
CVE-2017-15098:JSON函数中的内存泄露
CVE-2017-15099:INSERT ... ON CONFLICT DO UPDATE无法强制执行SELECT权限
CVE-2017-12172:启动脚本允许数据库管理员修改根拥有的文件
在此版本之前,postmaster(在较新的版本中,"postgres")进程的启动日志文件已被打开,而进程仍由root拥有。通过这种设置,数据库所有者可以指定一个他们没有访问的文件,并导致该文件被记录的数据损坏。
此修复程序可确保以用户指定的方式打开启动日志文件,运行PostgreSQL服务器。任何使用启动脚本的用户都需要确保启动日志文件是由指定用户运行PostgreSQL服务器的用户拥有的。
CVE-2017-15099:INSERT ... ON CONFLICT DO UPDATE无法强制执行SELECT权限
在此版本之前,"INSERT ... ON CONFLICT DO UPDATE"不会检查执行用户是否有权在执行冲突检查的索引上执行"SELECT"。此外,在启用了行级别安全性的表中,执行更新之前,"INSERT ... ON CONFLICT DO UPDATE"不会检查该表的SELECT策略。
此修复程序确保"INSERT ... ON CONFLICT DO UPDATE"在执行前根据表权限和RLS策略进行检查。
错误修复和改进
此更新还修复了过去几个月中报告的一些错误。其中有一些问题仅影响版本10,但也有一些会影响所有受支持的版本:
修正BRIN索引中的竞争条件,可能会导致某些行不包含在索引中。
修复从PL语言函数调用逻辑解码时的崩溃。
修复数个逻辑复制。
对于在版本10之前的CTE 附加INSERT / UPDATE / DELET。
防止处理嵌套触发器时的低概率崩溃。
当FILTER子句中的条件评估为FALSE时,不要评估聚合函数的参数表达式,符合SQL标准。
当多个GROUPING SETS列包含相同的简单变量时,修复不正确的查询结果。
从SELECT的目标列表中评估设置返回函数时,修复查询生命周期内存泄漏。
并行查询执行的一些修复,包括在包含特定类型的位图扫描的某些查询并行执行中修复崩溃。
修复json_build_array(),json_build_object(),jsonb_build_array()和jsonb_build_object()来正确处理显式的VARIADIC参数。
防止将无限的浮点值转换为数字类型。
修复autovacuum的“工作项目”逻辑,防止可能的崩溃和工作项目的无声丢失。
对于在视图的末尾添加列VIEW的修正。
修复由用户创建范围的数据类型的可测性检测。
为了查询计划的目的而对列使用扩展统计的改进。
当更早发生statement_timeout时,防止忽略idle_in_transaction_session_timeout。
修复在会话中执行任何查询之前由于超过20亿个事务处理而导致的NOTIFY消息的低概率丢失。
多个文件系统交互修复。
在COPY或lo_export()文件创建失败时,正确地恢复umask设置。
修复pg_dump以确保它以有效的顺序发出GRANT命令。
修复pg_basebackup的表空间路径匹配,在比较之前对两个路径进行规范化,以帮助提高Windows兼容性。
修正libpq在试图读取“?/ .pgpass”文件时不要求用户的主目录存在。
对ecpg的多个修复。
关于9.2版的EOL声明
PostgreSQL 9.2版本生命周期结束(EOL)。此版本的社区不会发布其他更新或安全修补程序,所以使用9.2版本的用户一定要尽快升级。