您好,登錄后才能下訂單哦!
小編給大家分享一下PostgreSQL審計如何實現,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
PostgreSQL 的審計還是要借助PostgreSQL的擴展pgaudit 來進行。有些熟悉PG的同學可能說,不是可以log_statement = all 來記錄所有的語句嗎,干嘛那么麻煩,自己去查日志不就好了。實際上如果公司有審計部門的情況下,這樣是過不了關的,需要一個與商業數據功能相差無幾的方式來面對審計部門的“親和力”。
安裝很簡單,如果熟悉extension的話,當然pgaudit需要加載鏈接庫中
與大部分的audit 的方式不同pg_audit記錄在標準的PostgreSQL日志中。Pgaudit通過在模塊加載時注冊自身并為executorStart、executorCheckPerms、processUtility和object_access提供掛鉤來工作。因此,pgaudit與另一種audit-trigger不同支持讀取(SELECT、COPY)。一般來說,使用pgaudit,我們可以有兩種操作模式,或者將它們結合使用:
session 模式或object 模式。
其中可以進行監控的方式
READ (select, copy from)
WRITE (insert, update, delete, truncate, copy to)
FUNCTION (function calls and DO blocks)
ROLE (grant, revoke, create/alter/drop role)
DDL (all DDL except those in ROLE)
MISC (discard, fetch, checkpoint, vacuum)
從上面可以審計監控的東西來說,還是很全面的。
下面我們可以來做一個測試
我們創建一個表,而這個表應該被audit 日志來記錄,我們看看audit 日志是否記錄了。從下圖可以看到
在日志中已經添加了audit 的記錄。
說明這個東西還是蠻好用的。日志的格式
AUDIT_TYPE - 告知你目前的audit 的方式是 session 還是 object
STATEMENT_ID - 主語句的會話ID
SUBSTATEMENT_ID - 主語句中每個子語句的順序ID。
Operation type 操作的方式是DDL DCL DML
COMMAND - 操作的命令
OBJECT_TYPE - 操作的OBJECT 類型
OBJECT_NAME - 操作的OBJECT 類型的名字,例如表名,存儲過程名等等
STATEMENT - 執行的語句
PARAMETER - 相關的參數
此時有人可能提出,這個設計的不好,為什么不能設計到插入到表中,個人覺得有兩點,既然叫審計日志,1 他是提供審計的 2 他是日志
如果日志在某些情況下爆發增長,怎么辦,塞滿整個表的存儲空間,從多方面考慮,讓日志存儲在適當的地方,其實是一個比較規范的做法。
下面我們來做幾個嘗試來看看審計日志是否能幫助我們,記錄相關的操作,下圖是PG相關的audit 選項。
相關的一些設置設什么意思
指定會話審計日志記錄哪些語句類。
可以設置的類別 read , write ,function,role ,ddl,misc , All 等
pgaudit.log_catalog
指定當一條語句中的所有關系都位于pg_catalog中時,應該啟用會話日志記錄。禁用此設置將減少來自psql和PgAdmin等工具的日志噪音,這些工具會大量查詢目錄。
pgaudit.log_relation
指定會話審計日志記錄是否應該為SELECT或DML語句中引用的每個關系(表、視圖等)創建單獨的日志條目。對于不使用對象審計日志記錄的窮舉日志記錄,這是一個非常有用的快捷方式。
例如我們要記錄 ddl ,role , functiton,以及更改系統配置 方面的操作記錄
當然,這樣的操作記錄也不是沒有缺點的,例如我想知道是那個賬戶做的某件事,這點還是沒有做到,僅僅是知道在什么時間做了什么。
以上是“PostgreSQL審計如何實現”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。