发布日期: 2014-02-20
这个版本包含各种自9.2.6以来的修复。关于9.2主版本的新特性信息, 请查看第 E.82 节。
支持GRANT ... WITH ADMIN OPTION
约束 (Noah Misch)
授权一个没有ADMIN OPTION
的角色,应该阻止被授予者添加或删除授予角色的成员,
但是这个限制很容易通过首先执行SET ROLE
绕开。
安全影响主要是一个角色成员可以删除其他人的访问权限,
违反它的授予者的意愿。未经允许的角色成员添加是较少关心的,
因为一个不合作的角色成员可以通过创建视图或SECURITY DEFINER
函数提供他的大部分权限给其他人。 (CVE-2014-0060)
阻止通过手动调用PL验证器函数的权限提升 (Andres Freund)
在CREATE FUNCTION
期间,会隐含的调用PL验证器函数的主要角色,
但是它们也是用户可以明确调用的普通SQL函数。
在实际上以其他语言写的函数上调用验证器是不会检查的,
并且会被利用来提升权限。该修复包括在每个验证器函数中添加一个对权限检查函数的调用。
非核心过程语言也需要对它们自己的验证器函数做此修改,如果有的话。
(CVE-2014-0061)
避免表和索引DDL期间查找多个名字 (Robert Haas, Andres Freund)
如果名字查找由于并发活动而有不同的结论,
我们可能会在一个不同的表上执行DDL的某些部分。至少在CREATE INDEX
的情况下,可以利用此来导致在一个不同的表上执行权限检查,
而不是在创建索引的表上,允许权限逃逸攻击。 (CVE-2014-0062)
阻止长的日期时间字符串的缓冲区溢出 (Noah Misch)
MAXDATELEN
常量对于类型interval
的较长可能值来说太小了,
允许interval_out()
中的缓冲区溢出。
尽管日期时间输入函数很小心的避免缓冲区溢出,
但是该限制足够短,导致它们拒绝一些有效的输入,比如包含非常长的时区名的输入。
ecpg库包含这些缺陷还有一些它自己的缺陷。
(CVE-2014-0063)
阻止由于尺寸计算中整数溢出而引起的缓冲区溢出 (Noah Misch, Heikki Linnakangas)
几个函数,大多数是类型输入函数,计算一个分配尺寸而不检查溢出。 如果确实发生了溢出,将会分配一个很小的缓冲区然后写进去。 (CVE-2014-0064)
阻止固定尺寸缓冲区的溢出 (Peter Eisentraut, Jozef Mlich)
使用strlcpy()
和相关的函数提供一个清楚的保证:
固定大小的缓冲区不会溢出。不像之前的条款,不清楚这些情况是否真正代表实际问题,
因为在大多数情况下,这好像是以前在输入字符串尺寸上的限制。
不管怎样,关闭所有这种类型的Coverity警告看起来是明智的。
(CVE-2014-0065)
如果crypt()
返回NULL,避免崩溃 (Honza Horak, Bruce Momjian)
有相对较少的情况crypt()
会返回NULL,但是如果发生,
contrib/chkpass
会崩溃。这是一个问题的一个实际案例是,
如果libc配置为拒绝执行未经批准的哈希算法
(如“FIPS 模式”)。 (CVE-2014-0066)
在回归测试指令中记录make check
风险 (Noah Misch, Tom Lane)
因为make check
启动的临时服务器使用“trust”认证,
同一台机器上的另一个用户可以作为数据库超级用户连接到它,
然后潜在的暴露启动该测试的操作系统用户的权限。
将来的版本可能会在测试程序中包含修改,以阻止这个风险,
但是首先需要一些公众讨论。所以目前为止,只是警告用户在相同的机器上有不受信任的用户时,
不要使用make check
。 (CVE-2014-0067)
修复一个关系的某些段不是全尺寸时,WAL记录可能的错误重放 (Greg Stark, Tom Lane)
WAL更新可能会应用到错误的页面,可能会错过很多页面。除了损坏数据外, 还观察到这个错误会导致备用服务器大大的“膨胀”, 因为应用的更新远远超出了文件的末尾。这个故障模式在崩溃恢复时不是一个重要风险, 仅在初始化同步一个从快速更新的主服务器创建的基础备份创建备用服务器时很重要。
修复决定恢复何时达到一致的bug (Tomonari Katsumata, Heikki Linnakangas)
在某些情况下,在重放刚刚开始的时候,WAL重放会错误的推断数据库已经一致, 因此可能会在数据库真正达到一致之前允许热备份查询。其他症状,比如 “PANIC: WAL contains references to invalid pages”也是有可能的。
修复在热备份模式重放VACUUM
操作时,不适当的锁定btree索引页
(Andres Freund, Heikki Linnakangas, Tom Lane)
这个错误会导致“PANIC: WAL contains references to invalid pages”失败。
确保到非叶子GIN索引页的插入在合适时写入一个全页WAL记录 (Heikki Linnakangas)
以前的代码在系统崩溃期间部分页写入时会有索引损坏的风险。
当pause_at_recovery_target
和recovery_target_inclusive
都设置了时,确保目标记录在暂停之前应用 (Heikki Linnakangas)
修复服务器进程退出期间的竞态条件 (Robert Haas)
确保信号处理器在失效后,不再尝试使用进程的MyProc
指针。
修复walsender关闭逻辑和walreceiver SIGHUP信号处理器中的竞态条件 (Tom Lane)
修复错误报告逻辑中对errno
的不安全引用 (Christian Kruse)
这通常会导致奇怪的行为,比如丢失或不恰当的HINT
字段。
修复在服务器启动期间太早的使用ereport()
时可能的崩溃 (Tom Lane)
在这块我们见到的主要情况就是如果服务器在一个它没有权限读取的目录中启动, 那么会崩溃。
适当的清理OpenSSL套接字写函数中的重试标记 (Alexander Kukushkin)
这个疏忽会导致在意外的丢失SSL加密的连接之后服务器查找。
修复包含逃逸的Unicode标识符(U&"..."
语法)长度检查 (Tom Lane)
如果标识符的逃逸格式太长,那么会打印一个虚假的截断警告, 但是该标识符在解逃逸之后,实际上并不需要截断。
允许类型名关键字在角色列表中使用 (Stephen Frost)
以前的一个补丁允许这样的关键字不加引用的在这样的地方比如角色标识符中使用;
但是它忽略了角色标识符列表的情况,比如DROP ROLE
。
修复EXISTS(SELECT * FROM zero_column_table)
的解析器崩溃 (Tom Lane)
修复由于嵌套子查询的无效规划而引起的可能的崩溃,比如
WHERE (... x IN (SELECT ...) ...) IN (SELECT ...)
(Tom Lane)
修复拥有UNION ALL
子查询的继承目标表的
UPDATE/DELETE
(Tom Lane)
没有这个修复,UNION ALL
子查询不能正确的插入到第一个继承子表之后的表的更新规划中,
通常导致这些子表中没有更新发生。
确保ANALYZE
为表字段创建统计,即使它里面的所有值都“太宽”
(Tom Lane)
ANALYZE
故意的在它的直方图和大多数共同值计算中忽略非常宽的值,
但是它忽视了要做一些扫描的情况,就是所有抽样数据都太宽的情况。
在ALTER TABLE ... SET TABLESPACE
中,
允许不检查权限就使用数据库的缺省表空间 (Stephen Frost)
CREATE TABLE
总是允许这样的用法,但是ALTER TABLE
不是。
修复CASE
的一些分支返回一个集合而其他分支的不返回集合时的
“cannot accept a set”错误 (Tom Lane)
在生成JSON输出时,正确的区分来自非数字的数字 (Andrew Dunstan)
修复pgstat函数中所有零客户端地址的检查 (Kevin Grittner)
修复文本搜索解析器对多字节字符可能的错误分类 (Tom Lane)
在使用C环境的多字节编码时,非ASCII字符可能会被错误分类。 在Cygwin上,非C环境也有可能会失败。
修复plainto_tsquery()
中可能的错误行为 (Heikki Linnakangas)
使用memmove()
而不是memcpy()
拷贝重复的内存区域。
还没有这会实际导致问题的报告,但是它确实有风险。
修复pg_start_backup()
和pg_stop_backup()
中权限检查的定位 (Andres Freund, Magnus Hagander)
以前的代码可能会在不适当的时候尝试做目录访问。
接受SHIFT_JIS
作为本地检查目的的编码名 (Tatsuo Ishii)
修复SQL语言函数中命名参数的*
限制 (Tom Lane)
给出一个名为foo
的复合类型参数,$1.*
运行的很好,但是foo.*
不行。
修复Windows上PQhost()
的错误行为 (Fujii Masao)
如果没有指定主机,它应该返回localhost
。
为COPY TO STDOUT/FROM STDIN
期间的失败,改善libpq
和psql中的错误处理 (Tom Lane)
特别的,这修复了一个在9.2及更高版本中可能发生的无限循环,
如果在COPY FROM STDIN
期间丢失服务器连接。
这种情况的变体可能会在较老版本或其他客户端应用中发生。
修复一些psql \d
命令中不正确的翻译处理
(Peter Eisentraut, Tom Lane)
确保退出pg_basebackup的前端进程时杀死它的后端进程 (Magnus Hagander)
修复pg_basebackup的冗长模式中,可能不正确的文件名输出 (Magnus Hagander)
避免在基础备份的PGDATA中包含表空间两次 (Dimitri Fontaine, Magnus Hagander)
修复ecpg中不整齐的描述符 (MauMau)
在ecpg中,正确的处理连接参数中主机名的缺少 (Michael Meskes)
修复contrib/dblink
连接启动中的性能回归 (Joe Conway)
当客户端和服务器编码匹配时,避免不必要的往返。
在contrib/isn
中,修复ISMN值的检查位的不正确计算 (Fabien Coelho)
修复contrib/pg_stat_statement
对CURRENT_DATE
和相关构造的处理 (Kyotaro Horiguchi)
确保仅客户端的编码安装程序像记录中那样运行 (Peter Eisentraut)
在Mingw和Cygwin建立中,在bin
目录下安装libpq DLL
(Andrew Dunstan)
这重复了MSVC建立很久以来的做法。它应该修复程序像psql 未能启动的问题,因为它们不能找到该DLL。
避免在Cygwin建立中使用废弃的dllwrap
工具 (Marco Atzeri)
不再生成纯文本HISTORY
和src/test/regress/README
文件 (Tom Lane)
这些文本文件重复了主要HTML和PDF文档格式。问题在于维护它们大大的超过了纯文本格式。
发布包将仍然包含这些名字的文件,但是它们只是指导读者咨询主文档。
将仍然维护纯文本INSTALL
文件,因为它可能有用户用例。
更新时区数据文件到tzdata版本2013i, 因为DST规律在约旦发生了改变还有古巴的历史修改。
另外,时区Asia/Riyadh87
、Asia/Riyadh88
和Asia/Riyadh89
已经删除了,因为IANA不再维护它们了,
并且不再代表实际民用计时。