リリース日: 2017-08-10
このリリースは9.3.17に対し、各種不具合を修正したものです。 9.3メジャーリリースにおける新機能については、E.51. リリース9.3を参照してください。
9.3.Xからの移行ではダンプ/リストアは不要です。
しかしながら、認証にユーザパスワードを利用する外部データサーバを使っている場合には、以下の変更点の1番目の項目を参照してください。
また、9.3.16よりも前のバージョンからアップグレードする場合には、E.35. リリース9.3.16を参照してください。
ユーザマッピングオプションとして格納されたパスワードを保護するため、pg_user_mappings
.umoptions
の可視性をさらに限定しました。
(Noah Misch)
CVE-2017-7486に対する修正は正しくありませんでした。
その修正では、ユーザが関連する外部サーバに対するUSAGE
権限を持っていなくとも、自身のユーザマッピングのオプションを見ることを許していました。
このようなオプションはユーザ自身でなくサーバ所有者が用意したパスワードを含むかもしれません。
このような場合にinformation_schema.user_mapping_options
はオプションを見せませんので、pg_user_mappings
も見せるべきではありません。
(CVE-2017-7547)
このパッチのみでは新たにinitdbされたデータベースでの動作しか修正しません。 この変更を既存のデータベースに適用するには、以下を行う必要があります。
allow_system_table_mods = true
をpostgresql.conf
に加えた後、postmasterを再起動します。
(ALTER SYSTEM
に対応したバージョンでは設定変更にそれを使うことができますが、それでも再起動は必要です。)
クラスタ内の各データベースでスーパーユーザとして以下のコマンドを実行します。
SET search_path = pg_catalog; CREATE OR REPLACE VIEW pg_user_mappings AS SELECT U.oid AS umid, S.oid AS srvid, S.srvname AS srvname, U.umuser AS umuser, CASE WHEN U.umuser = 0 THEN 'public' ELSE A.rolname END AS usename, CASE WHEN (U.umuser <> 0 AND A.rolname = current_user AND (pg_has_role(S.srvowner, 'USAGE') OR has_server_privilege(S.oid, 'USAGE'))) OR (U.umuser = 0 AND pg_has_role(S.srvowner, 'USAGE')) OR (SELECT rolsuper FROM pg_authid WHERE rolname = current_user) THEN U.umoptions ELSE NULL END AS umoptions FROM pg_user_mapping U LEFT JOIN pg_authid A ON (A.oid = U.umuser) JOIN pg_foreign_server S ON (U.umserver = S.oid);
template0
、template1
データベースを含めることを忘れないでください。
そうでないと、後に作ったデータベースに引き続き脆弱性が存在することになります。
template0
を修正するには、これを一時的に接続を受け付けるようにする必要があります。
PostgreSQL 9.5以降では、以下が使えます。
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS true;
そして、template0
を修正した後、以下で戻すことができます。
ALTER DATABASE template0 WITH ALLOW_CONNECTIONS false;
9.5より前のバージョンにおいては代わりに以下を使います。
UPDATE pg_database SET datallowconn = true WHERE datname = 'template0'; UPDATE pg_database SET datallowconn = false WHERE datname = 'template0';
最後に、allow_system_table_mods
設定を除去して、再度postmasterを再起動します。
全てのパスワードに基づく認証方式で空パスワードを禁止しました。 (Heikki Linnakangas)
libpqは空に指定されたパスワードを無視し、それをサーバに送りません。
よって、ユーザのパスワードが空文字列に設定されていた場合、psqlや他のlibpqベースのクライアントを通して、そのパスワードでログインすることはできません。
このことから管理者はパスワードを空に設定することはパスワードログインをできなくすることに等しいと思うかもしれません。
しかしながら、改変されたクライアントやlibpqベースでないクライアントで、設定されている認証方式次第ではログインできる可能性があります。
特に最も一般的なmd5
は空パスワードを受け付けていました。
全ての場合で空パスワードを拒絶するようにサーバを変更しました。
(CVE-2017-7546)
タプル更新連鎖の同時ロックを修正しました。 (Álvaro Herrera)
いくつかのセッションが競合しないロックモードで旧スナップショットを使ってタプル更新連鎖を同時にロックして、それらが全て成功した場合、それらの一部が競合状態のために失敗している(そして有効なタプルバージョンが無くなって終わる)可能性がありました。 これは外部キー検査が実際には存在するけれども同時に更新されているタプルを参照するのに失敗するといった結果を招きました。
XMAXが未だ関心のあるメンバーをちょうど1つ持つマルチトランザクションであるタプルを凍結するときの、潜在的なデータ破損を修正しました。 (Teodor Sigaev)
Windowsで新しいプロセスで共有メモリに対するアドレス範囲を確保できない場合、プロセス生成を再試行するようにしました。 (Tom Lane, Amit Kapila)
おそらくはアンチウイルス製品の干渉によりたまに起きていた子プロセスの起動失敗が、これで修正されると考えられます。
Windowsビルドにおける低い発生確率で生じる共有述語ロックハッシュテーブルの破損を修正しました。 (Thomas Munro, Tom Lane)
SSL接続の正常終了に対する、接続リセットであったかのようなログ出力を回避しました。
SSLセッションチケットをクライアントに送るのを防止しました。 (Tom Lane)
この修正はチケットを認識するクライアント側SSLコードによる再接続の失敗を防ぎます。
Solaris上の設定tcp_keepalives_idleに対するコードを修正しました。 (Tom Lane)
postmasterの停止と即座の再起動のすぐ後に発行された問い合わせメッセージを受け取るように、統計情報コレクタを修正しました。 (Tom Lane)
前のpostmaster停止から0.5秒以内に発行された統計情報の問い合わせは事実上無視されていました。
統計情報コレクタの受信バッファサイズが少なくとも100KBであることを保証しました。 (Tom Lane)
これはデフォルトの受信バッファサイズがこれよりも小さい古いプラットフォーム上で統計情報データを取りこぼすリスクを軽減します。
スタンバイがXLOG_SWITCH
WALレコードを処理した直後に昇格したときに、不正なWALセグメントが作られる可能性があり、修正しました。
(Andres Freund)
walsenderプロセスでSIGHUPとSIGUSR1の処理を修正しました。 (Petr Jelinek, Andres Freund)
postmasterでの競合状態によるwalreceiverプロセスの不必要な遅い再起動を修正しました。 (Tom Lane)
INSERT
またはUPDATE
が、配列のドメイン型の列の複数要素に値を与える場合について修正しました。
(Tom Lane)
ウィンドウ関数を集約関数の引数内の副SELECT
で使えるようにしました。
(Tom Lane)
ALTER ... RENAME
のときに自動生成された配列型を退避するようにしました。
(Vik Fearing)
これまではCREATE
のときに衝突する自動生成された配列型の名前をぶつからないように変えていました。
本修正はこの振る舞いを名前変更操作に拡張したものです。
ALTER USER ... SET
がALTER ROLE ... SET
で対応している全ての構文の異形を確実に受け入れるようにしました。
(Peter Eisentraut)
データ型の入出力関数の引数や戻り値の型をopaque
から正確な型に変えるときに、依存性情報を適切に更新するようにしました。
(Heikki Linnakangas)
CREATE TYPE
は長らく使われていない形式で宣言された入出力関数を更新しますが、型の依存を記録するのを忘れていて、続くDROP TYPE
が壊れた関数定義を残すのを可能としていました。
ANALYZE
がtsvector
列を処理するときのメモリ使用を減らしました。
(Heikki Linnakangas)
money
値に対する整数または浮動小数点による乗算または除算のときに不必要な精度劣化といい加減な丸め計算があり、これを修正しました。
(Tom Lane)
regprocedurein()
などの識別子を解析する関数で空白のチェックを厳格化しました。
(Tom Lane)
有力なロケールによっては、これら関数がマルチバイト文字の一部を空白と誤認するおそれがありました。
PL/Perlをコンパイルするときに、Perlに由来する適切な#define
シンボルを使うようにしました。
(Ashutosh Sharma, Tom Lane)
これにより移植性の問題を回避します。 典型的には、最近のPerlバージョンで作業するときライブラリ読み込み中に「ハンドシェイク」不一致が示されます。
libpqにて、接続失敗した後にGSS/SASLおよびSSPI認証の状態を適切にリセットするようにしました。 (Michael Paquier)
このリセットを怠ることで、SSL接続から非SSL接続に退行するときに、SSLでの試行でGSS/SASLに失敗すると常に非SSLの試行も失敗する結果をもたらしました。 SSPIは失敗しませんがメモリリークが生じました。
psqlで、COPY FROM STDIN
がキーボードからのEOF信号で中断されて、続いて他のCOPY FROM STDIN
が試みられたときに生じるエラーを修正しました。
(Thomas Munro)
この誤動作はBSDから派生した(macOSを含む)プラットフォームで見られましたが、他のほとんどのプラットフォームでは見られません。
REFRESH MATERIALIZED VIEW
コマンドを最後に出力するようにpg_dumpとpg_restoreを修正しました。
(Tom Lane)
これにより、マテリアライズドビューが異なるユーザが所有者のテーブルを参照するときのダンプ/リストアのエラーを防ぎます。
Fix pg_dump with the --clean
option to
drop event triggers as expected (Tom Lane)
また、イベントトリガの所有者を正しく割り当てるようになりました。 これまではリストアスクリプトを実行したスーパーユーザが所有者になるようにリストアされていました。
pg_dumpを空の演算子クラスに対して無効なSQLを出力しないように修正しました。 (Daniel Gustafsson)
Windows上でpg_dumpの標準出力への出力を修正しました。 (Kuntal Ghosh)
ファイルディスクリプタをバイナリモードに設定しそこなっていたため、標準出力に書き出された圧縮されたプレーンテキストダンプに破損したデータが含まれていました。
列名が変更されているビューのON SELECT
ルールに対してpg_get_ruledef()
が正しい出力を表示するように修正しました。
(Tom Lane)
一部の稀な場合にpg_dumpがビューをダンプするのにpg_get_ruledef()
に依存していて、この誤りがダンプ/リストアの失敗をもたらす可能性がありました。
共通列を持たないNATURAL LEFT JOIN
結果のような、空の制約を伴う外部結合のダンプを修正しました。
(Tom Lane)
式が関数呼び出しに見える形に逆解析されない場合のFROM
句内の関数式のダンプを修正しました。
(Tom Lane)
Windows上でpg_basebackupの標準出力への出力を修正しました。 (Haribabu Kommi)
ファイルディスクリプタをバイナリモードに設定しそこなっていたため、標準出力に書き出されたバックアップに破損したデータが含まれていました。
末尾のWALレコードがwal_level = minimum
でないことを保証するようにpg_upgradeを修正しました。
wal_level = minimum
(Bruce Momjian)
この状態はアップグレードされたスタンバイサーバの再接続を妨げるおそれがありました。
postgres_fdw
で、ALTER SERVER
またはALTER USER MAPPING
コマンドの後にリモートサーバへの接続を再確立するようにしました。
(Kyotaro Horiguchi)
これにより接続パラメータに影響するオプションの変更が即座に適用されることを保証します。
postgres_fdw
で、リモートのトランザクション制御コマンドのキャンセルを可能にしました。
(Robert Haas, Rafia Sabih)
この変更で以前よりも多くの場合に応答しないリモートサーバの待機から素早く免れることができます。
gccで共有ライブラリをビルドするときに、-fpic
でなく常に-fPIC
を使うようにしました。
(Tom Lane)
一部のこの設定で違いが現れるプラットフォームで、より大きい拡張ライブラリに役立ちます。
Perlの最近のバージョンで警告またはエラーになるのを回避するため、Microsoft MSVC用ビルドスクリプト内のエスケープされていない中括弧の問題を修正しました。 (Andrew Dunstan)
MSVCビルドでopensslライブラリがVC
サブディレクトリ内に無い場合を処理するようにしました。
(Andrew Dunstan)
MSVCビルドで、libxml2ヘッダファイルの適切なインクルードパスを追加しました。 (Andrew Dunstan)
これはlibxml2の標準Windowsインストールで以前に在るものを移動する必要があったものを修正します。
MSVCビルドで、tcl86.lib
という名前のTclライブラリを認識するようにしました。
(Noah Misch)