Postgresql 安全組件都有那些

postgresql  安全的組件有不少, 到底有那些都起到什麼作用, 可以在這裏說一說. 安全的組件, 主要有以下幾個方面,  1 密碼攻擊方面的安全保護  2 審計方面的記錄  3 密碼方面的等級的保護, 以下截圖均從 POSTGRESQL 12.2 版本來進行

1  密碼攻擊方面的安全保護

 這功能是從 9.4.21 開始添加的功能, 並不需要通過 create extension 來進行, 在添加後直接重新啓動數據庫服務就可以.

打開 POSTGRESQL 數據庫的 share_preload_librairies 數據庫, 在 shared_preload_libraries 中添加 auth_delay 並且添加    auth_dealy.milliseconds,   這裏默認這個參數爲 0 , 這裏的意思爲當訪問中密碼錯誤的情況下, 我們會等待多長時間對訪問的連接進行回饋. 這樣的方法

可以通過調高 auth_delay.milliseconds 來進行相關的測試, 比如調整爲 5000 也就是密碼輸入錯誤後, 需要 5 秒系統才能反映.

試驗是通過打印當前時間, 連接 POSTGRESQL , 密碼錯誤, 等待時間, 在打印時間組成的, 這裏可以看到 11 秒的時間, 但密碼輸入正確則不會出現等待的問題. 輸入密碼正確則立即進入系統.

這樣的方式保護優點是防止對數據庫進行大批量的數據訪問, 去猜測密碼的正確性. 但缺點也很明顯, 如果攻擊的方式抓住錯誤密碼長時間沒有響應, 可以發動大量的連接來連接數據庫, 導致正常的連接無法連入到數據庫中, 可以稱之爲數據庫的 DDOC 攻擊.

2  passwordcheck 

passworkdcheck 模塊來自於 passwordcheck.so 模塊, 它可以實現密碼複雜度的要求, 通過此模塊可以檢查密碼的複雜性的要求, 如果密碼沒有達到預定的密碼的複雜度的要求, 會拒絕創建數據庫用戶的方式來強制重新建立賬號, 直到達到相關的要求.  其中 passwordcheck.so 是其中必然要包含的文件, 如果沒有則這個功能無法啓動

然後在 shared_preload_libraries 中加入 passwordcheck 功能.

alter system set shared_preload_libraries=pg_pathman,pg_stat_statements,passwordcheck;

重啓數據庫系統

在添加完 passwordcheck 後, 建立用戶給出密碼, 必須是最少 8 個字符, 必須包含數字, 和字母, 密碼中不能有用戶的名字

在修改密碼中如果密碼中只有數字的化也會無法添加, 因爲要求必須包含字母

用戶密碼中不能包含用戶名

3     pgaudit  數據庫的審覈是數據庫工作中的一項重要的工作, pgaudit 是一個開源的擴展, 通過日誌的方式來記錄 postgresql 數據庫詳細的 audit 審覈的日誌, 主要應用與本地的日誌的記錄, 這個工具主要是來自於二象限公司的開發者.

make install USE_PGXS=1

安裝完畢

當然我們可以通過設置 log_statement=all 來記錄 PostgreSQL 中的所有語句, 問題是爲什麼要使用 pgAudit, 主要的問題在於 postgresql 中的審計是可以針對特定的數據庫以及特定的操作來進行記錄, 例如 SELECT COPY , 或者 Insert,update, delete 等操作, 或者 DDL 等操作進行單獨的記錄. 並且不同的點在於他還對於誰執行的, 什麼時間執行的有相關的記錄.

重啓數據庫服務器  在需要執行 audit 的數據庫打開 create extension pgaudit

對 audit 設置中可以通過命令的方式來進行設置

1  確認當前數據庫是否安裝了

SELECT * FROM pg_available_extensionsWHERE name LIKE '%audit%';

2  SELECTname,setting FROM pg_settings WHERE name LIKE 'pgaudit%';

在開啓後, 在進行相關操作, 會在日誌中記錄相關 audit 日誌

可以對當前檢測的數據庫的檢測的級別進行更改

set pgaudit.log= 'read,write,ddl';

實際上對於 POSTGRESQL 的數據庫安全可做的東西還很多

例如數據關鍵列加密, 或者對於用戶訪問採用其他的模式, 祕鑰或令牌的方式, 不過安全是一個全方位的問題, 例如對數據庫的密碼破解的問題, 也可以通過網絡對特定端口的異常訪問找到問題的解決點, 不能將數據庫的安全全部寄託到數據庫本身.

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。