PostgreSQL 9.4.5文書 | |||
---|---|---|---|
前のページ | 上に戻る | 付録 E. リリースノート | 次のページ |
リリース日: 2012-02-27
このリリースは9.1.2に対し、各種不具合を修正したものです。 9.1メジャーリリースにおける新機能については項E.52を参照してください。
CREATE TRIGGERにおいてトリガ関数に対する実行権限が必要になりました。(Robert Haas)
この検査が無かったため、別のユーザが自身が所有するテーブルにその関数をインストールすることで、偽造した入力データでトリガ関数を実行することができました。 SECURITY DEFINERが付いたトリガ関数でのみ重大です。 その他のトリガ関数ではとにかくテーブル所有者として実行されるためです。(CVE-2012-0866)
SSL証明書内のコモンネームにおける独断的な長さ制限を取り除きました。(Heikki Linnakangas)
libpqとサーバの両方ともSSL証明書から取り出したコモンネームを32バイトで切り詰めていました。 通常想定外の検証エラー以上のことを引き起こしませんが、ある証明書の所有者が他者になりすますことができるという、多少怪しいシナリオがあります。 被害を受けるにはコモンネームが正確に32バイト長でなければならず、また、攻撃者は信頼されたCAに対してコモンネームが接頭辞としてその文字列を持つ証明書を発行するように説得しなければなりません。 またサーバになりすますには、さらにクライアントからの接続を中継するための攻撃が必要です。(CVE-2012-0867)
pg_dumpのコメントに記述された名前の中の改行を空白に変換します。(Robert Haas)
pg_dumpは、その出力スクリプトにおけるSQLコメント内で発行されるオブジェクト名のサニタイズに関して注意を払っていませんでした。 改行を含む名前は少なくともそのスクリプトを構文的に不正にさせます。 悪意をもって組み立てられたオブジェクト名によって、スクリプトがリロードする時にSQLインジェクションの危険性があり得ました。(CVE-2012-0868)
バキューム処理と同時に挿入を行った場合のbtreeインデックス破損を修正しました。(Tom Lane)
挿入によって発生するインデックスページ分割によって、同時実行中のVACUUMが削除すべきインデックス項目を削除し損なうことが時々発生することがありました。 対応するテーブル行が削除された後、対応先が無いインデックス項目によってエラー("could not read block N in file ..."など)、最悪は、解放されたテーブル位置に再挿入された関係がない行にちなんだ、警告のない間違った問い合わせ結果が引き起こされます。 この不具合は8.2から存在していましたが、あまり頻発に発生しませんでしたので、これまで究明されませんでした。 使用中のデータベースで発生していたのではと疑わしければ、対象のインデックスを再インデックス付けすることで修正されます。
WAL再生中の一時的な共有バッファのゼロ化を修正しました。(Tom Lane)
再生ロジックでは時々共有バッファをゼロ化し再度書き込んでいました。 このためその内容は一時的に無効になります。 ホットスタンバイモードではこの結果、並行して実行される問い合わせがゴミデータを参照することになり得ました。 いろいろな兆候が現れますが、もっとも良くある兆候は"invalid memory alloc request size"です。
READ COMMITTED再検査において、データを変更するWITH副計画の取り扱いを修正しました。(Tom Lane)
INSERT/UPDATE/DELETEを含むWITHは、READ COMMITTEDモードにおける同時更新のために、親のUPDATEまたはDELETEコマンドが1つ以上の行を再評価しなければならない場合に、クラッシュしました。
SSIトランザクションの整理における境界問題を修正しました。(Dan Ports)
読み書きのあるシリアライザブルトランザクションを完了させるときに、残存する有効なシリアライザブルトランザクションがすべて読み取り専用であった場合にクラッシュすることがありました。
ホットスタンバイのクラッシュの後、postmasterの再起動を試みるように修正しました。(Tom Lane)
ホットスタンバイモードで操作している時に任意のバックエンドプロセスがクラッシュした場合、ロジックエラーのため、クラスタを再起動させようとはせずにpostmasterを終了させました。
最近更新された行によって所有されるTOAST値に対するCLUSTER/VACUUM FULLの取り扱いを修正しました。(Tom Lane)
この見落としにより、これらのコマンドのいずれかを実行している時に、TOASTテーブルのインデックスに対して"duplicate key value violates unique constraint"エラーが報告されることがあり得ました。
テーブル所有者を変更する時に、テーブル単位の権限だけではなく列単位の権限も更新します。(Tom Lane)
この失敗は、事前に付与された列権限が古い所有者により付与されたものとして表示されることを意味します。 つまり新しい所有者またはスーパーユーザであってもテーブル所有者を追跡できなくなった権限を取り除くことができないことを意味します。
REASSIGN OWNEDにおいて外部データラッパおよび外部サーバをサポートします。(Alvaro Herrera)
これらのオブジェクトの所有権を変更しなければならなかった場合に、このコマンドは"unexpected classid"エラーで失敗しました。
ALTER USER/DATABASE SETにおける一部の設定で存在しない値を許可します。 (Heikki Linakangas)
default_text_search_config、default_tablespace、temp_tablespacesを未知の名前に設定することができます。 これらが実際に使用されている別のデータベースでは既知であるかもしれませんし、またテーブル空間の場合はまだテーブル空間が作成されていないかもしれないからです。 過去search_pathにおいても同じ問題がありましたが、これらの設定も同様に動作するようにしました。
INSERT式内のCOLLATEにより引き起こる"unsupported node type"エラーを修正しました。(Tom Lane)
コミット後のテーブルファイルの削除に問題があった場合のクラッシュを防止します。(Tom Lane)
テーブル削除は、そのトランザクションがコミットした後にのみ背後のディスク上のファイルを削除しなければなりません。 (例えばファイルの権限の誤設定のため)失敗した場合、トランザクションをアボートするには遅すぎますので、コードは単に警告メッセージを出力し継続するものと考えられます。 リリース8.4においてこのロジックが壊れ、こうした状況でPANICが発生し、再起動できないデータベースとなりました。
DROP TABLESPACEのWAL再生中に発生したエラーから修復します。(Tom Lane)
再生はテーブル空間ディレクトリの削除を試みますが、(対象ディレクトリの所有者や権限が不正であったなど)失敗する可能性は多々あります。 これまでは再生コードはパニックし、手作業を介さなければ再起動できないデータベースになりました。 ディレクトリの削除に失敗したところで多少ディスク領域が無駄に使われるだけですので、問題を記録し、継続する方がより良いと考えました。
ホットスタンバイのAccessExclusiveLocksのログ記録における競合問題を修正しました。(Simon Riggs)
ロックが"transaction zero"によって保持されていると記録されることが時々ありました。 少なくともスレーブサーバでアサーションエラーが発生することが分かっていますが、もっと深刻な問題が起こる可能性があります。
WAL再生中にOIDカウンタを、たとえ周回していたとしても、正しく追跡します。(Tom Lane)
これまでは、OIDカウンタはシステムが再生モードを抜けるまで高値のままになりました。 実際にはほとんどnilという結果になりますが、マスタに昇格されるスタンバイサーバでは、値が必要になってから、OIDカウンタを合理的な値まで進めるために長時間かかる可能性がありました。
クラッシュリカバリの最初の、誤解を招く"consistent recovery state reached"ログメッセージの発行を抑制します。(Heikki Linnakangas)
pg_stat_replication.replay_locationの初期値を修正しました。(Fujii Masao)
これまでは、少なくとも1つのWALレコードが再生されるまで、表示される値は間違っていました。
*が付いた正規表現の後方参照を修正しました。(Tom Lane)
コードでは、正確な文字列一致を強制せずに、実質後方参照シンボルで参照されるパターン副式を満たす任意の文字列を受け付けました。
同様の問題はまだ、直接量指定子のサブジェクトとならない、より大きく量化された式に埋め込まれた後方参照でも残っています。 こちらは将来のリリースのPostgreSQLで対応予定です。
inet/cidr値の処理に最近入ったメモリリークを修正しました。(Heikki Linnakangas)
2011年12月のPostgreSQLリリース内のパッチによって、これらの操作にメモリリークが発生しました。 これらの列に対するbtreeインデックス等で重大な問題になる可能性がありました。
UNION ALLを通してインデックス式制限をプッシュダウンするプランナの機能を修正しました。(Tom Lane)
9.1.2において別の問題を修正する際に、この種の最適化が意図せず無効になりました。
継承テーブルに対するUPDATE/DELETEにおいて参照されるWITH句の計画作成を修正しました。(Tom Lane)
この不具合により"could not find plan for CTE"失敗が発生しました。
column IN (...)インデックス条件を扱うためのGINコスト推定を修正しました。(Marti Raudsepp)
この見落としにより、こうした条件がGINインデックスを用いて使用される場合によくクラッシュするようになりました。
既存のセッションが開いたままの失敗トランザクションを持つ場合のアサーション失敗を防止します。
この不具合は、アサートが有効ではない通常の構築では影響はありません。
SQL言語関数内のCREATE TABLE AS/SELECT INTOの後に対応先がなくなったポインタを修正しました。(Tom Lane)
ほとんどの場合、これはアサートが有効な構築におけるアサーション失敗という結果になるだけですが、もっと悪い結果になる可能性がありました。
Windowsのsysloggerにおけるファイルハンドルの二重クローズを防ぎます。(MauMau)
通常はこのエラーは表面化しませんが、Windowsのデバッグ版を実行している場合は例外が引き起こります。
plpgsqlにおけるI/O変換関連のメモリリークを修正しました。(Andres Freund、Jan Urbanski、Tom Lane)
現在の関数が終わるまで、特定の操作がメモリリークしました。
perlのSvPVutf8()関数の不具合を回避しました。(Andrew Dunstan)
この関数はtypeglobまたは特定の読み取り専用のオブジェクトが渡された場合にクラッシュします。 plperlでこれらを渡さないようにしました。
pg_dumpにおいて、拡張自体がダンプ対象でない場合に拡張の設定テーブルの内容をダンプしません。(Tom Lane)
継承されたテーブル列に対するpg_dumpの取り扱いを改良しました。(Tom Lane)
pg_dumpは、子の列が親の列と異なるデフォルト式を持つという状況を間違って扱いました。 デフォルトがテキストとして親のデフォルトと同一であるが、実際は同一ではない場合(例えば、スキーマ検索パスの違いのため)、異なるものとして認識せず、そのため、ダンプしリストアした後、子は親のデフォルトを継承することができました。 子の列がNOT NULLであり親がそうではなかった場合も、微妙に間違ってリストアされました。
INSERT形式のテーブルデータに対するpg_restoreの直接データベースにリストアするモードを修正しました。(Tom Lane)
他の問題に対する修正における見落としの結果、2011年9月または12月付けのリリースに含まれるpg_restoreでは、--insertsまたは--column-insertsオプションを付けて作成されたアーカイブファイルを直接データベースにリストアすることができませんでした。 アーカイブファイル自体には失敗はなく、テキストモード出力では問題ありませんでした。
plpythonの共有ライブラリの名称変更を扱うようpg_upgradeを変更しました。(Bruce Momjian)
この見落としのため、plpythonを含む9.1より前のデータベースをアップグレードすることができませんでした。
pg_upgradeがregclass列を含むテーブルを処理できるようにしました。(Bruce Momjian)
pg_upgradeがpg_class OIDの保護に注意を払うようになりましたので、この制限を続ける理由はなくなりました。
SSLクライアント証明書ファイルを検索するときに、libpqがENOTDIRエラーを無視するようにしました。(Magnus Hagander)
これによりユーザのホームディレクトリが/dev/nullのようなものに設定されていたとしても、証明書なしですが、SSL接続を確立できます。
ecpgのSQLDA領域におけるフィールド整列問題を修正しました。 (Zoltan Boszormenyi)
ecpgのDEALLOCATE文においてATオプションを可能にしました。(Michael Meskes)
これをサポートする基盤は少し前から存在しましたが、見落としのため、エラー検査でこの状況を拒絶していました。
ecpgにおいてvarchar構造体を定義するときに変数名を使用しません。(Michael Meskes)
contrib/auto_explainのJSON出力モードが有効なJSONを生成するように修正しました。(Andrew Dunstan)
この出力では、本来括弧を使用しなければならない最上位で、角括弧を使用していました。
contrib/intarrayのint[] & int[]演算子のエラーを修正しました。 (Guillaume Lelarge)
2つの入力配列が共通して持つ最小の整数が1であり、どちらかの配列により小さな値があった場合、1が結果から間違って省かれました。
contrib/pgcryptoのencrypt_iv()
およびdecrypt_iv()
の誤判定を修正しました。(Marko Kreen)
これらの関数は特定の種類の無効入力エラーの通知に失敗し、不正な入力に対してランダムなゴミの値を代わりに返しました。
contrib/test_parserにおける1バイトのバッファオーバーランを修正しました。(Paul Guyot)
コードでは必要より1バイト多く読み取ろうとし、境界条件ではクラッシュします。 contrib/test_parserは単なるサンプルコードであり、これ自体はセキュリティ問題ではありませんが、例のコードとしては良くありません。
ARMにおいて可能ならばスピンロックに__sync_lock_test_and_set()
を使用します。(Martin Pitt)
この関数は、以前の廃止予定でARMv6以降では使用できなくなったSWPB命令の使用を置き換えるものです。 最近のARMボードでも古いコードは明白な方法で失敗することはありませんが、単に同時アクセスのインターロックを行わず、マルチプロセス操作において奇妙な失敗をもたらすと報告されています。
受け付け可能なバージョンのgccを用いて構築する場合に-fexcess-precision=standardオプションを使用します。(Andrew Dunstan)
最近のバージョンのgccは独創的な結果を生成するというさまざまなシナリオを防ぎます。
FreeBSDにおいてスレッド化されたPythonを使用できるようにしました。(Chris Rees)
configureスクリプトはこれまで、この組み合わせは動作しないと前提していました。 しかしFreeBSDではこの問題が修正されましたので、エラー検査を取り除きました。
MinGWが標準的な名前のOpenSSLライブラリを使用して構築できるようにしました。(Tomasz Ostrowski)