這篇文章主要為大家展示了“Oracle中FGA功能怎么用”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Oracle中FGA功能怎么用”這篇文章吧。
創(chuàng)新互聯(lián)建站專注于盧氏網(wǎng)站建設服務及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供盧氏營銷型網(wǎng)站建設,盧氏網(wǎng)站制作、盧氏網(wǎng)頁設計、盧氏網(wǎng)站官網(wǎng)定制、成都小程序開發(fā)服務,打造盧氏網(wǎng)絡公司原創(chuàng)品牌,更為您提供盧氏網(wǎng)站排名全網(wǎng)營銷落地服務。
大家對trigger可能比較熟悉,但Oracle還有一個叫FGA的功能,它的作用和trigger類似,但功能更強大.它的全稱是Fine-Grained Audit ,是Audit的一種特殊方式.使用FGA只要調(diào)用Oracle的包DBMS_FGA.ADD_POLICY創(chuàng)建一些policy(審計策略)就行.每個policy只能針對一個表或視圖.建好策略后所有對表或視圖的DML操作(select,insert,update,delete都可以記錄到,當然也可以添加一些篩選條件只監(jiān)測某些特殊的操作.
補充:所謂審計就是記錄你的任意操作,假如你的操作(執(zhí)行DML語句)符合指定的條件,則你執(zhí)行的sql語句,將被記錄到sys用戶下的一些表中,還會將你的其他信息,比如執(zhí)行時間,用戶名,通過什么工具,機器名等.
FGA在oracle 9i中就有了,但在9i中只能審計select語句.從10g開始才能審計所有的DML操作
1.包DBMS_FGA.ADD_POLICY的用法
創(chuàng)建審計策略的語法
DBMS_FGA.ADD_POLICY (
object_schema VARCHAR2, --schema的名字,表或視圖的擁有者
object_name VARCHAR2, --對象名,表或視圖的名字
policy_name VARCHAR2, --審計策略名字,它和數(shù)據(jù)庫中其他對象一樣,需要有一個不重復,唯一的名字
audit_condition VARCHAR2, --篩選條件比如可以選擇哪些符合條件的操作被記錄
audit_column VARCHAR2, --表中的某一列,可以只記錄對表中某一列的操作.如果不指定表示審計所有的列
handler_schema VARCHAR2, --是下面的handler_module的擁有者,其實也只能是創(chuàng)建policy的用戶,而上面的object_schema可以是任意用戶
handler_module VARCHAR2,--可以是一個一個存儲過程或函數(shù),但監(jiān)測到任何一條符合條件的操作時執(zhí)行它.
enable BOOLEAN, --true 或false表示policy是開啟或關閉狀態(tài),如果是false表示不進行審計
statement_types VARCHAR2, --表示哪些操作將被審計,可以填上select,insert,update,delete中的一個或幾個
audit_trail BINARY_INTEGER IN DEFAULT,--有參數(shù)db,xml表示審計到的信息保存到數(shù)據(jù)庫中或是以xml文件形式保存到磁盤上
audit_column_opts BINARY_INTEGER IN DEFAULT); --這個選項其實只有在audt_column中指定了某列時才起作用.它有any_columns,all_columns兩個選項假如表中有eno,ename兩列,并在audit_column中指定了這兩列,那么選any_columns表示只要操作其中的任意一列都將被記錄,而這里指定all_columns的話是說只有一個sql語句同時操作了這兩列才被記錄
舉例,假如創(chuàng)建表:create table temp(eno int,ename varchar2(30));針對這個表創(chuàng)建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表示記錄將被保存到數(shù)據(jù)庫中,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;
查看創(chuàng)建好的policy對象和符合審計條件時被記錄的操作
我們可以通過select * from dba_objects查看table,view等對象,類似的policy創(chuàng)建好后我們可以通過SELECT * FROM DBA_AUDIT_POLICIES來查看.
如果我們對表temp執(zhí)行了DML操作,那些信息將會被操作到sys用戶下的表中,Select* from sys.dba_fga_audit_trail可以查找到.(注意這只有前面設置將記錄信息
保存到數(shù)據(jù)庫才能這樣查,如果保存到xml文件中可以Select *from V$XML_AUDIT_TRAIL)
2.刪除審計策略,假如刪除上面創(chuàng)建的策略
begin
SYS.DBMS_FGA.DROP_POLICY (
object_schema => 'ARWEN'
,object_name => 'TEMP'
,policy_name => 'FGA_TEMP'
);
end;
3.使用handler_module
假如你想在審計到某些操作時還進行進一步的處理,比如把信息寫到自己創(chuàng)建的日志中,或者發(fā)送郵件通知相關人員.就要在創(chuàng)建policy時使用handler_module的功能,指定一個存儲過程去做相應的處理.假如我創(chuàng)建一個存儲過程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這三個參數(shù)才行,如果直接寫一個一般的存儲過程就會出錯的.在policy中調(diào)用存儲過程就這樣 寫
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' --注意此處的用戶只能是創(chuàng)建此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
表、視圖、包的列或者參數(shù)的使用方法,可以查看相關文檔。
以上是“Oracle中FGA功能怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!