久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Oracle中FGA功能怎么用

148次閱讀
沒有評論

共計 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 行業資訊頻道!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-18發表,共計3924字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 安龙县| 丹江口市| 宁城县| 遂宁市| 鄂州市| 巴马| 道孚县| 兴隆县| 麻阳| 荆门市| 图木舒克市| 莆田市| 托克逊县| 蒙自县| 宁国市| 九龙坡区| 呼伦贝尔市| 蒙阴县| 武隆县| 拉孜县| 岱山县| 吴川市| 澎湖县| 铁岭市| 扬中市| 江阴市| 秭归县| 嘉鱼县| 江永县| 肇庆市| 平邑县| 天镇县| 唐山市| 比如县| 贵港市| 广灵县| 龙口市| 阳东县| 久治县| 济宁市| 门头沟区|