數據庫安全審計是企業級數據庫必須提供的一個基礎能力,有助于事后對訪問合規性進行追溯。結合業界通用的做法,TeleDB從多個維度來提供全方位的審計能力,同時TeleDB審計通過旁路檢測方式,對數據庫運行效率的影響極小。
TeleDB審計主要包括粗粒度審計(audit)和細粒度審計(fga)。
- 粗粒度審計日志主要存儲在cn的audit-*.log:主要針對語句級別、用戶級別、對象級別,對象操作級別,主要在sql語法解析層面進行捕捉。
- 細粒度粒度審計日志存儲在dn的audit-*.fga:主要是針對某個表的列屬性、列的值進行審計,在sql執行器進行捕捉。
說明
兩套審計規則都依賴audit_admin的審計管理員用戶。
審計管理員audit_admin、安全管理員mls_admin、數據庫管理員三權分立,審計用戶命名必須以audit_開頭。
audit和fga使用兼容:相互獨立,可只用audit;可只用fga;可用audit和fga。
粗粒度audit操作步驟:
以audit_admin用戶進行連接,執行審計規則audit all,會將后續的語句審計記錄在$DATADIR/pg_log/audit/audit-*.log
$ ./psql -h 127.0.0.1 -p11111 -d postgres -W -U audit_admin
Password for user audit_admin:
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.
postgres=> audit all;
WARNING: AuditDefine Rcv: audit all;
WARNING: AuditDefine Snd: AUDIT ALL ;AUDIT
細粒度fga操作步驟:
在每1個cn和dn都會開啟1個audit logger process和1個后臺進程bgworker:audit fga worker
--tangyujie是初始化的超級用戶
$ ./psql -h 127.0.0.1 -p11111 -d postgres -W -U tangyujie
--------------------------------步驟1: 創建插件&查看參數
create extension pg_fga;show enable_fga;
--1.創建用戶和數據庫CREATE USER audit_fga_user WITH SUPERUSER CREATEDB LOGIN ENCRYPTED PASSWORD
'audit_fga_user';CREATE DATABASE audit_fga_database;
--2切換到audit_fga_database數據庫
\c audit_fga_database audit_fga_user;create extension pg_fga;
--3.切換到audit_fga_user用戶,建表插入數據
\c audit_fga_database audit_fga_usercreate table foo(idx bigint, str text);insert into foo values(1, 'a');
3.3 驗證insert into foo values(2, 'b');insert into foo values(3, 'c');insert into foo values(4, 'd');select * from foo;
--------------------------------步驟2: 制定審計規則
--4.切換到 audit_admin審計管理員用戶
\c audit_fga_database audit_admin
-- 4.1 增加審計規則add_policy(指定模式、表名、規則名, 列名、審計條件,模式,存儲過程、是否開啟審計,語句類型)add_policy(object_schema,object_name,policy_name,audit_columns,audit_condition,handler_schema,handler_module,audit_enable,statement_types,audit_column_opts),其中audit_enable必須為true才能生效,默認為true。select add_policy(object_schema:='public', object_name:='foo',audit_columns:='idx',policy_name:='poli', audit_condition:='idx > 1');select add_policy('public', 'foo', 'poli1','idx','idx >1','public','hello_world','true','select');
-- 4.2 查詢pg_fga插件的視圖
select * from pg_audit_fga_conf;select * from pg_audit_fga_conf_detail ;select *from pg_audit_fga_policy_columns_detail;
--------------------------------步驟3: 生效審計規則
-- 4.3開啟審計規則
enable_policy(指定模式、表名、規則名),使得audit_enable為trueselect enable_policy(object_schema:='public', object_name:='foo',policy_name:='poli');select enable_policy(object_schema:='public', object_name:='foo',policy_name:='poli1');
--------------------------------其他函數
-- 4.4 刪除審計規則drop_policy(指定模式、表名、規則名)。
select drop_policy(object_schema:='public', object_name:='bar',policy_name:='poli');
-- 4.5 禁用審計規則
disable_policy(指定模式、表名、規則名),使得audit_enable為false
select disable_policy(object_schema:='public', object_name:='foo',policy_name:='poli1');
審計日志管理
- 設置設計規則
① 在當前實例下拉框選擇您所需要查詢的實例,選擇審計日志頁簽,單擊 審計設置 ,出現審計設置彈框。
② 在審計設置彈框中,選擇 是否開啟審計 、 審計粒度 ,單擊確定完成審計設置。
- 當審計粒度為 全局級 ,您可對需要進行審計和告警的動作進行選擇。
- 當審計粒度為 對象級 ,您需設置對象審計規則同時使用。
- 審計規則管理
① 在當前實例下拉框選擇您所需要查詢的實例,選擇審計日志頁簽,單擊 審計規則管理 ,進入審計規則管理頁面。
② 新增審計規則
- 在審計規則管理頁面,單擊 新增審計規則 ,出現新增審計規則彈框。
- 在新增審計規則彈框中,輸入 規則名稱 、選擇 審計對象名稱 、勾選 審計操作類型 、輸入審計對象和選擇 是否開啟 , 是否觸發告警 ,單擊確定完成新增審計規則。
③ 編輯審計規則
單擊已創建審計規則所在行的 編輯 ,可修改審計規則。
④ 刪除審計規則
單擊已創建審計規則所在行的 刪除 ,可刪除審計規則。
- 查看審計日志
選擇審計日志頁簽,在當前實例下拉框選擇您需要查詢的實例,設置查詢開始時間和結束時間,在下拉框 選擇查詢條件 ,單擊 查詢 。
查詢條件可選擇 節點名稱 、 審計類型 、 SQL語句 、數據庫名稱和 用戶名 。