PostgreSQL 全球开发组针对当前所有被支持版本发布了一次更新,版本包括:PostgreSQL 14.3、13.7、12.11、11.16 和 10.21。此次更新修复了一个安全漏洞并修复了过去三个月报告的 50 多个错误。
如果你在使用 ltree 数据类型的列上有任何 GiST 索引,你将需要在升级后重新索引它们。可查看发行说明获取完整变更列表。
值得注意的是,PostgreSQL 10 将于 2022 年 11 月 10 日停止接收修复。如果你在生产环境中运行 PostgreSQL 10,官方建议你计划升级到受支持的 PostgreSQL 更新版本。
CVE-2022-1552:Autovacuum、REINDEX 等省略了“security restricted operation”沙箱。
受影响的版本:10 - 14。安全团队通常不会测试不受支持的版本,但这个问题已经很老了。
Autovacuum、REINDEX、CREATE INDEX、REFRESH MATERIALIZED VIEW、CLUSTER 和 pg_amcheck 在特权用户维护其他用户的对象时,没有完全做到安全操作。这些命令太晚或根本没有激活相关的保护措施。一个有权限在至少一个模式中创建非临时对象的攻击者可以在超级用户的身份下执行任意的 SQL 函数。
虽然及时更新 PostgreSQL 是大多数用户的最佳补救措施,但无法做到这一点的用户可以通过禁用 autovacuum、不手动运行上述命令以及不从pg_dump
命令输出恢复来解决该漏洞。在此解决方法下,性能可能会迅速下降。VACUUM
是安全的,当受信任的用户拥有目标对象时,所有的命令都是好的。
错误修复和改进
下面的列出的问题会影响 PostgreSQL 14,其中一些问题也可能会影响其他受支持的 PostgreSQL 版本:
- 修复了可能导致
ltree
列上的 GiST 索引损坏的问题。升级后,用户需要重新索引ltree
列上的所有 GiST 索引。 - 由
SELECT
列表顶层之外的整行变量(例如tbl.*
)生成的 tuples 中的列名现在总是与关联的命名复合类型(如果有的话)相关联。 - 修复从
interval
类型中提取 epoch 值时不正确的舍入。 - 防止调用
pg_stat_get_replication_slot(NULL)
时出现问题。 - 修复
table_to_xmlschema()
中timestamptz
和timetz
类型的错误输出。 - 修复与影响异步远程查询的计划程序问题相关的错误。
- 如果使用
SEARCH
或CYCLE
功能的查询包含重复的公用表表达式 (WITH
) 名称,则修复规划器故障。 - 修复
ALTER FUNCTION
以支持在同一命令中更改函数的并行属性及其SET
-variable 列表。 - 修复在前导键是表达式的索引上使用
CLUSTER
时对表行的错误排序。 - 如果在 排序 的 GiST 索引构建后不久发生系统崩溃,防止数据丢失。
- 修复删除分区索引时出现死锁失败的风险。
- 修复
DROP TABLESPACE
和 checkpointing 之间的 race condition,该条件可能无法从表空间目录中删除所有死文件。 - 修复
TRUNCATE
与 checkpointing 重叠的命令后崩溃恢复的潜在问题。 - 重新允许
_
作为自定义配置参数名称中的第一个字符。 - 修复 PANIC:当有一个缺失的 WAL 延续记录时,在备用升级期间 xlog 刷新请求未被满足的故障。
- 修复热备冲突处理中出现 self-deadlock 的可能性。
- 确保当服务器接近
max_sync_workers_per_subscription
限制时可以重新启动逻辑复制应用 workers。 - 不允许在 PL/Perl 函数编译期间执行 SPI 函数。
- libpq 现在接受 root 拥有的 SSL 私钥文件,这与服务器自 9.6 版本以来使用的规则相匹配。
- 在 psql、pg_dump 和 pg_amcheck 中重新允许 database.schema.table 模式。
- 对 pageinspect 进行了一些修复,以提高整体稳定性。
- 当外部表上存在
BEFORE INSERT ... FOR EACH ROW
触发器时禁用postgres_fdw
批量插入。 - 更新 JIT 代码以使用 LLVM 14。