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 轉碼,版權歸原作者所有。