PostgreSQL 全球开发组针对当前所有被支持版本发布了一次更新,版本包括:15.4、14.9、13.12、12.16 和 11.21,以及 PostgreSQL 16 的第三个测试版。此版本修复了两个安全漏洞并修复了过去几个月报告的 40 多个 bug。
如果你使用 BRIN 索引来查找NULL
值, 则升级到此版本后需要重新索引它们。在 PostgreSQL 12 及更高版本上,你可以使用 REINDEX CONCURRENTLY
以避免阻止对受影响的索引和表的写入,例如:REINDEX INDEX CONCURRENTLY your_index_name;
有关更改的完整列表,可查看 发行说明。
PostgreSQL 11 EOL 通知
PostgreSQL 11 将于 2023 年 11 月 9 日停止接收修复。如果你在生产环境中运行 PostgreSQL 11,建议制定计划升级到更新的受支持版本的 PostgreSQL。参阅版本控制政策以获取更多信息。
安全问题
CVE-2023-39417 :引用中的扩展脚本@substitutions@
允许 SQL 注入。
支持的、易受攻击的版本:11 - 15。安全团队通常不会测试不受支持的版本,但这个问题已经存在很久了。
如果扩展脚本在 quoting 结构 (dollar quoting, ''
, or ""
) 内使用 @extowner@
、@extschema@
或@extschema:...@
,则容易受到攻击。没有捆绑的扩展名存在漏洞。在文档示例和非捆绑扩展中确实存在漏洞。因此,攻击的先决条件是管理员安装了易受攻击的、受信任的、非捆绑扩展的文件。在这一前提条件下,拥有数据库级CREATE
权限的攻击者就能以引导超级用户身份执行任意代码。PostgreSQL 将在核心服务器中阻止这种攻击,因此无需修改个别扩展。
CVE-2023-39418:MERGE
无法强制执行UPDATE
或SELECT
行安全策略。
支持的、易受攻击版本:15。
PostgreSQL 15 引入了MERGE
命令,该命令无法根据为UPDATE
和SELECT
定义的行安全策略测试新行 。如果UPDATE
和SELECT
策略禁止某些行,而INSERT
策略不禁止,则用户可以存储此类行。后续后果取决于应用程序。这仅影响用于CREATE POLICY
定义行安全策略的数据库。
错误修复和改进
下面列出的问题会影响 PostgreSQL 15,其中一些问题也可能会影响其他受支持的 PostgreSQL 版本。
- 修复了 BRIN 索引中
NULL
值的处理。此修复不适用于现有 BRIN 索引 - 用户将需要运行REINDEX
来修复任何用于搜索 NULL 值的 BRIN 索引。 - 避免在 DROP DATABASE 中断时留下损坏的数据库。
- 针对分区索引的多项修复。
- 修复如果扩展包含扩展架构之外的任何对象的
ALTER EXTENSION ... SET SCHEMA
错误。 - 修复表访问方法的依赖性跟踪。
- 不要在规划器中使用部分唯一索引来证明唯一性。
- 扩展规则操作时,正确处理 RLS 策略表达式和 security-barrier 视图中的子 SELECT。
- 修复
SERIALIZABLE
事务隔离模式冲突检测中的 race conditions。 - 修复尝试更新需要 out-of-line TOASTing 的复合列的字段时出现的间歇性故障。
- 修复查询生命周期中发生的多个内存泄漏。
- 在 jsonpath
datetime()
方法的输入中接受小数秒 。 - 将
pg_hba.conf
和pg_ident.conf
中的 token 限制增至 10,240 字节。 - JIT 的内存不足错误现在将导致 PostgreSQL
FATAL
错误而不是 C++ 异常。 - 允许在检测到某些类型的 B-tree 索引损坏后继续使用
VACUUM
。虽然此修复允许 VACUUM 继续,但用户仍然需要REINDEX
修复损坏的索引。 - 避免在崩溃恢复期间 double replay 已准备好的事务。
- 确保新创建空表上的 checkpoint calls fsync。
- Silence“missing contrecord”错误,以避免记录来自
pg_waldump
和walsender
的不准确消息。 - 修复 [fuzzystrmatch] (https://www.postgresql.org/docs/current/fuzzystrmatch.html Soundex
difference()
函数以正确处理空输入。 - 针对
intarray
的若干修复,包括禁止在 GiST 索引中使用过大的输入数组。 - 修复
pg_dump
以正确处理需要解析时依赖于唯一索引的SQL 标准函数体 (BEGIN ATOMIC
)。
有关可用更改的完整列表,可查看 发行说明。
PostgreSQL 16 Beta 3 中的修复
- 在
psql
中添加\drg
命令,以显示有关角色授权信息。 - 在使用
pg_waldump --save-fullpage
生成的文件名中添加 timeline ID。 - 修复 parallel VACUUM worker 中发生死锁后的崩溃问题。
参阅发行说明以获取新功能和更改功能的完整列表。
下载地址:https://www.postgresql.org/download/