共計 3924 個字符,預計需要花費 10 分鐘才能閱讀完成。
這篇文章主要為大家展示了“Oracle 中 FGA 功能怎么用”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓丸趣 TV 小編帶領大家一起研究并學習一下“Oracle 中 FGA 功能怎么用”這篇文章吧。
大家對 trigger 可能比較熟悉, 但 Oracle 還有一個叫 FGA 的功能, 它的作用和 trigger 類似, 但功能更強大. 它的全稱是 Fine-Grained Audit , 是 Audit 的一種特殊方式. 使用 FGA 只要調用 Oracle 的包 DBMS_FGA.ADD_POLICY 創建一些 policy(審計策略)就行. 每個 policy 只能針對一個表或視圖. 建好策略后所有對表或視圖的 DML 操作 (select,insert,update,delete 都可以記錄到, 當然也可以添加一些篩選條件只監測某些特殊的操作.
補充: 所謂審計就是記錄你的任意操作, 假如你的操作 (執行 DML 語句) 符合指定的條件, 則你執行的 sql 語句, 將被記錄到 sys 用戶下的一些表中, 還會將你的其他信息, 比如執行時間, 用戶名, 通過什么工具, 機器名等.
FGA 在 oracle 9i 中就有了, 但在 9i 中只能審計 select 語句. 從 10g 開始才能審計所有的 DML 操作
1. 包 DBMS_FGA.ADD_POLICY 的用法
創建審計策略的語法
DBMS_FGA.ADD_POLICY (
object_schema VARCHAR2, –schema 的名字, 表或視圖的擁有者
object_name VARCHAR2, – 對象名, 表或視圖的名字
policy_name VARCHAR2, – 審計策略名字, 它和數據庫中其他對象一樣, 需要有一個不重復, 唯一的名字
audit_condition VARCHAR2, – 篩選條件比如可以選擇哪些符合條件的操作被記錄
audit_column VARCHAR2, – 表中的某一列, 可以只記錄對表中某一列的操作. 如果不指定表示審計所有的列
handler_schema VARCHAR2, – 是下面的 handler_module 的擁有者, 其實也只能是創建 policy 的用戶, 而上面的 object_schema 可以是任意用戶
handler_module VARCHAR2,– 可以是一個一個存儲過程或函數, 但監測到任何一條符合條件的操作時執行它.
enable BOOLEAN, –true 或 false 表示 policy 是開啟或關閉狀態, 如果是 false 表示不進行審計
statement_types VARCHAR2, – 表示哪些操作將被審計, 可以填上 select,insert,update,delete 中的一個或幾個
audit_trail BINARY_INTEGER IN DEFAULT,– 有參數 db,xml 表示審計到的信息保存到數據庫中或是以 xml 文件形式保存到磁盤上
audit_column_opts BINARY_INTEGER IN DEFAULT); – 這個選項其實只有在 audt_column 中指定了某列時才起作用. 它有 any_columns,all_columns 兩個選項假如表中有 eno,ename 兩列, 并在 audit_column 中指定了這兩列, 那么選 any_columns 表示只要操作其中的任意一列都將被記錄, 而這里指定 all_columns 的話是說只有一個 sql 語句同時操作了這兩列才被記錄
舉例, 假如創建表:create table temp(eno int,ename varchar2(30)); 針對這個表創建 policy
每個策略只能針對一個表或視圖, 而一個表或視圖可能對應多個策略. 當表被刪除時策略也隨之默認被刪除
BEGIN
SYS.DBMS_FGA.ADD_POLICY (
object_schema = ARWEN
,object_name = TEMP
,policy_name = FGA_TEMP
,audit_condition = NULL
,audit_column = eno,ename
,handler_schema = null
,handler_module = null
,enable = TRUE
,statement_types = SELECT,INSERT,UPDATE,DELETE
,audit_trail = SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED
–DBMS_FGA.DB 表示記錄將被保存到數據庫中,DBMS_FGA.EXTENDED 表示如果 sql 語句中帶有綁定變量也會被記錄下來.
– 如果是這樣選 audit_trail = SYS.DBMS_FGA.DB 表示不會記錄綁定變量
–SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED 改成 SYS.DBMS_FGA.XML+SYS.DBMS_FGA.EXTENDED 表示記錄保存成 xml 文件
–xml 文件所在目錄可以通過 SHOW PARAMETER AUDIT_FILE_DEST 查看, 如果要更改目錄 ALTER SYSTEM SET AUDIT_FILE_DEST = directory_path DEFERRED;
,audit_column_opts = SYS.DBMS_FGA.ALL_COLUMNS)
END;
查看創建好的 policy 對象和符合審計條件時被記錄的操作
我們可以通過 select * from dba_objects 查看 table,view 等對象, 類似的 policy 創建好后我們可以通過 SELECT * FROM DBA_AUDIT_POLICIES 來查看.
如果我們對表 temp 執行了 DML 操作, 那些信息將會被操作到 sys 用戶下的表中,Select* from sys.dba_fga_audit_trail 可以查找到.(注意這只有前面設置將記錄信息
保存到數據庫才能這樣查, 如果保存到 xml 文件中可以 Select *from V$XML_AUDIT_TRAIL)
2. 刪除審計策略, 假如刪除上面創建的策略
begin
SYS.DBMS_FGA.DROP_POLICY (
object_schema = ARWEN
,object_name = TEMP
,policy_name = FGA_TEMP
);
end;
3. 使用 handler_module
假如你想在審計到某些操作時還進行進一步的處理, 比如把信息寫到自己創建的日志中, 或者發送郵件通知相關人員. 就要在創建 policy 時使用 handler_module 的功能, 指定一個存儲過程去做相應的處理. 假如我創建一個存儲過程 temp_handler
CREATE OR REPLACE PROCEDURE temp_handler
(v_object_schema VARCHAR2
, v_object_name VARCHAR2
, v_policy_name VARCHAR2
)
IS
v_temp varchar2(30);
begin
null;
end temp_handler;
– 這里的存儲過程有點特殊, 它必須帶 v_object_schema VARCHAR2, v_object_name VARCHAR2, v_policy_name VARCHAR2 這三個參數才行, 如果直接寫一個一般的存儲過程就會出錯的. 在 policy 中調用存儲過程就這樣 寫
BEGIN
SYS.DBMS_FGA.ADD_POLICY (
object_schema = ARWEN
,object_name = TEMP
,policy_name = FGA_TEMP
,audit_condition = NULL
,audit_column = eno,ename
,handler_schema = ARWEN – 注意此處的用戶只能是創建此 policy 的用戶, 如果是其他用戶名會出錯的
,handler_module = TEMP_HANDLER
,enable = TRUE
,statement_types = SELECT,INSERT,UPDATE,DELETE
,audit_trail = SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED
,audit_column_opts = SYS.DBMS_FGA.ALL_COLUMNS)
END;
與 FGA 相關的表或者視圖:
select * from fga$
select * from fga_log$
select * from fgacol$
select * from dba_fga_audit_trail
select * from dba_common_audit_trail
select * from dba_audit_policies
select * from dba_fga_audit_trail
與 FGA 相關的包或者過程:
dbms_fga.add_policy
dbms_fga.drop_policy
表、視圖、包的列或者參數的使用方法,可以查看相關文檔。
以上是“Oracle 中 FGA 功能怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!