簡介
金(jin)融機構、政府機構和(he)許多行(xing)業都(dou)需要保留 審計(ji)(ji)日志以(yi)(yi)滿足監管要求。通過將 PostgreSQL 審計(ji)(ji)擴展 (pgAudit) 與RDS for PostgreSQL 數據庫實例(li)一起使用(yong),可以(yi)(yi)捕(bu)獲(huo)審計(ji)(ji)員通常需要或(huo)滿足法規要求的(de)詳細記(ji)錄。例(li)如,您(nin)可以(yi)(yi)設置pgAudit擴展來跟蹤對特定數據庫和(he)表所做的(de)更(geng)改(gai)(gai)、記(ji)錄進行(xing)更(geng)改(gai)(gai)的(de)用(yong)戶(hu)以(yi)(yi)及(ji)許多其他詳細信息(xi)。
更多信息,請參見。
支持版本說明
可通過以下SQL語句查詢當前實例是(shi)否(fou)支(zhi)持該插件:
SELECT * FROM pg_available_extension_versions WHERE name = 'pgaudit';如果不支持,可通過使用轉儲與還原升級大版本使用該插件。
RDS PostgreSQL實例支持的插件,具體請參見支持的插件列表。
插件安裝/卸載
安裝插件
SELECT control_extension ('create', 'pgaudit');刪除插件
SELECT control_extension ('drop', 'pgaudit');更多信息,請參見通過界面安裝和卸載插件和通過SQL命令安裝和卸載插件。
基本使用
設置pgaudit擴展
1. 首先需要在(zai)插件(jian)管理中預加(jia)載pgaudit插件(jian),因(yin)為(wei)pgaudit擴展會安(an)裝用于審核數據定義語(yu)言 (DDL) 語(yu)句的事件(jian)觸發器。 默認(ren)插件(jian)管理中已(yi)預加(jia)載pgaudit插件(jian),也可通過如下命令查看是否(fou)加(jia)載成功。
show shared_preload_libraries;
shared_preload_libraries
---------------------------------------------------------------------------------
pg_stat_statements,pgaudit,passwordcheck.so,pg_sql_history,auth_delay,pglogical
(1 row)
2. 加載(zai)成功(gong)后再(zai)進行創建(jian)插件,請(qing)參考(kao)插件安裝/卸(xie)載(zai)。
3. 插(cha)件安裝好(hao)后,需要開啟審計日志。
a. 在(zai)控制臺上單擊實例名(ming)稱,在(zai)基本(ben)信息頁(ye)面,選擇“SQL審計”頁(ye)簽。
b. 單(dan)擊“設置SQL審計”。
c. 在彈框中,開啟審(shen)計日(ri)志開關(guan),可選擇審(shen)計日(ri)志保留天數。
4. 開啟審(shen)計日志后,還需要配(pei)置參數(shu)。
在(zai)界(jie)面“參數修改”頁(ye)簽,搜索“pgaudit.log”參數(指定會話審計日(ri)志將記錄哪些(xie)(xie)類(lei)型(xing)的(de)語句)并設置為適合業務需要的(de)值,可以捕(bu)獲對(dui)日(ri)志的(de)插入、更新、刪除和(he)其(qi)他(ta)一些(xie)(xie)類(lei)型(xing)的(de)更改。“pgaudit.log”參數取(qu)值如下:
表 參數值說明
參數值 | 描述 |
|---|---|
none | 這是原定設置值。不記錄任何數據庫更改。 |
all | 記錄所有內容(read、write、function、role、ddl、misc)。 |
ddl | 記錄所有數據定義語言(DDL)語句(不包括在 ROLE 類中)。 |
function | 記錄函數調用和DO塊。 |
misc | 記錄其他命令,例如:DISCARD、FETCH、CHECKPOINT、VACUUM、SET |
read | 當源為關系(例如表)或查詢時記錄SELECT和COPY。 |
role | 記錄與角色和權限相關的語句,例如:GRANT、REVOKE、CREATE ROLE、ALTER ROLE、DROP ROLE |
write | 當目標為關系(表)時,記錄INSERT、UPDATE、DELETE、TRUNCATE和COPY。 |
pgaudit還有一些參數,可根據業務需要在界面上進行(xing)設置。
表 參數說明
| 參數名稱 | 描述 |
|---|---|
| pgaudit.log | 指定會話審計日志記錄將記錄哪些類的語句。 |
| pgaudit.log_catalog | 指定在語句中的所有關系都在pg_catalog中的情況下,應該啟用會話日志記錄。 |
| pgaudit.log_client_authentication | 控制是否記錄用戶認證的信息。 |
| pgaudit.log_extra_field | 控制是否記錄PID、IP、用(yong)戶(hu)名、數據庫(ku)等字段。 |
| pgaudit.log_file_rotation_age | 設置獨立審計日志的輪轉時間。 |
| pgaudit.log_parameter | 指定審核日志記錄應該包含與語句傳遞的參數。 |
| pgaudit.log_relation | 指定會話審核日志記錄是否應該為SELECT或DML語句中引用的每個關系(表、視圖等)創建單獨的日志項。 |
| pgaudit.log_rows | 指定審計日志記錄應包括語句檢索或影響的行。 |
| pgaudit.log_write_txid | 控制是否記錄寫操作(insert/update等)的txid。 |
| pgaudit.logstatementonce | 指定日志記錄是否包含語句、文本和參數。 |
| pgaudit.log_client | 指定審計日志是否發送到客戶端。 |
| pgaudit.log_level | 指定用于日志條目的日志級別。 |
| pgaudit.write_into_pg_log_file | 控制是否仍舊向PostgreSQL的運行日志記錄審計信息。 |
如果您(nin)需要在客(ke)戶端上顯示(shi)審計日志,可以(yi)通過修(xiu)改以(yi)下參(can)數進行配(pei)置:
? “pgaudit.write_into_pg_log_file”和“pgaudit.log_client”參數值同時(shi)為on,再(zai)根據“pgaudit.log_level”參數選擇客(ke)(ke)戶(hu)(hu)端(duan)(duan)顯示的日志級別(bie)(例(li)如notice),客(ke)(ke)戶(hu)(hu)端(duan)(duan)再(zai)次進(jin)行查詢時(shi),可以(yi)在(zai)客(ke)(ke)戶(hu)(hu)端(duan)(duan)顯示對應(ying)級別(bie)的審計日志。
? “pgaudit.write_into_pg_log_file”和“pgaudit.log_client”參數(shu)只要有(you)一個值(zhi)為off,客戶端不會(hui)顯(xian)示(shi)審(shen)計日志。
? “pgaudit.log_level”僅在“pgaudit.log_client”打開時(shi)啟用。
SQL審計功能驗證
1. 執行sql語句(ju)。
create table t1 (id int);
insert into t1 values (1);
select * from t1;
id
----
1
(1 rows)
2. 在界面上通過(guo)“SQL審計”頁簽進行審計日志下載。
審計日志包含(han)以(yi)下內容:
AUDIT: OBJECT,1,1,READ,SELECT,TABLE,public.t1,select * from t1;? AUDIT:表示這是一(yi)個審計日志條目。
? OBJECT:表示這是(shi)一個對象級別的審計日(ri)志。
? 第一個1:表示對象的 ID。
? 第二(er)個1:表示對象的子(zi) ID。
? READ:表示這是一個讀取操作。
? SELECT:表示(shi)這是一個 SELECT 查詢(xun)。
? TABLE:表示對象(xiang)類型(xing)是(shi)表。
? public.t1:表示(shi)表的(de)名稱和模式(shi)。
? select * from t1:表示執行的 SQL 查詢語句。