1. 程式人生 > 其它 >PG-日誌記錄與審計

PG-日誌記錄與審計

審計

日誌審計

開啟標準日誌審計

修改配置檔案 $PGDATA/postgresql.conf,配置開啟標準日誌檔案

logging_collector --是否開啟日誌收集開關,預設off,推薦on

log_destination --日誌記錄型別,預設是stderr,只記錄錯誤輸出,推薦csvlog,總共包含:stderr, csvlog, syslog, and eventlog,

log_directory --日誌路徑,預設是$PGDATA/pg_log,

log_filename --日誌名稱,預設是postgresql-%Y-%m-%d_%H%M%S.log

log_file_mode --日誌檔案型別,預設為0600

log_truncate_on_rotation --預設為off,設定為on的話,檔案內容覆蓋方式:off後面附加,on:清空再加

log_rotation_age --保留單個檔案的最大時長,預設是1d,也有1h,1min,1s

log_rotation_size --保留單個檔案的最大尺寸,預設是10MB

log_error_verbosity --預設為default,verbose表示冗長的

log_connections --使用者session登陸時是否寫入日誌,預設off,推薦為on

log_disconnections --使用者session退出時是否寫入日誌,預設off,推薦為on

log_statement --記錄使用者登陸資料庫後的各種操作

  1. none,即不記錄
  2. ddl(記錄create,drop和alter)
  3. mod(記錄ddl+insert,delete,update和truncate)
  4. all(mod+select)

log_min_duration_statement = 2s --記錄超過2秒的SQL
log_checkpoints = on
log_lock_waits = on
deadlock_timeout = 1s

pgaudit 外掛實現

使用 log_statement=all 提供基本語句日誌記錄,但細粒度不夠精細。pgaudit 提供詳細的會話和/或物件審計日誌功能。

對應版本關係
外掛下載和安裝
https://github.com/pgaudit/pgaudit
git clone https://github.com/pgaudit/pgaudit.git
cd pgaudit
make install USE_PGXS=1 PG_CONFIG=/usr/pgsql-13/bin/pg_config

配置
vi  $PGDATA/postgresql.conf
shared_preload_libraries= 'pgaudit'


psql
select * from pg_available_extensions where name like '%audit%';
CREATE EXTENSION pgaudit;
pgaudit配置引數
select name,setting from pg_settings where name like 'pgaudit%';
pgaudit.log

可能的值是:

  • READ: SELECT and COPY when the source is a relation or a query.
  • WRITE: INSERT, UPDATE, DELETE, TRUNCATE, and COPY when the destination is a relation.
  • FUNCTION: Function calls and DO blocks.
  • ROLE: Statements related to roles and privileges: GRANT, REVOKE, CREATE/ALTER/DROP ROLE.
  • DDL: All DDL that is not included in the ROLE class.
  • MISC: Miscellaneous commands, e.g. DISCARD, FETCH, CHECKPOINT, VACUUM.

可以使用逗號分隔的列表來提供多個類,並且類可以通過使用一種來減少類來減少。

預設值為none。

pgaudit.log_catalog

指定在語句中的所有關係都在pg_catalog中的情況下,應該啟用會話日誌記錄。禁用此設定將減少日誌中的噪音,例如psql和PgAdmin等工具,這些工具對目錄進行了大量查詢。 預設值on 。

pgaudit.log_level

指定用於日誌條目的日誌級別 (see Message Severity Levels for valid levels) ,但注意ERROR、FATAL和PANIC。此設定用於進行迴歸測試,也可能對終端使用者用於測試或其他目的使用。 預設值為log。

pgaudit.log_parameter

指定稽核日誌記錄應該包含與語句傳遞的引數。當引數出現時,在語句文字之後,將以CSV格式包含。 預設值off。

pgaudit.log_relation

指定會話稽核日誌記錄是否應該為SELECT或DML語句中引用的每個關係(表、檢視等)建立單獨的日誌項。這是在不使用物件稽核日誌記錄的情況下進行窮舉日誌記錄的一種有用的捷徑。 預設值已關閉。

pgaudit.logstatementonce

指定日誌記錄是否包含語句、文字和引數,其中包含statement/substatement組合的第一個日誌條目,或與每個條目一起。禁用此設定將導致更少的日誌記錄,但可能會使確定生成日誌項的語句變得更困難,儘管statement/substatement對和程序id應該足以標識使用上一個條目記錄的語句文字。 預設值off。

pgaudit.role

指定要用於物件稽核日誌記錄的主角色。可以通過將多個審計角色授予主角色來定義多個審計角色。這就允許多個組負責審計日誌記錄的不同方面。 沒有預設值。

會話審計日誌記錄

會話審計日誌記錄提供了後端使用者執行的所有語句的詳細日誌。

配置

使用pgaudit.log設定啟用會話日誌記錄。 為所有DML和DDL啟用會話日誌記錄,並記錄DML語句中的所有關係:

set pgaudit.log = 'write, ddl';set pgaudit.log_relation = on; 為除MISC之外的所有命令啟用會話日誌記錄,並將稽核日誌資訊作為NOTICE提交:

set pgaudit.log = 'all, -misc';set pgaudit.log_level = notice;
物件稽核日誌

只有SELECT、INSERT、UPDATE和DELETE命令才會被支援。在物件稽核日誌記錄中不包含TRUNCATE。

pgaudit.log = 'read, write'的一個更細粒度的替換。因此,將它們結合在一起可能是不明智的,但一個可能的場景是使用會話日誌記錄每個語句,然後用物件日誌來補充有關特定關係的更多細節。

配置

物件級別的審計日誌記錄是通過角色系統實現的。pgaudit.role設定定義了用於稽核日誌記錄的角色。當審計角色具有執行命令的許可權或繼承來自另一個角色的許可權時,將對關係(表、檢視等)進行稽核。這使您能夠有效地擁有多個審計角色,儘管在任何上下文中都有一個主角色。

將pgaudit.role設定為auditor,並grant在ACCOUNT表中的SELECT和DELETE許可權。現在將記錄帳戶表中的任何SELECT或DELETE語句:

set pgaudit.role = 'auditor';grant select, delete
   on public.account   to auditor;
pgAudit Analyze 外掛

PostgreSQL 審計日誌分析器 (pgAudit Analyze) 從 PostgreSQL 日誌中讀取審計條目並將它們載入到資料庫模式中以幫助分析和審計。