リリース日: 2017-05-11
このリリースは9.4.11に対し、各種不具合を修正したものです。 9.4メジャーリリースにおける新機能については、E.31. リリース9.4を参照してください。
9.4.Xからの移行ではダンプ/リストアは不要です。
しかしながら、認証にユーザパスワードを利用する外部データサーバを使っている場合には、以下の変更点の1番目の項目を参照してください。
また、「ロジカルデコーディング」に依存したサードパーティレプリケーションツールを使っている場合には、以下の変更点の4番目の項目を参照してください。
また、9.4.11よりも前のリリースからアップグレードする場合は、E.20. リリース9.4.11を参照して下さい。
ユーザマッピングオプションとして格納されたパスワードを保護するため、pg_user_mappings
.umoptions
の可視性を厳格化しました。
(Michael Paquier, Feike Steenbergen)
これまでのコードは、外部サーバオブジェクトの所有者やサーバのUSAGE
権限を付与されているユーザに、そのサーバに関連した全てのユーザマッピングのオプションを参照することを許していました。
これには他のユーザのパスワードがしっかり含まれているかもしれません。
information_schema.user_mapping_options
の振る舞いと一致するように、すなわち、これらオプションがマップされているユーザに、またはマッピングがPUBLIC
で現在ユーザがサーバ所有者の場合に、あるいは現在ユーザがスーパーユーザである場合に、可視であるようにビュー定義を修正しました。
(CVE-2017-7486)
このパッチのみでは新たにinitdbされたデータベースでの動作しか修正しません。 この変更を既存のデータベースに適用するには、E.18. リリース9.4.13にあるCVE-2017-7547に対する変更点に示した正しい手順に従ってください。
漏洩のある演算子を通した統計情報の露出を防止しました。 (Peter Eisentraut)
プランナの一部の選択率見積関数は、ユーザ定義演算子を頻出値やヒストグラム項目のようなpg_statistic
から取得された値に適用します。
これはテーブル権限がチェックされる前に行われるので、悪意のユーザがこの振る舞いを読み取り権限を持たないテーブル列の値を取得するために悪用するおそれがありました。
修正するため、演算子の実装関数が漏洩防止を保証されておらず、呼び出しているユーザが統計情報を要するテーブル列の読み取り権限を持っていない場合には、デフォルトの見積で代用するようにしました。
実際はたいていのケースでこれら基準のうち少なくとも一つを満たします。
(CVE-2017-7484)
libpqのPGREQUIRESSL
環境変数の認識が復旧されました。
(Daniel Gustafsson)
環境変数の処理がPostgreSQL 9.3で意図せず外されていましたが、
ドキュメントはそのままでした。
ユーザがSSL暗号化接続を強制するために、もはや保証されないであろうこの環境変数に依存しているかもしれず、これはセキュリティ上の危険を生じさせます。
この環境変数の処理を復旧しましたが、9.3以降のコードで正しく動作している設定を壊さないように、PGSSLMODE
よりも低い優先順位を与えました。
(CVE-2017-7485)
ロジカルデコーディング中の初期スナップショットが無効になる可能性があり、これを修正しました。 (Petr Jelinek, Andres Freund)
ロジカルデコーディングのレプリケーションスロットむけに作られた初期スナップショットが潜在的に不正となりえました。 これによりロジカルデコーディングを使うサードパーティツールが不完全あるいは不正な初期データのコピーをする可能性があります。 ソースサーバがスロットを作るときに高負荷特の場合、または、他のロジカルスロットが既に存在している場合に特に発生しやすい現象です。
ロジカルデコーディングに依存したレプリケーションツールを使っていて、レプリケーション開始時に空でないデータセットをコピーしたであろう場合には、アップグレードを導入した後にレプリカを再作成するか、ソースサーバと比較してその内容を検証することが推奨されます。
ログをとらないインデックスの「初期フォーク」の破損を修正しました。 (Robert Haas, Michael Paquier)
これによりクラッシュと再起動の後に、ログをとらないインデックスが不正な状態になるおそれがありました。 この問題はインデックスが削除、再構築されるまで持続するでしょう。
スタンバイサーバが、準備されているけれどコミットされていない2相トランザクションを再生するときのpg_subtrans
の項目の誤った再構築を修正しました。
(Tom Lane)
大抵の場合は目に見える悪影響には至りませんが、稀な場合にpg_subtrans
で循環参照になり、2相トランザクションで修正された行を検査する問い合わせで潜在的に無限ループをひき起こす可能性がありました。
文字列バッファ初期化の失敗によるwalsenderでのクラッシュの可能性を回避しました。 (Stas Kelvich, Fujii Masao)
バックグラウンドワーカプロセスについてのfork()
失敗に対するpostmasterの処理が修正されました。
(Tom Lane)
これまでは、postmasterはプロセスが正常に起動されたかのようにワーカ状態の一部を更新していて、結果としてその後に混乱が生じていました。
拡張のスクリプトで問い合わせの構文解析に直前のDDLの結果が見えることを保証しました。 (Julien Rouhaud, Tom Lane)
拡張のスクリプトファイル内のコマンド間でキャッシュをフラッシュする手順が欠けていたため、ユーティリティ以外の問い合わせには直前のALTER TABLE ... RENAME
のようなカタログ変更の結果が見えないかもしれませんでした。
ALTER TABLE ... ALTER COLUMN TYPE
が既存インデックスを再構築するときのテーブルスペースの権限検査を省略しました。
(Noah Misch)
呼び出すユーザがインデックスを含むテーブルスペースに対するCREATE
権限をそのとき持っていなかった場合、コマンドは失敗していました。
この振る舞いは役に立たないと考えられるので、検査を省略し、ここではインデックスを再構築できるようにしました。
制約がNO INHERIT
と印付けされているときには、ALTER TABLE ... VALIDATE CONSTRAINT
が子テーブルに再帰処理をしないように修正しました。
(Amit Langote)
この修正は一致する制約が子テーブルに無いときに望まれない「constraint does not exist(制約がありません)」エラーになるのを防ぎます。
ページピンの競合によりスキャンできなかったページを適切に計算するようにVACUUM
を修正しました。
(Andrew Gierth)
これはテーブルのタプル数の過小見積をもたらす傾向がありました。
小さくて競合が激しいテーブルという最悪の場合には、VACUUM
がテーブルにはタプルが一切含まれないという不正な報告をして、非常に悪いプラン選択をもたらす可能性がありました。
ハッシュ結合の中での大量タプル転送ループを問い合わせキャンセル要求により確実に割り込みできるようにしました。 (Tom Lane, Thomas Munro)
interval
の比較で整数オーバーフロー問題を修正しました。
(Kyotaro Horiguchi, Tom Lane)
約296000年より大きい期間に対してinterval
型の比較演算子が誤った答えを生み出す可能性がありました。
このような大きい値を含む列のインデックスは壊れているかもしれないので、インデックス再構築をしたほうがよいです。
tableforest
= falseのとき、cursor_to_xml()
が正しいな出力をするように修正しました。
(Thomas Munro, Peter Eisentraut)
これまでは<table>
要素の囲みを生成していませんでした。
float8_timestamptz()
とmake_interval()
で端数丸めの問題を修正しました。
(Tom Lane)
これら関数は浮動小数点の値から整数のマイクロ秒に変換するときに丸めでなく、切り捨てをしていました。これにより予期せずひとつ少ない結果がもたらされる可能性がありました。
pg_timezone_names
ビューの性能を改善しました。
(Tom Lane, David Rowley)
多数の大きいブロックを含むコンテキストについてメモリ管理オーバーヘッドを軽減しました。 (Tom Lane)
lseek()
とclose()
の稀な場合のエラーに対するいいかげんな処理を修正しました。
(Tom Lane)
どちらも通常ではあまり失敗しないシステムコールですが、失敗した場合にはfd.c
がかなり混乱する可能性がありました。
postmasterがWindowsサービスとして実行しているかどうかの誤った検査を修正しました。 (Michael Paquier)
これは、アクセス不能であるときにイベントログに書き出しを試みて、そのため全くログが書かれない結果をもたらしました。
COMMIT PREPARED
とROLLBACK PREPARED
に対応するようにecpgを修正しました。
(Masahiko Sawada)
ecpgで、$でクォートされた文字列リテラルを処理する際の二重解放エラーを修正しました。 (Michael Meskes)
pg_dumpで、コメントとデータベースオブジェクトのいくつかのタイプのセキュリティラベルに対する、誤ったスキーマと所有者の印付けを修正しました。 (Giuseppe Broccolo, Tom Lane)
単純な使い方の場合には悪影響はありませんが、例えばスキーマを指定したリストアでは含まれるべきコメントが無視される可能性がありました。これはダンプ時にそれらが関連するオブジェクトのスキーマに属するという印付けがされなかったためです。
pg_restore -l
で、SQLオブジェクト名に改行が含まれるときに無効なリストファイルが出力されるのを回避しました。
(Tom Lane)
改行を空白で置き換えました。出力をpg_restore -L
の用途に使えるようにするにはこれで十分です。
「ラージオブジェクト」(BLOB)に付けられたコメントとセキュリティラベルを移行するようにpg_upgradeを修正しました。 (Stephen Frost)
これまで、ラージオブジェクトは新データベースに正しく移行されていましたが、それに付加されたコメントとセキュリティラベルが失われていました。
contrib/adminpack
のpg_file_write()
関数でエラー処理を改善しました。
(Noah Misch)
特にfclose()
から報告されたエラーを検知していませんでした。
contrib/dblink
で新たな無名接続を確立するときに、前の無名接続がリークするのを回避しました。
(Joe Conway)
contrib/pg_trgm
の正規表現からのトライグラム抽出を修正しました。
(Tom Lane)
場合によっては、何にも決してマッチしない壊れたデータ構造を生み出し、トライグラムインデックスを使うGINまたはGiSTのインデックススキャンが正規表現へのマッチを何も見つけられない結果になります。
contrib/postgres_fdw
にて、リモートサーバに問い合わせキャンセル要求を伝播するようにしました。
(Michael Paquier, Etsuro Fujita)
これまでは、ローカル問い合わせのキャンセル要求は送信済みのリモート問い合わせを早く終了させませんでした。 これは元々9.6で行われた作業のバックパッチです。
OpenSSL 1.1.0に対応しました。 (Heikki Linnakangas, Andreas Karlsson, Tom Lane)
これはより新しいブランチで以前行なわれた作業のバックパッチです。多くのプラットフォームがOpenSSLの新しいバージョンを採用しているため、必要です。
MSVCビルドでTcl 8.6に対応しました。 (Álvaro Herrera)
私たちのタイムゾーンライブラリのコピーをIANA release tzcode2017bに同期しました。 (Tom Lane)
これは、2038年1月の一部の夏時間遷移に影響するバグを修正します。
タイムゾーンデータファイルをtzdata release 2017bに更新しました。チリ、ハイチ、モンゴルの夏時間法の変更、エクアドル、カザフスタン、リベリア、スペインの歴史的修正が含まれます。 南米、太平洋、インド洋、および、一部アジア・中東の国々における多数のタイムゾーンを、数字による省略形に切り替えました。
IANAタイムゾーンデータベースはこれまで全てのタイムゾーンについて文字による省略形を提供しましたが、地元の人々の間でほとんど、あるいは全く通用していない省略形をしばしば作成していました。
IANAは英語の省略形が現実に使われている形跡がないゾーンにおいてはUTCオフセット数値を使うことを選ぶという方針に転換しようとしてるところです。
少なくともしばらくの間、PostgreSQLはタイムスタンプの入力に、このような削除された省略形を引き続き受け入れます。
しかし、それらはpg_timezone_names
ビューには現れず、出力にも使用されなくなります。
MSVC ビルドにおいて、POSIX形式のタイムゾーン名に対して正しい夏時間規則を使用するようにしました。 (David Rowley)
MicrosoftのMSVCビルドスクリプトはposixrules
ファイルをタイムゾーンディレクトリツリーにインストールするのを怠っていました。
この結果、POSIX形式のタイムゾーン名に対し想定される夏時間の振る舞いについて、タイムゾーンコードがビルトインの規則に退行してしまっていました。
歴史的な理由により、その組み込み規則は、米国が2007年より前に使っていた夏時間規則(すなわち、4月最初の日曜日と 10月最終の日曜日の変更)に引き続き対応しています。
この修正にともない、POSIX形式のゾーン名はUS/Eastern
ゾーンの現在および歴史的な夏時間遷移日を使います。
そのようにしたくない場合には、posixrules
ファイルを削除するか、他のゾーンファイルのコピーで置き換えてください(8.5.3. 時間帯参照)。
キャッシュ利用のため、このような変更を反映させるにはサーバの再起動が必要であることに注意してください。