您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Oracle中FGA功能怎么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Oracle中FGA功能怎么用”這篇文章吧。
大家對(duì)trigger可能比較熟悉,但Oracle還有一個(gè)叫FGA的功能,它的作用和trigger類似,但功能更強(qiáng)大.它的全稱是Fine-Grained Audit ,是Audit的一種特殊方式.使用FGA只要調(diào)用Oracle的包DBMS_FGA.ADD_POLICY創(chuàng)建一些policy(審計(jì)策略)就行.每個(gè)policy只能針對(duì)一個(gè)表或視圖.建好策略后所有對(duì)表或視圖的DML操作(select,insert,update,delete都可以記錄到,當(dāng)然也可以添加一些篩選條件只監(jiān)測(cè)某些特殊的操作.
補(bǔ)充:所謂審計(jì)就是記錄你的任意操作,假如你的操作(執(zhí)行DML語(yǔ)句)符合指定的條件,則你執(zhí)行的sql語(yǔ)句,將被記錄到sys用戶下的一些表中,還會(huì)將你的其他信息,比如執(zhí)行時(shí)間,用戶名,通過(guò)什么工具,機(jī)器名等.
FGA在oracle 9i中就有了,但在9i中只能審計(jì)select語(yǔ)句.從10g開(kāi)始才能審計(jì)所有的DML操作
1.包DBMS_FGA.ADD_POLICY的用法
創(chuàng)建審計(jì)策略的語(yǔ)法
DBMS_FGA.ADD_POLICY (
object_schema VARCHAR2, --schema的名字,表或視圖的擁有者
object_name VARCHAR2, --對(duì)象名,表或視圖的名字
policy_name VARCHAR2, --審計(jì)策略名字,它和數(shù)據(jù)庫(kù)中其他對(duì)象一樣,需要有一個(gè)不重復(fù),唯一的名字
audit_condition VARCHAR2, --篩選條件比如可以選擇哪些符合條件的操作被記錄
audit_column VARCHAR2, --表中的某一列,可以只記錄對(duì)表中某一列的操作.如果不指定表示審計(jì)所有的列
handler_schema VARCHAR2, --是下面的handler_module的擁有者,其實(shí)也只能是創(chuàng)建policy的用戶,而上面的object_schema可以是任意用戶
handler_module VARCHAR2,--可以是一個(gè)一個(gè)存儲(chǔ)過(guò)程或函數(shù),但監(jiān)測(cè)到任何一條符合條件的操作時(shí)執(zhí)行它.
enable BOOLEAN, --true 或false表示policy是開(kāi)啟或關(guān)閉狀態(tài),如果是false表示不進(jìn)行審計(jì)
statement_types VARCHAR2, --表示哪些操作將被審計(jì),可以填上select,insert,update,delete中的一個(gè)或幾個(gè)
audit_trail BINARY_INTEGER IN DEFAULT,--有參數(shù)db,xml表示審計(jì)到的信息保存到數(shù)據(jù)庫(kù)中或是以xml文件形式保存到磁盤(pán)上
audit_column_opts BINARY_INTEGER IN DEFAULT); --這個(gè)選項(xiàng)其實(shí)只有在audt_column中指定了某列時(shí)才起作用.它有any_columns,all_columns兩個(gè)選項(xiàng)假如表中有eno,ename兩列,并在audit_column中指定了這兩列,那么選any_columns表示只要操作其中的任意一列都將被記錄,而這里指定all_columns的話是說(shuō)只有一個(gè)sql語(yǔ)句同時(shí)操作了這兩列才被記錄
舉例,假如創(chuàng)建表:create table temp(eno int,ename varchar2(30));針對(duì)這個(gè)表創(chuàng)建policy
每個(gè)策略只能針對(duì)一個(gè)表或視圖,而一個(gè)表或視圖可能對(duì)應(yīng)多個(gè)策略.當(dāng)表被刪除時(shí)策略也隨之默認(rèn)被刪除
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ù)庫(kù)中,DBMS_FGA.EXTENDED表示如果sql語(yǔ)句中帶有綁定變量也會(huì)被記錄下來(lái).
--如果是這樣選audit_trail => SYS.DBMS_FGA.DB表示不會(huì)記錄綁定變量
--SYS.DBMS_FGA.DB+SYS.DBMS_FGA.EXTENDED改成SYS.DBMS_FGA.XML+SYS.DBMS_FGA.EXTENDED表示記錄保存成xml文件
--xml文件所在目錄可以通過(guò)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對(duì)象和符合審計(jì)條件時(shí)被記錄的操作
我們可以通過(guò)select * from dba_objects查看table,view等對(duì)象,類似的policy創(chuàng)建好后我們可以通過(guò)SELECT * FROM DBA_AUDIT_POLICIES來(lái)查看.
如果我們對(duì)表temp執(zhí)行了DML操作,那些信息將會(huì)被操作到sys用戶下的表中,Select* from sys.dba_fga_audit_trail可以查找到.(注意這只有前面設(shè)置將記錄信息
保存到數(shù)據(jù)庫(kù)才能這樣查,如果保存到xml文件中可以Select *from V$XML_AUDIT_TRAIL)
2.刪除審計(jì)策略,假如刪除上面創(chuàng)建的策略
begin
SYS.DBMS_FGA.DROP_POLICY (
object_schema => 'ARWEN'
,object_name => 'TEMP'
,policy_name => 'FGA_TEMP'
);
end;
3.使用handler_module
假如你想在審計(jì)到某些操作時(shí)還進(jìn)行進(jìn)一步的處理,比如把信息寫(xiě)到自己創(chuàng)建的日志中,或者發(fā)送郵件通知相關(guān)人員.就要在創(chuàng)建policy時(shí)使用handler_module的功能,指定一個(gè)存儲(chǔ)過(guò)程去做相應(yīng)的處理.假如我創(chuàng)建一個(gè)存儲(chǔ)過(guò)程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;
--這里的存儲(chǔ)過(guò)程有點(diǎn)特殊,它必須帶v_object_schema VARCHAR2, v_object_name VARCHAR2, v_policy_name VARCHAR2這三個(gè)參數(shù)才行,如果直接寫(xiě)一個(gè)一般的存儲(chǔ)過(guò)程就會(huì)出錯(cuò)的.在policy中調(diào)用存儲(chǔ)過(guò)程就這樣 寫(xiě)
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的用戶,如果是其他用戶名會(huì)出錯(cuò)的
,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相關(guān)的表或者視圖:
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相關(guān)的包或者過(guò)程:
dbms_fga.add_policy
dbms_fga.drop_policy
表、視圖、包的列或者參數(shù)的使用方法,可以查看相關(guān)文檔。
以上是“Oracle中FGA功能怎么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。