PostgreSQL 全球开发小组发布了我们数据库系统所有受支持版本的更新,包括 11.5、10.10、9.6.15、9.5.19 和 9.4.24,以及 PostgreSQL 12 的第三个 Beta 版本。此版本修复了 PostgreSQL 服务器中的两个安全问题、PostgreSQL Windows 安装程序之一中发现的两个安全问题,以及自上次发布以来报告的 40 多个错误。
用户应尽快安装这些更新。
本着开源 PostgreSQL 社区的精神,我们强烈建议您在数据库系统中测试 PostgreSQL 12 的新功能,以帮助我们消除可能存在的任何错误或其他问题。虽然我们不建议您在生产环境中运行 PostgreSQL 12 Beta 3,但我们鼓励您找到方法针对此 Beta 版本运行您典型的应用程序工作负载。
您的测试和反馈将帮助社区确保 PostgreSQL 12 版本维护我们提供世界上最先进的开源关系数据库的稳定、可靠版本的标准。
此版本已修复四个安全漏洞
pg_temp
中的 TYPE
在 SECURITY DEFINER
执行期间执行任意 SQL受影响版本:9.4 - 11
给定一个合适的 SECURITY DEFINER
函数,攻击者可以在函数所有者的身份下执行任意 SQL。攻击需要对函数具有 EXECUTE
权限,该函数本身必须包含一个具有不精确参数类型匹配的函数调用。例如,length('foo'::varchar)
和 length('foo')
是不精确的,而 length('foo'::text)
是精确的。作为利用此漏洞的一部分,攻击者使用 CREATE DOMAIN
在 pg_temp
模式中创建类型。攻击模式和修复类似于 CVE-2007-2138 的模式和修复。
编写 SECURITY DEFINER
函数仍然需要
遵循文档中指出的注意事项
https://postgresql.ac.cn/docs/current/sql-createfunction.html#SQL-CREATEFUNCTION-SECURITY
PostgreSQL 项目感谢 Tom Lane 报告此问题。
受影响版本:11
在包含假设的用户定义哈希相等运算符的数据库中,攻击者可以读取服务器内存的任意字节。要使攻击成为可能,超级用户需要创建不寻常的运算符。对于并非专门为攻击而设计的运算符,有可能具有启用攻击的属性,但我们不知道具体的示例。
PostgreSQL 项目感谢 Andreas Seltenreich 报告此问题。
受影响版本:适用于 9.4 - 11 版本的 EnterpriseDB Windows 安装程序
EnterpriseDB Windows 安装程序将密码写入其安装目录中的临时文件,创建初始数据库,并删除该文件。在该文件存在的几秒钟内,本地攻击者可以从该文件中读取 PostgreSQL 超级用户密码。
PostgreSQL 项目感谢 Noah Misch 报告此问题。
受影响版本:适用于 9.4 - 11 版本的 EnterpriseDB Windows 安装程序
当数据库服务器或 libpq 客户端库初始化 SSL 时,libeay32.dll 尝试从硬编码目录读取配置。通常,该目录不存在,但任何本地用户都可以创建它并注入配置。此配置可以指示 OpenSSL 以运行 PostgreSQL 服务器或客户端的用户身份加载和执行任意代码。大多数 PostgreSQL 客户端工具和库都使用 libpq,并且使用其中任何一个都可能遇到此漏洞。此漏洞与 CVE-2019-5443 非常相似,但它是独立产生的。可以通过将环境变量 OPENSSL_CONF 设置为 "NUL:/openssl.cnf" 或任何其他不存在的文件名来解决此漏洞。
PostgreSQL 项目感谢 curl 安全团队的 Daniel Gustafsson 报告此问题。
此更新还修复了过去几个月报告的 40 多个错误。其中一些问题仅影响版本 11,但许多问题影响所有受支持的版本。
其中一些修复包括
ALTER TABLE ... ALTER COLUMN TYPE
的问题。此问题是在之前的累积更新(11.4、10.9、9.6.14、9.5.18、9.4.23 和 12 beta 2)中引入的。pg_upgrade
。EXISTS
查询中出现重复结果行的并行哈希连接。-infinity
/infinity
端点的日期范围的规范化,以确保行为与文档匹配。money
值转换为 numeric
时丢失小数位的问题。\r
回车符,这在某些极端情况下会导致连接失败。psql
的一些修复,包括避免在 SET variable =
之后出现不正确的制表符补全选项。contrib/amcheck
的索引验证的可靠性。initdb
设置为首选 C 库定义的时区行为,而不是 localtime
或 posixrules
定义的时区行为。这可确保 PostgreSQL 使用“真实”时区名称而不是人为的名称。pg_dump
以确保自定义运算符类以正确的顺序转储,以防止创建不可恢复的转储。pgbench
中可能出现的死锁。此更新还包含 tzdata 版本 2019b,用于巴西的 DST 法律变更,以及香港、意大利和巴勒斯坦的历史修正。此更新还增加了对 zic 新的 -b slim 选项的支持,以减小已安装区域文件的大小,但 PostgreSQL 当前未使用它。
有关更多详细信息,您可以在此处阅读完整的发行说明副本
https://postgresql.ac.cn/docs/release/
所有 PostgreSQL 更新版本都是累积的。与其他次要版本一样,用户无需转储和重新加载数据库或使用 pg_upgrade
即可应用此更新版本;您只需关闭 PostgreSQL 并更新其二进制文件即可。
跳过一个或多个更新版本的用户可能需要运行额外的更新后步骤;有关详细信息,请参阅早期版本的发行说明。
PostgreSQL 9.4 将于 2020 年 2 月 13 日停止接收修复。有关更多信息,请参阅我们的 版本控制策略。
每个 PostgreSQL 版本的稳定性在很大程度上取决于您,社区,使用您的工作负载和测试工具测试即将到来的版本,以便在 PostgreSQL 12 普遍可用之前发现错误和回归。由于这是一个 Beta 版本,数据库行为、功能细节和 API 仍可能发生细微变化。您的反馈和测试将有助于确定新功能的最终调整,因此请在近期进行测试。用户测试的质量有助于确定我们何时可以发布最终版本。
未解决的问题列表在 PostgreSQL wiki 中公开可用。您可以使用 PostgreSQL 网站上的此表单 报告错误
https://postgresql.ac.cn/account/submitbug/
这是 12 版本的第三个 Beta 版本。PostgreSQL 项目将根据测试需要发布额外的 Beta 版本,然后发布一个或多个候选版本,直到 2019 年底的最终版本。有关更多信息,请参阅 Beta 测试 页面。