溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Oracle中FGA功能怎么用

發(fā)布時(shí)間:2021-12-20 17:20:11 來(lái)源:億速云 閱讀:541 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫(kù)

這篇文章主要為大家展示了“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è)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI