E.11.版本 10.3

发布日期: 2018-03-01

此版本包含自 10.2 起的各种修复程序。有关主要版本 10 中新功能的信息,请参阅Section E.14

E.11.1. 迁移到版本 10.3

运行 10.X 的用户不需要转储/还原。

但是,如果在并非所有用户都相互信任的环境中运行安装,或者维护打算在任意情况下使用的应用程序或扩展,则强烈建议您阅读下面第一个 changelog 条目中描述的文档更改,并采取适当的步骤来确保您的安装或代码安全。

同样,下面第二个更改日志条目中描述的更改可能会导致索引表达式或实例化视图中使用的函数在自动分析期间或从转储重新加载时失败。升级后,监视服务器日志中是否存在此类问题,并修复受影响的功能。

另外,如果要从 10.2 之前的版本升级,请参见Section E.12

E.11.2. Changes

使用search_path设置(包括敌对用户可写的任何架构)可以使该用户捕获对查询的控制,然后在受攻击用户的许可下运行任意 SQL 代码。尽管可以编写证明可以防止此类劫持的查询,但从概念上讲这是乏味的,而且很容易忽略漏洞。因此,我们现在建议配置在搜索路径中不出现不可信模式的配置。相关文档显示在Section 5.8.6(对于数据库 Management 员和用户),Section 33.1(对于应用程序作者),Section 37.15.1(对于扩展作者)和CREATE FUNCTION(对于SECURITY DEFINER函数的作者)中。 (CVE-2018-1058)

pg_dump,pg_upgrade,vacuumdb 和其他 PostgreSQL 提供的应用程序本身容易受到上一个 changelog 条目中描述的劫持类型的攻击;由于这些应用程序通常由超级用户运行,因此它们提出了特别有吸引力的目标。为了使它们安全,无论安装是否整体安全,请将它们修改为仅在它们的search_path设置中包括pg_catalog模式。 Autovacuum worker 进程现在也执行相同的操作。

如果这些程序间接执行用户提供的功能(例如,索引表达式中的用户提供的功能),则search_path越小可能会导致错误,需要通过调整这些用户提供的功能来纠正这些错误,以使其不承担任何责任关于它们将在哪些搜索路径下调用。一直以来,这都是很好的做法,但是现在对于正确的行为将是必要的。 (CVE-2018-1058)

标记为FOR ALL TABLES的发布将错误地运送物化视图和information_schema表中的更改,这些更改应该从更改流中省略。

如果在 InitPlan 或 SubPlan 中使用了 CTE(WITH子句引用),并且由于试图更新或锁定并发更新的行而需要重新检查查询,则可能会得到错误的结果。

这些错误导致在特殊情况下“左路径键和右路径键在 mergejoin 中不匹配”或“外部路径键不与 mergeclauses”匹配的计划程序错误。

升级后,这种疏忽可能导致物化视图中的数据损坏,表现为“无法访问事务状态”或“在 relfrozenxid 之前发现 xmin”错误。很少刷新的物化视图或仅使用REFRESH MATERIALIZED VIEW CONCURRENTLY维护的视图更可能出现此问题。

如果发现这种损坏,可以通过刷新实例化视图(不使用CONCURRENTLY)进行修复。

扩展统计信息对象的架构在转储的目录中被错误标记,可能导致架构选择性还原的错误结果。也没有正确恢复其所有权。此外,更改逻辑,以便将统计对象作为独立对象转储/还原,或不作为独立对象,而不是将其绑定到所在表的转储/还原决定中。原始定义无法扩展到跨表统计信息的计划扩展范围。

嵌套的 PL/Python 函数调用中发生错误(即,通过另一个 PL/Python 函数的 SPI 查询到达的错误)将导致堆栈跟踪显示两次内部函数的名称,而不是预期的结果。同样,在某些平台上,嵌套的 PL/Python DO块中的错误可能导致空指针取消引用崩溃。

上一章 首页 下一章