1 數據庫審計作用
數據庫審計機制主要通過對SQL操作或其他操作記錄審計日志的方式?,增強數據庫系統對非法操作的追溯及舉證能力?。高斯數據庫提供兩種審計特性?:傳統審計?,統一審計。
2?傳統審計
傳統審計通過GUC參數配置需要對數據庫的哪些操作進行審計,并通過將審計記錄寫入OS文件中(即審?計日志)的方式來保存審計結果?。傳統審計特性提供SQL函數接口以供審計管理員查詢/刪除審計記錄。
3?統一審計
統一審計通過定制化審計策略來實現高效安全審計?。管理員可以對數據庫中某特定對象(模式/表/列)打 資源標簽,并針對特定資源標簽和過濾條件創建審計策略( DDL/DML)。?當用戶執行的任務符合創建的??審計策略時,則數據庫會記錄下相應的行為并生成審計日志。
??統一審計通過將審計記錄發送至本地rsyslog或Elastic?Search服務端來保存審計結果?。管理員可到對應的?日志存儲端查看日志。
4 傳統審計配置管理-審計配置項開關
傳統審計可以記錄用戶對數據庫的啟停?、連接?、DDL?、DML?、DCL等操作,通過GUC參數開關控制對哪些操作進行審計。
1)?提供審計總開關參數audit_enabled,參數支持動態加載,在數據庫運行期間修改該配置項的值會立即生效?,無需重啟數?據庫?。默認值為on,表示開啟審計功能。
2) 除了審計總開關,各個審計項也有對應的開關?。只有開關開啟,對應的審計功能才能生效。各審計項的開關支持動態加載?。在數據庫運行期間修改審計項參數的值,不需要重啟數據庫便可生效?。提供的審計配置項?開關見下頁表格。
3)?審計總開關參數修改:
開啟?:
gs_guc?set?-Z?coordinator?-Z?datanode?-N?all?-I?all?-c?"audit_enabled?=?on"
關閉?:
???????gs_guc?set?-Z?coordinator?-Z?datanode?-N?all?-I?all?-c?"audit_enabled?=?off"
審計項修改?,以SELECT操作審計項參數audit_dml_state_select為例:
開啟SELECT操作審計:
gs_guc?set?-Z?coordinator?-Z?datanode?-N?all?-I?all?-c?"audit_dml_state_select?= ?1"?
關閉SELECT操作審計:
gs_guc?set?-Z?coordinator?-Z?datanode?-N?all?-I?all?-c?"audit_dml_state_select?= ?0"
?5 傳統審計配置管理-審計配置項參
配置項 | 審計開關 | 描述 | 默認值 |
用戶登錄、注銷審計 | audit_login_logout | 表示開啟用戶登錄、退出的審計功能。設置為0?? 表示關閉用戶登錄、退出的審計功能。不推薦設 置除0和7之外的值 | 7 |
數據庫啟動、停止、恢復和切換審計 | audit_database_process | 表示開啟數據庫啟動、停止、恢復和切換的審計 功能 | 1 |
用戶鎖定和解鎖審計 | audit_user_locked | 表示開啟審計用戶鎖定和解鎖功能 | 1 |
用戶訪問越權審計 | audit_user_violation | 表示關閉用戶越權操作審計功能 | 0 |
授權和回收權限審計 | audit_grant_revoke | 表示開啟審計用戶權限授予和回收功能 | 1 |
對用戶操作進行全量審計 | full_audit_users | 表示采用默認配置,未配置全量審計用戶 | 空字符串 |
不需要審計的客戶端名稱及IP地址 | no_audit_client | 表示采用默認配置,未將客戶端及IP加入審計黑 名單。 | 空字符串 |
數據庫對象的CREATE,ALTER, DROP操作審計 | audit_system_object | 表示只對DATABASE 、SCHEMA 、USER 、 DATA SOURCE 、NODE? GROUP這五類數據庫對象的??? CREATE 、ALTER 、DROP操作進行審計 | 67121159 |
具體表的INSERT 、 UPDATE和DELETE操 作審計 | audit_dml_state | 表示關閉具體表的DML操作(SELECT除外)審計 功能 | 0 |
SELECT操作審計 | audit_dml_state_select | 表示關閉SELECT操作審計功能 | 0 |
COPY審計 | audit_copy_exec | 表示打開COPY操作審計功能 | 1 |
存儲過程和自定義函數的執行 審計 | audit_function_exec | 表示不記錄存儲過程和自定義函數的執行 審計日志 | 0 |
SET審計 | audit_set_parameter | 表示記錄SET操作審計日志 | 1 |
執行白名單內的系統函數審計 | audit_system_function_ exec | 表示不記錄執行系統函數的審計日志 | 0 |
事務ID記錄 | audit_xid_info | 表示關閉審計日志記錄事務ID功能 | 0 |
內部工具連接及操作審計、DN上對來自CN的登入登出審 計 | audit_internal_event | 表示不對內部工具cm_agent 、gs_clean 、 WDRXdb的登入登出及操作進行審計、 DN 上不對來自CN的登入登出進行審計 | off |
6 傳統審計-SQL函數接口
1) 用戶可以通過數據庫提供的SQL函數接口查看和刪除審計日志。
2)查看、刪除審計日志需要具有AUDIT??ADMIN屬性(審計管理員)的用戶或初始用戶進行操作。
接口原型 | 參數 | 返回值 | 使用示例 |
pg_query_audit(timestamptz startime,timestamptz endtime,audit_log) ; | starttime:查看審計記錄的開始時間 endtime:查看審計記錄的結束時間 audit_log: 所查看的審計日志信息所在 的物理文件路徑 | 見下表 | 查看2024-03-06 00:00:00至2024-03-06? 12:00:00時間段內audit_user用戶 的SELECT操作審計記錄,并按時間排序: select * from pg_query_audit('2024-03-06 00:00:00','2024-03-06 12:00:00') where type = 'dml_action_select' and username = 'audit_user' order by time desc; |
pg_delete_audit(timestamptz startime,timestamptz endtime) ; | starttime:刪除審計記錄的開始時間 endtime:刪除審計記錄的結束時間 | 空 | 刪除2024-03-06 00:00:00至2024-03-06? 12:00:00時間段內的審計記錄: select * from pg_delete_audit('2024-03-06 00:00:00','2024-03-06 12:00:00'); |
7?傳統審計-日志管理策略
1)數據庫提供配置項供用戶配置審計日志的管理策略:比如審計日志存放路徑等,審計記錄占用空?間大小限制,審計文件個數限制,單個審計文件大小限制等,具體見下表。
2)數據庫會根據審計日志管理配置項參數,對審計日志進行管理。
配置項 | 含義 | 默認值 |
audit_directory | 審計文件的存儲目錄 | $GAUSSLOG/pg_audit |
audit_rotation_interval | 創建一個新審計日志文件的時間間隔,當距離上次創建一個審計 日志的時間超過了此參數值時,將生成一個新的審計日志文件 | 1天 |
audit_rotation_size | 審計日志文件的最大容量。當審計日志消息的總量超過此參數值 時,將生成一個新的審計日志文件 | 10MB |
audit_resource_policy | 審計日志的保存策略 | on |
audit_space_limit | 審計文件占用的磁盤空間總量 | 1GB |
audit_file_remain_time | 審計日志文件的最小保存時間。 | 90 |
audit_file_remain_threshold | 審計目錄下審計文件的最大數量 | 1048576 |