发布日期:. 2008-01-07
这个版本包含各种自8.1.10以来的修复,包括对重要安全问题的修复。 关于8.1主版本的新特性信息,请查看第 E.226 节。
这是PostgreSQL社区为Windows 生成二进制包的最后一个8.1.X版本。鼓励Windows用户迁移到8.2.X或更高的版本, 因为在8.2.X中有Windows特定的不可移植的修复。8.1.X将继续支持其他平台。
运行8.1.X的用户不需要转储/恢复。不过,如果你是从一个早于8.1.2的版本升级而来, 那么请查看第 E.224 节。
阻止索引中的函数用用户运行VACUUM
、ANALYZE
等的权限执行 (Tom)
在索引表达式和部分索引谓词中使用的函数在制作一个新的表条目时评估。
很早我们就知道,如果一个人修改了一个属于不可信用户的表,那么会引起特洛伊木马执行的风险。
(请注意,触发器、缺省、检查约束等也会引起相同类型的风险。)
但是索引中的函数还会引起额外的危险,因为它们将被日常维护操作执行,比如
VACUUM FULL
,它通常是在超级用户账户下自动执行的。例如,
一个邪恶的用户可以通过设置一个特洛伊木马索引定义并且等待下一个日常清理,
使用超级用户的权限执行代码。该修复安排标准的维护操作(包括VACUUM
、
ANALYZE
、REINDEX
和CLUSTER
)
作为表所有者而不是调用的用户执行,使用和早已为SECURITY DEFINER
函数使用的一样的权限转换机制。为了阻止绕开这个安全机制,
SET SESSION AUTHORIZATION
和SET ROLE
的执行现在禁止在一个SECURITY DEFINER
内容中。 (CVE-2007-6600)
修复正则表达式包中的各种bug (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 (特别的,最近的Argentina的改变) (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年的间隔修复extract(epoch from interval)
中的溢出 (Tom)
修复PL/Perl,以在UTF-8正则表达式在一个受信任的函数中使用时不失败 (Andrew)
修复PL/Perl处理何时平台的Perl定义类型bool
为int
,
而不是char
(Tom)
理论上这会在任何地方发生,非标准的Perl建立是这样的……直到macOS 10.5。
修复PL/Python在长的异常消息上不会崩溃 (Alvaro)
修复pg_dump以正确的处理拥有与它们的父表不同的缺省表达式的继承子表 (Tom)
修复PGPASSFILE
引用一个不是普通文件的文件时
libpq的崩溃 (Martin Pitt)
ecpg解析器修复 (Michael)
让contrib/pgcrypto
防止OpenSSL库在键长于128位时失败;
这至少是在一些Solaris版本上的情况 (Marko Kreen)
让contrib/tablefunc
的crosstab()
处理NULL行id为它本身的一个类别,而不是崩溃 (Joe)
修复tsvector
和tsquery
输出例程,以正确的转义反斜杠 (Teodor, Bruce)
修复to_tsvector()
在大的输入字符串上的崩溃 (Teodor)
当重新生成configure
脚本时,要求使用Autoconf
的一个特定版本 (Peter)
这只影响开发者和打包者。该修改是为了阻止意外的使用未测试的 Autoconf和PostgreSQL版本的组合。 如果你真的想要使用一个不同的Autoconf版本, 你可以删除版本校验,但是结果如何就是你自己的责任了。