PostgreSQL 11.3、10.8、9.6.13、9.5.17 和 9.4.22 已發布!

發布於 2019-05-09,由 PostgreSQL Global Development Group
PostgreSQL 專案 安全性

PostgreSQL Global Development Group 已發布對我們資料庫系統所有支援版本的更新,包括 11.3、10.8、9.6.13、9.5.17 和 9.4.22。 此版本修復了 PostgreSQL 伺服器中的兩個安全性問題、PostgreSQL Windows 安裝程式中的兩個安全性問題,以及過去三個月回報的 60 多個錯誤。

使用 EnterpriseDB 和 BigSQL 的 Windows 安裝程式安裝 PostgreSQL 的使用者應儘快升級。 同樣地,執行任何 PostgreSQL 9.5、9.6、10 和 11 版本的使用者也應計劃儘快升級。

所有其他使用者應計劃在下一次排定的停機時間套用此更新。

安全性問題

此版本已關閉四個安全性漏洞

  • CVE-2019-10127:BigSQL Windows 安裝程式未清除寬鬆的 ACL 條目
  • CVE-2019-10128:EnterpriseDB Windows 安裝程式未清除寬鬆的 ACL 條目

由於 EnterpriseDB 和 BigSQL Windows 安裝程式均未鎖定 PostgreSQL 二進位安裝目錄和資料目錄的權限,因此未授權的 Windows 使用者帳戶和未授權的 PostgreSQL 帳戶可能導致 PostgreSQL 服務帳戶執行任意程式碼。

此漏洞存在於這些安裝程式所有支援的 PostgreSQL 版本中,並且可能存在於較舊的版本中。 這兩組安裝程式都已修復新安裝和現有安裝的這些目錄的權限。 如果您使用其他方法在 Windows 上安裝了 PostgreSQL,我們建議您檢查您的 PostgreSQL 二進位目錄是否僅可由受信任的使用者寫入,並且您的資料目錄是否僅可由受信任的使用者存取。

PostgreSQL 專案感謝 Conner Jones 回報此問題。

在此版本之前,執行 PostgreSQL 11 的使用者可以透過對分割資料表執行精心製作的 INSERT 語句來讀取伺服器記憶體的任意位元組。

PostgreSQL 透過對欄位中可用的資料進行取樣來維護資料表的統計資訊; 在查詢計劃過程中會諮詢此資料。 在此版本之前,能夠執行具有讀取給定欄位權限的 SQL 查詢的使用者可以製作洩漏運算子,該運算子可以讀取已從該欄位取樣的任何資料。 如果這恰好包含使用者被列層級安全性原則禁止查看的列中的值,則使用者可以有效地繞過該原則。 解決方法是僅允許非防洩漏運算子在資料表沒有相關列層級安全性原則時使用此資料。

此問題存在於 PostgreSQL 9.5、9.6、10 和 11 中。 PostgreSQL 專案感謝 Dean Rasheed 回報此問題。

錯誤修復和改進

此更新還修復了過去幾個月回報的 60 多個錯誤。 其中一些問題僅影響 11 版,但許多問題影響所有支援的版本。

其中一些修復包括

  • 多個目錄損毀修復,包括與在分割資料表上執行 ALTER TABLE 相關的修復
  • 多個分割修復
  • 避免在跨交易提交嘗試持久化游標查詢時發生錯誤時發生伺服器崩潰
  • 避免在回滾建立多個資料表的交易時出現 O(N^2) 效能問題
  • 修復 txid_status() 中可能發生的「無法存取交易狀態」錯誤
  • 修復可更新檢視表以處理 INSERT .. VALUES 語句中的明確 DEFAULT 項目,其中有多個 VALUES 列
  • 修復 CREATE VIEW 以允許零欄位檢視表
  • 新增對 CREATE TABLE IF NOT EXISTS .. AS EXECUTE .. 語句的缺失支援
  • 確保在列層級安全性原則表達式中出現的子 SELECT 使用正確的使用者權限執行
  • 當 xmloption 設置為 content 時,按照 SQL:2006 及更高版本的規定,接受 XML 文件作為 xml 類型的有效值
  • 修復了 11.2、10.7、9.6.12、9.5.16 和 9.4.21 中引入的 GIN 索引 WAL 記錄的不相容性,這些記錄影響了執行這些版本的副本伺服器從較舊版本的主伺服器讀取 GIN 索引的變更
  • 多個記憶體洩漏修復以及動態共享記憶體管理修復
  • 放寬對 fsync 和 sync_file_range 失敗的恐慌,以應對某些指示「不支援的操作」的失敗情況
  • 多個查詢計劃程式修復,其中一些應導致計劃改進
  • 修復熱備用 postmaster 在收到智慧關閉請求後可能無法關閉的競爭條件
  • 多個 SCRAM 身份驗證修復
  • 修復暗示與資料庫編碼不同的編碼的 lc_time 設置的處理
  • 使用與伺服器 data 目錄中其他檔案相同的權限建立 current_logfiles 檔案
  • 多個 ecpg 修復
  • 使 pg_verify_checksums 驗證它指向的資料目錄是否為正確的 PostgreSQL 版本
  • 多個 contrib/postgres_fdw 修復,包括遠端分割區的修復,其中 UPDATE 可能導致不正確的結果或崩潰
  • 多個 Windows 修復

此更新還包含用於巴勒斯坦和梅特拉卡特拉 DST 法律變更的 tzdata 版本 2019a,以及以色列的歷史修正。 Etc/UCT 現在是 Etc/UTC 的向後相容連結,而不是產生縮寫 UCT 的單獨區域,現在 UCT 通常是一個錯字。 PostgreSQL 仍將接受 UCT 作為輸入區域縮寫,但不會輸出它。

更新

所有 PostgreSQL 的更新版本都是累積性的。與其他小版本更新一樣,使用者不需要傾印和重新載入資料庫,也不需要使用 pg_upgrade 來套用此更新版本;您可以直接關閉 PostgreSQL 並更新其二進位檔案即可。

跳過一個或多個更新版本的使用者可能需要執行額外的更新後步驟;請參閱先前版本的發布說明以取得詳細資訊。

PostgreSQL 9.4 將於 2020 年 2 月 13 日停止接收修復程式。請參閱我們的 版本控制政策 以取得更多資訊。

連結