真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Oracle中FGA功能怎么用

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


本文名稱:Oracle中FGA功能怎么用
網(wǎng)站路徑:http://weahome.cn/article/gjgish.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部