E.84. 版本 8.1.11 #
发行日期
2008-01-07
此发行版包含 8.1.10 之后的多种修复,包括对重要安全问题的修复。有关 8.1 主版本新特性的信息,请参阅第 E.95 节。
这是 PostgreSQL 社区为 Windows 制作二进制包的最后一个 8.1.X 版本。建议 Windows 用户迁移到 8.2.X 或更高版本,因为 8.2.X 中有一些不便于向后移植的 Windows 特定修复。8.1.X 在其他平台上将继续受支持。
E.84.1. 迁移到版本 8.1.11
对于运行 8.1.X 的用户,不需要进行转储/恢复。不过,如果你是从早于 8.1.2 的版本升级,请参阅第 E.93 节。
E.84.2. 变更
防止索引中的函数以运行
VACUUM、ANALYZE等的用户的权限执行(Tom)每当产生新的表条目时,都会求值索引表达式和部分索引谓词中使用的函数。人们早就明白,如果修改不可信用户拥有的表,这会带来特洛伊木马代码执行的风险。(注意触发器、默认值、检查约束等也构成同类风险。)但索引中的函数带来额外危险,因为它们会由例程维护操作(如
VACUUM FULL)执行,而这些操作通常在超级用户账户下自动执行。例如,恶意用户可以通过设置特洛伊木马索引定义并等待下一次例程清理来以超级用户权限执行代码。修复安排标准维护操作(包括VACUUM、ANALYZE、REINDEX和CLUSTER)以表所有者而非调用用户的身份执行,使用已用于SECURITY DEFINER函数的同一权限切换机制。为防止绕过此安全措施,现在禁止在SECURITY DEFINER上下文中执行SET SESSION AUTHORIZATION和SET ROLE。(CVE-2007-6600)修复正则表达式包中的若干缺陷(Tom、Will Drewry)
精心构造的正则表达式模式可能导致崩溃、无限或接近无限的循环和/或大量内存消耗,这些都对接受来自不可信来源的正则搜索模式的应用程序构成拒绝服务风险。(CVE-2007-4769、CVE-2007-4772、CVE-2007-6067)
作为安全措施,要求使用
/contrib/dblink的非超级用户只使用口令认证(Joe)8.1.10 中出现的修复并不完整,它只堵住了部分
dblink函数的漏洞。(CVE-2007-6601、CVE-2007-3278)更新时区数据文件到 tzdata 发行版 2007k(特别是阿根廷最近的变更)(Tom)
改进规划器在非 C 区域设置下对 LIKE/正则表达式估计的处理(Tom)
修复某些
WHERE false AND var IN (SELECT ...)情形下的规划器失败(Tom)保留被
ALTER TABLE ... ALTER COLUMN TYPE重建的索引的表空间(Tom)让归档恢复总是开始新的 WAL 时间线,而不是只在使用恢复停止时间时(Simon)
这避免了试图覆盖最后一个 WAL 段现有归档副本的极端情形风险,而且看起来比原来的定义更简单干净。
当表太小而不适用时,让
VACUUM不使用全部maintenance_work_mem(Alvaro)修复使用多字节数据库编码时
translate()可能的崩溃(Tom)修复超过 68 年的 interval 在
extract(epoch from interval)中的溢出(Tom)修复 PL/Perl 在可信函数中使用 UTF-8 正则表达式时不失败(Andrew)
修复 PL/Perl 在平台 Perl 把
bool类型定义为int而非char时的问题(Tom)虽然理论上这可能在任何地方发生,但没有标准 Perl 构建这样做……直到 Mac OS X 10.5。
修复 PL/Python 在长异常消息上不崩溃(Alvaro)
修复 pg_dump,使其正确处理默认表达式与父表不同的继承子表(Tom)
修复
PGPASSFILE指向非普通文件时 libpq 的崩溃(Martin Pitt)ecpg 解析器修复(Michael)
让
contrib/pgcrypto防御在超过 128 位密钥上失败的 OpenSSL 库——至少某些 Solaris 版本是这种情形(Marko Kreen)让
contrib/tablefunc的crosstab()把 NULL rowid 本身作为一个类别处理,而不是崩溃(Joe)修复
tsvector和tsquery输出例程以正确转义反斜杠(Teodor、Bruce)修复
to_tsvector()在超长输入字符串上的崩溃(Teodor)要求在重新生成
configure脚本时使用特定版本的 Autoconf(Peter)这只影响开发者和打包者。此变更是为了防止意外使用未经测试的 Autoconf 与 PostgreSQL 版本组合。如果确实想使用不同的 Autoconf 版本,可以移除版本检查,但结果是否可用由你自己负责。