E.121. 版本 8.1.4

发布日期: 2006-05-23

这个版本包含各种自8.1.3以来的修复,包括对极其严重的安全问题的修补。 关于8.1主版本的新特性信息,请查看Section E.125

E.121.1. 迁移到版本 8.1.4

运行8.1.X的用户不需要转储/恢复。不过,如果你是从一个早于8.1.2的版本升级而来, 那么请查看8.1.2的版本声明。

针对CVE-2006-2313和CVE-2006-2314中描述的SQL注入攻击的完全安全可能需要在应用的代码中修改。 如果你有应用嵌入了不可信的字符串到SQL命令中,你应该尽快检测它们, 以确保它们使用推荐的逃逸技术。在大多数情况下,应用应该使用库或驱动 (比如libpq的PQescapeStringConn()) 提供的子例程执行字符串逃逸,而不是依赖于ad hoc代码完成逃逸。

E.121.2. 修改列表

  • 修改服务器以在所有情况下都拒绝无效编码的多字节字符 (Tatsuo, Tom)

    虽然PostgreSQL已经朝这个方向发展了一段时间了, 但是检查现在才一致的应用到所有编码和所有文本输入中, 并且现在总是提示错误而不只是警告。这个修改防范了CVE-2006-2313 中描述的SQL注入类型的攻击。

  • 拒绝在字符串文本中不安全的使用\'

    作为服务器端防范CVE-2006-2314中描述的SQL注入类型的攻击, 服务器现在只接受''而不是\' 作为SQL字符串字面值中ASCII单引号的表示。缺省的, 只在client_encoding设置为仅客户端的编码 (SJIS、BIG5、GBK、GB18030或UHC)时拒绝\', 这也是SQL注入有可能发生的情节。一个新的配置参数backslash_quote 可用于在需要时调整这个行为。请注意,针对CVE-2006-2314 的完全安全可能需要客户端侧的修改;但是backslash_quote 的目的是在一定程度上让不安全的客户端明显。

  • 修改libpq的字符串逃逸例程,意识到编码注意问题和 standard_conforming_strings

    这为CVE-2006-2313和CVE-2006-2314中描述的安全问题修复了使用libpq 的应用,并且也提前防范了规划的到SQL标准字符串文本语法的转换。 同时使用多个PostgreSQL连接的应用应该迁移到 PQescapeStringConn()PQescapeByteaConn(), 以确保为每个数据库连接中使用的设置做了正确的逃逸。 "手动"做字符串逃逸的应用应该修改为依赖于库例程。

  • 修复pgcrypto中的弱键选择 (Marko Kreen)

    fortuna PRNG重播逻辑中的错误会导致一个可预知的会话秘钥在某些情况下被 pgp_sym_encrypt()选择。这只影响没有使用OpenSSL的构造。

  • 修复一些不正确的编码转换函数

    win1251_to_isowin866_to_isoeuc_tw_to_big5euc_tw_to_micmic_to_euc_tw都在变化范围上有损坏。

  • 清理字符串中剩下的\'的使用 (Bruce, Jan)

  • 让自动清理在pg_stat_activity中可见 (Alvaro)

  • 禁用full_page_writes (Tom)

    在某些情况下,让full_page_writes关闭会导致崩溃恢复失败。 一个适当的修复将在8.2中出现;现在只是将它禁用了。

  • 各种规划器修复,尤其是位图索引扫描和MIN/MAX最优化 (Tom)

  • 修复合并连接中不正确的最优化 (Tom)

    外连接有时会发出多次未匹配行的拷贝。

  • 修复在相同的事务中使用和修改plpgsql函数的崩溃

  • 修复B-Tree索引被截断情况下的WAL重放

  • 为包含|的模式修复SIMILAR TO (Tom)

  • 修复SELECT INTOCREATE TABLE AS, 以在缺省表空间中创建表,而不是在基础目录中 (Kris Jurka)

  • 修复服务器,以正确的使用自定义DH SSL参数 (Michael Fuhr)

  • 改善快速排序性能 (Dann Corbit)

    目前这个代码只在Solaris上使用了。

  • 修复x86系统上的OS/X Bonjour (Ashley Clark)

  • 修复各种小的内存泄露

  • 修复密码提示在某些Win32系统上的问题 (Robert Kinberg)

  • 改善pg_dump对域的缺省值的处理

  • 修复pg_dumpall以合理的处理命名相同的用户和组 (只在从早于8.1的服务器上转储时是可能的) (Tom)

    用户和组将带有LOGIN权限被合并到一个角色中。 以前合并的角色不会有LOGIN权限,使其不能用作一个用户。

  • 修复pg_restore -n,以作为记录工作 (Tom)