近日,PostgreSQL全球開發小組發布了對數據庫系統的所有支持版本的更新,包括10.1,9.6.6,9.5.10,9.4.15,9.3.20和9.2.24。此版本修復了三個安全問題以及在過去三個月中關于BRIN索引,邏輯復制和其他錯誤中發現的問題。
所有使用受影響版本的PostgreSQL的用戶都需要盡快更新。如果您使用BRIN索引或contrib / start-scripts,請參閱發行說明以了解升級后其他步驟。
安全問題
這個版本已經修復了三個安全漏洞:
CVE-2017-12172:啟動腳本允許數據庫管理員修改根擁有的文件
CVE-2017-15098:JSON函數中的內存泄露
CVE-2017-15099:INSERT ... ON CONFLICT DO UPDATE無法強制執行SELECT權限
CVE-2017-12172:啟動腳本允許數據庫管理員修改根擁有的文件
在此版本之前,postmaster(在較新的版本中,"postgres")進程的啟動日志文件已被打開,而進程仍由root擁有。通過這種設置,數據庫所有者可以指定一個他們沒有訪問的文件,并導致該文件被記錄的數據損壞。
此修復程序可確保以用戶指定的方式打開啟動日志文件,運行PostgreSQL服務器。任何使用啟動腳本的用戶都需要確保啟動日志文件是由指定用戶運行PostgreSQL服務器的用戶擁有的。
CVE-2017-15099:INSERT ... ON CONFLICT DO UPDATE無法強制執行SELECT權限
在此版本之前,"INSERT ... ON CONFLICT DO UPDATE"不會檢查執行用戶是否有權在執行沖突檢查的索引上執行"SELECT"。此外,在啟用了行級別安全性的表中,執行更新之前,"INSERT ... ON CONFLICT DO UPDATE"不會檢查該表的SELECT策略。
此修復程序確保"INSERT ... ON CONFLICT DO UPDATE"在執行前根據表權限和RLS策略進行檢查。
錯誤修復和改進
此更新還修復了過去幾個月中報告的一些錯誤。其中有一些問題僅影響版本10,但也有一些會影響所有受支持的版本:
修正BRIN索引中的競爭條件,可能會導致某些行不包含在索引中。
修復從PL語言函數調用邏輯解碼時的崩潰。
修復數個邏輯復制。
對于在版本10之前的CTE 附加INSERT / UPDATE / DELET。
防止處理嵌套觸發器時的低概率崩潰。
當FILTER子句中的條件評估為FALSE時,不要評估聚合函數的參數表達式,符合SQL標準。
當多個GROUPING SETS列包含相同的簡單變量時,修復不正確的查詢結果。
從SELECT的目標列表中評估設置返回函數時,修復查詢生命周期內存泄漏。
并行查詢執行的一些修復,包括在包含特定類型的位圖掃描的某些查詢并行執行中修復崩潰。
修復json_build_array(),json_build_object(),jsonb_build_array()和jsonb_build_object()來正確處理顯式的VARIADIC參數。
防止將無限的浮點值轉換為數字類型。
修復autovacuum的“工作項目”邏輯,防止可能的崩潰和工作項目的無聲丟失。
對于在視圖的末尾添加列VIEW的修正。
修復由用戶創建范圍的數據類型的可測性檢測。
為了查詢計劃的目的而對列使用擴展統計的改進。
當更早發生statement_timeout時,防止忽略idle_in_transaction_session_timeout。
修復在會話中執行任何查詢之前由于超過20億個事務處理而導致的NOTIFY消息的低概率丟失。
多個文件系統交互修復。
在COPY或lo_export()文件創建失敗時,正確地恢復umask設置。
修復pg_dump以確保它以有效的順序發出GRANT命令。
修復pg_basebackup的表空間路徑匹配,在比較之前對兩個路徑進行規范化,以幫助提高Windows兼容性。
修正libpq在試圖讀取“?/ .pgpass”文件時不要求用戶的主目錄存在。
對ecpg的多個修復。
關于9.2版的EOL聲明
PostgreSQL 9.2版本生命周期結束(EOL)。此版本的社區不會發布其他更新或安全修補程序,所以使用9.2版本的用戶一定要盡快升級。