Oracle審計功能

http://blog.csdn.net/javacoffe/article/details/5627298

一、    審計分類:
Oracle中審計總體上可分爲“標準審計”和“細粒度審計”後者也稱爲“基於政策的審計”,在Oracle10G之後功能得到很大增強。其中標準審計可分爲用戶級審計和系統級審計。用戶級審計是任何Oracle用戶可設置的審計,主要是用戶針對自己創建的數據庫表或視圖進行審計,記錄所有用戶對這些表或視圖的一切成功和()不成功的訪問要求以及各種類型的SQL操作。系統級審計只能由DBA設置,用以監測成功或失敗的登錄要求、監測GRANTREVOKE操作以及其他數據庫級權限下的操作。
二、    標準審計:
2.1 分類:
ORACLE中分別支持以下三種標準審計類型:
u          語句審計,對某種類型的SQL語句審計,不指定結構或對象。
u          特權審計,對執行相應動作的系統特權的使用審計。
u          對象審計,對一特殊模式對象上的指定語句的審計。
這三種標準審計類型分別對如下3方面進行審計:
u          審計語句的成功執行、不成功執行,或者其兩者。
u          對每一用戶會話審計語句執行一次或者對語句每次執行審計一次。
u          對全部用戶或指定用戶的活動的審計。
     當數據庫的審計功能打開後,在語句執行階段產生審計記錄。審計記錄包含有審計的操作、用戶執行的操作、操作的日期和時間等信息。審計記錄可存在數據字典表(稱爲審計記錄)或操作系統審計記錄中。數據庫審計記錄是在SYS模式的AUD$表中。
2.2設置ORACLE標準審計:
下列步驟可以設置ORACLE的標準審計功能:
1.    修改初始化參數文件(init<sid>.ora
如果使用服務器參數文件使用alter system set <parameter>=<value> scope=spfile|both,詳情參照1.1節中關於參數文件的介紹),設置 AUDIT_TRAIL參數,並且重啓數據庫。AUDIT_TRAIL的取值如下:
l         DB/TRUE:啓動審計功能,並且把審計結果存放在數據庫的 SYS.AUD$ 表中
l         OS:啓動審計功能,並把審計結果存放在操作系統的審計信息中  
l         DB_EXTENDED:具有DB/TRUE的功能,另外填寫AUD$SQLBINDSQLTEXT字段
l         NONE/FALSE:關閉審計功能 
2.設置AUDIT_TRAIL參數:
如果設置 AUDIT_TRAIL = OS還需要修改參數AUDIT_FILE_DEST,
    如果操作系統支持設置AUDIT_TRAIL=OS,文件會自動存放在AUDIT_FILE
_DEST所指定的目錄下,並且文件名包含進程的PID
   比如: 
    AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit  
    $ ls -l $ORACLE_HOME/rdbms/audit  
   -rw-rw---- 1 ora92    dba        881 Mar 17 09:57 ora_13264.aud
    $ ps -ef|grep 13264
    ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)
    SQL> select spid, program, username from v$process;
    SPID PROGRAM                                 USERNAME
   ------ -------------------------------------------- -------------
   ...
   13264        oracle@frhp11 (TNS V1-V3)                    ora92
3. 確認審計相關的表是否已經安裝
  SQLPLUS> connect / AS SYSDBA 
  SQLPLUS> select * from sys.aud$;  -- 沒有記錄返回  
  SQLPLUS> select * from dba_audit_trail; -- 沒有記錄返回 
 如果做上述查詢的時候發現表不存在,說明審計相關的表還沒有安裝,需要安裝。
   SQLPLUS> connect / as sysdba 
   SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql  
 審計表安裝在SYSTEM表空間。所以要確保SYSTEM表空間又足夠的空間存放審計信息。
4. 關閉並重啓數據庫 
5. 設置所需要的審計信息
 下面是一個例子
   SQL> connect system/manager
   SQL> grant audit system to scott;     
   SQL> connect scott/tiger
   SQL> audit session;
 停止審計:
   SQL> noaudit session; 
通常設置了標準審計後都是通過Audit語句開啓審計,使用noaudit語句收回審計。如下所示:
對修改SC表結構或數據的操作進行審計可使用如下語句:
AUDIE ALTERUPDATE ON SC;
取消對SC表的一切審計可使用如下語句:
NOAUDIT ALL ON SC;
2.3設置審計的實例(對試圖嘗試口令的訪問的審計):
以下是一個審計的實例,用於記錄嘗試通過野蠻嘗試法破譯ORACLE帳號口令的例子:
1. 修改審計相關參數(參照上面介紹的方法)
2. 重啓數據庫
3. 設置審計信息
   SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
 
4. 查詢AUD$
  SQL> select returncode, action#, userid, userhost, terminal,timestamp
from aud$
 
  RETURNCODE    ACTION# USERID   USERHOST TERMINAL
   ---------- ---------- -------- -------------------- --------------------
    1017        100      SCOTT    WPRATA-BR
    1017        100      SCOTT    WPRATA-BR
    1017        100      SCOTT    WPRATA-BR
 
 ORA-1017的含義爲錯誤的用戶名口令。通過查看AUD$表可以清楚地看到WPRATA-BR嘗試破譯SCOTT的口令。可以通過下面一個存儲過程來分析AUD$表,找出可疑的信息:
create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)
is
USER_ID VARCHAR2(20);
cursor c1 is select userid,count(*) from sys.aud$ where returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd')
 group by userid;
cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')
 from sys.aud$ WHERE returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID;
ct PLS_INTEGER;
V_USERHOST VARCHAR2(40);
V_TERMINAL VARCHAR(40);
V_DATE VARCHAR2(40);
BEGIN
    OPEN C1;
    dbms_output.enable(1024000);
    LOOP
      FETCH C1 INTO USER_ID,CT;
      EXIT WHEN C1%NOTFOUND;
      IF(CT>=TIMES) THEN
        DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'||USER_ID);
        OPEN C2;
        LOOP
          FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;
          DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',TIME:'||V_DATE);
          EXIT WHEN C2%NOTFOUND;
        END LOOP;
        close c2;
      END IF;
    END LOOP;
    close c1;
END;
/
一下是執行結果:
SQL>set serveroutput on;
SQL> execute auditlogin('2004-01-01',2);
USER BROKEN ALARM:SYS
        HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00
        HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01
        HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
        HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
 
PL/SQL 過程已成功完成。
2.4將審計相關的表移動到其他表空間:
由於AUD$表等審計相關的表存放在SYSTEM表空間,因此爲了不影響系統的性能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:
sql>connect / as sysdba;
sql>alter table aud$ move tablespace <new tablespace>;
sql>alter index I_aud1 rebuild online tablespace <new tablespace>;
SQL> alter table audit$ move tablespace <new tablespace>;
SQL> alter index i_audit rebuild online tablespace <new tablespace>;
SQL> alter table audit_actions move tablespace <new tablespace>;
SQL> alter index i_audit_actions rebuild online tablespace <new tablespace>;
三、       細粒度審計:
    細粒度審計 (FGA)(通過 Oracle9i 引入)可以理解爲“基於政策的審計”。與標準的審計功能相反,FGA 可用於指定生成審計記錄必需的條件:
FGA 政策通過使用“dbms_fga”程序包以編程方式綁定到對象(表、視圖)。類似於用於通過 VPD ("dbms_rls") 進行訪問控制的程序包,它允許您創建任何需要的條件,例如:僅當以下條件爲真時審計事件:
  • 在早上九點到下午六點之間或在星期六和星期日對某個表進行了訪問。
  • 使用了公司網絡外部的某個 IP 地址。
  • 選定或更新了特定列。
  • 使用了該列的特定值。
這將創建更有意義的審計線索,因爲無需記錄每一個人對錶的每一次訪問。從 Oracle 數據庫 10g 開始,FGA 支持在一個策略中使用“選擇”、“插入”、“更新”和“刪除”語句的任意組合。事實上,綁定到表的 FGA 政策簡化了審計政策的管理,因爲這將只需在數據庫中對其更改一次,不用在每個應用程序中一次次進行。此外。無論用戶通過何種方式連接至數據庫(通過應用程序、Web 接口或通過 SQL*Plus),其操作都會記錄下來。
3.1 使用細粒度審計:
   1、創建測試表
  create table ACCOUNT
(AACT_NO number not null,
     CUST_ID number not null,
     BALANCE number(15,2)
);
   2、添加審計策略:
   begin
   DBMS_FGA.DROP_POLICY(object_schema => 'TEST',
                       object_name   => 'ACCOUNT',
                       policy_name   => 'ACCOUNT_ACCESS');
end;
這段代碼必須由具有執行程序包 dbms_fga 權限的用戶來執行。建議應該建立一個專門的用戶來專門負責添加審計策略。該過程有許多參數,具體含義如下:
OBJECT_SCHEMA
對其定義了 FGA 策略的表或視圖的所有者
OBJECT_NAME
表或視圖的名稱
POLICY_NAME
策略的名稱,由用戶自定義 — 例如,ACCOUNTS_ACCESS
POLICY_TEXT
在添加策略時指定的審計條件 — 例如,BALANCE >= 11000
POLICY_COLUMN
審計列 — 例如,BALANCE
ENABLED
如果啓用則爲 YES,否則爲 NO
PF_SCHEMA
擁有策略處理器模塊的模式(如果存在)
PF_PACKAGE
處理器模塊的程序包名稱(如果存在)
PF_FUNCTION
處理器模塊的過程名稱(如果存在)
3在定義了策略以後,當用戶以通常的方式對錶進行查詢時,如下所示:
select * from bank.accounts;
審計線索記錄此操作。可以使用以下語句查看線索:
select timestamp,
db_user,
os_user,
object_schema,
object_name,
sql_text
from dba_fga_audit_trail;
 
TIMESTAMP DB_USER OS_USER OBJECT_ OBJECT_N SQL_TEXT
--------- ------- ------- ------- -------- ----------------------
26-MAR-10 TEST    ananda TEST    ACCOUNT select * from account
注意名爲 DBA_FGA_AUDIT_TRAIL 的新視圖,它記錄細粒度的訪問信息。其中顯示了審計事件的時間標記、查詢者的數據庫用戶 ID、操作系統用戶 ID、查詢中所使用表的名稱和所有者,最後還有確切的查詢語句。
3.2 審計列和審計條件:
默認情況下會對被審計對象的所有列開啓審計,當任何一列被訪問時都會紀錄一條審計信息,這在現實情況下不太常見,因爲這樣會使審計信息表增長過快造成存儲空間的壓力,因此通常都會設置審計條件,當條件觸發時再發起審計。例如我們可以對Account表的Balance列設置審計條件,當訪問該列並觸發審計條件時才進行審計。如下所示:
begin
dbms_fga.add_policy (
object_schema=>'TEST',
object_name=>'ACCOUNT',
policy_name=>'ACCOUNT_ACCESS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000'
 );
end;
該策略將在訪問BALANCE列並且只有訪問列值大於等於11000時才發起審計。因此根據該條件戶有如下不同審計狀態:
SQL 語句
審計狀態
select balance from account;
進行審計。用戶選擇了在添加策略時所指定的審計列 BALANCE。
select * from account;
進行審計。即使用戶沒有明確指定列 BALANCE,* 也隱含地選擇了它。
select cust_id from account where balance < 10000;
進行審計。即使用戶沒有明確指定列 BALANCE,where 子句也隱含地選擇了它。
select cust_id from account;
不進行審計。用戶沒有選擇列 BALANCE。
select count(*) from account;
不進行審計。用戶沒有明確或隱含地選擇列 BALANCE。
 
3.3優化器模式:
FGA 需要基於成本的優化 (CBO),以便正確地工作。在基於規則的優化時,只要用戶從表中進行選擇,無論是否選擇了相關的列,都始終生成審計線索,增加了誤導項目出現的可能性。爲使 FGA 正確地工作,除了在實例級啓用 CBO 之外,在 SQL 語句中應該沒有規則暗示(hint),並且必須至少使用評估選項對查詢中的所有表進行分析。
3.4管理 FGA 策略:
 要刪除策略,您可以使用以下語句:
begin
dbms_fga.drop_policy (
object_schema => 'TEST',
object_name => 'ACCOUNT',
policy_name => 'ACCOUNT_ACCESS'
   );
end;
對於更改策略而言,沒有隨取隨用的解決方案。要更改策略中的任何參數,必須刪除策略,再使用更改後的參數添加策略。但是可以暫時禁用已有策略,如下所示:
begin
dbms_fga.enable_policy (
object_schema => 'TEST',
object_name => 'ACCOUNT',
policy_name => 'ACCOUNT_ACCESS',
enable => FALSE
   );
end;
若要重新啓用它,可使用同一函數,只需將參數 enable 設置爲 TRUE。
3.5 FGA 數據字典視圖:
FGA 策略的定義位於數據字典視圖 DBA_AUDIT_POLICIES 中。該市途中各列含義如下:
SESSION_ID
審計會話標識符;與 V$SESSION 視圖中的會話標識符不同
TIMESTAMP
審計記錄生成時的時間標記
DB_USER
發出查詢的數據庫用戶
OS_USER
操作系統用戶
USERHOST
用戶連接的機器的主機名
CLIENT_ID
客戶標識符(如果由對打包過程 dbms_session.set_identifier 的調用所設置)
EXT_NAME
外部認證的客戶名稱,如 LDAP 用戶
OBJECT_SCHEMA
對該表的訪問觸發了審計的表所有者
OBJECT_NAME
對該表的 SELECT 操作觸發了審計的表名稱
POLICY_NAME
觸發審計的策略名稱(如果對錶定義了多個策略,則每個策略將插入一條記錄。在此情況下,該列顯示哪些行是由哪個策略插入的。)
SCN
記錄了審計的 Oracle 系統更改號
SQL_TEXT
由用戶提交的 SQL 語句
SQL_BIND
SQL 語句使用的綁定變量(如果存在)
3.6視圖和 FGA:
假定在 ACCOUNTS 表上定義視圖 VW_ACCOUNT 如下:
create view vw_account as select * from account;
現在,如果用戶從視圖中而不是從表中進行選擇:
select * from vw_account;
您將看到以下審計線索:
select object_name, sql_text from dba_fga_audit_trail;
 
OBJECT_NAME SQL_TEXT
----------- -------------------------------------------------
ACCOUNT    select * from vw_account
注意,是基表名稱而不是視圖名稱出現在 OBJECT_NAME 列中,因爲視圖中的選擇是從基表中進行選擇。但是,SQL_TEXT 列記錄了用戶提交的實際語句。
如果只希望審計對視圖的查詢而不是對錶的查詢,可以對視圖本身建立策略。通過將視圖名稱而不是表的名稱傳遞給打包的過程 dbms_fga.add_policy 中的參數 object_name,可以完成這項工作。隨後 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列將顯示視圖的名稱,並且不會出現有關表訪問的附加記錄。
3.7 其它用途:
除了記錄對錶的選擇訪問,FGA 還可用於某些其它情況:
  • 可以對數據倉庫使用 FGA,以捕獲特定的表、視圖或物化視圖上發生的所有語句,這有助於計劃索引。不需要到 V$SQL 視圖去獲取這些信息。即使 SQL 語句已經超出了 V$SQL 的期限,在 FGA 審計線索中將會始終提供它。
  • 由於 FGA 捕獲綁定變量,它可以幫助瞭解綁定變量值的模式,這有助於設計直方圖集合等。
  • 可以向審計者或 DBA 發送警告,這有助於跟蹤惡意應用程序。
由於 FGA 可以作爲 SELECT 語句的觸發器,可以在需要這種功能的任何時候使用它。
3.8        10G中的增強:FGA
3.8.1 對所有DML的審計:
  9iFGA只能對Select語句進行審計,而不能對其他DML語句(UpdateDeleteInsert)進行審計,如果想對其他DML語句進行審計那麼只能採取數據庫處發起的形式來實現。在10G中實現了對所有DML語句的審計,如下所示:

 

begin

 

   dbms_fga.add_policy (

 

      object_schema   => 'TEST',

 

      object_name     => 'ACCOUNT',

 

      policy_name     => 'ACCOUNT_ACCESS',

 

      audit_column    => 'BALANCE',

 

      audit_condition => 'BALANCE >= 3000'

 

      statement_types => 'INSERT, UPDATE, DELETE, SELECT'

 

 );

 

end;
通過statement_types => 'INSERT, UPDATE, DELETE, SELECT'參數制定了新的策略,該策略可以對Select之外的所有DML操作進行審計。因此根據新的審計條件和審計策略會有如下不同情況:
1 種情況
之前:BALANCE = 1000
用戶發出:
update account set balance = 1200 where ACCOUNT_NO = ....
舊的和新的 balance 都小於 3,000,審計條件不滿足;因此這條語句將不會被審計。
2 種情況
之前:BALANCE = 1000
用戶發出:
update account set balance = 3200 where ACCOUNT_NO = ....
新的 balance 大於 3,000,審計條件滿足;因此這條語句將 會被審計。
3 種情況
之前:BALANCE = 3200
用戶發出:
update account set balance = 1200 where ACCOUNT_NO = ....
新的 balance 小於 3,000,但舊的 balance 大於 3,000。因此審計條件滿足,這條語句將被審計。
4 種情況
用戶插入一行,其中有 BALANCE < 3000。
insert into account values (9999,1200,'X');
因爲 balance 1,200 不滿足審計條件,所以這條語句不被審計。如果 balance 列大於或等於 3,000,它將被審計。
5 種情況
用戶插入一行,其中 balance 的值爲空。
insert into account (account_no, status) values (9997, 'X');
因爲 balance 爲空,該列沒有任何默認值,所以審計條件不滿足(比較 NULL >= 3000 結果爲 FALSE),這條語句不會被審計。重要注意事項:假設該列有一個大於 3,000 的默認值時,這條語句仍然不會被審計,即使插入行的 balance 列值大於 3000。 注意對於DML語句的審計是由一個自動事務插入的;即使回滾 DML語句的操作,審計記錄也將存在不會跟着回滾。
3.8.2制定相關的列策略:
在表 ACCOUNT 上定義的一個策略,如下:
begin
   dbms_fga.add_policy (
      object_schema   => 'TEST',
     object_name     => 'ACCOUNT',
      policy_name     => 'ACCOUNT_SEL',
      audit_column    => 'ACCOUNT_NO, BALANCE',
      audit_condition => 'BALANCE >= 3000',
      statement_types => 'SELECT'
 );
end;
在某些情況下,列的組合可能很重要,而不是某個特定的列。以上策略是在 ACCOUNT_NO 和 BALANCE 上定義的。那麼如果用戶發出以下語句:
select balance from accounts where account_no = 9995;
這條語句將被審計,因爲 balance 列被選中,且餘額爲 3,200,大於 3,000,滿足審計條件。
如果一個用戶想查出在銀行的總餘額,他發出:
select sum(balance) from account;
這條查詢幾乎沒什麼害處;它不明確指出帳戶所有者和帳戶餘額。因此安全策略可能不會要求審計這條查詢。不過,這條查詢
select balance from account where account_no = 9995
必須被審計;因爲它明確地指定了一個帳戶。默認地,所有語句都被審計(無論使用了什麼樣的列組合)。這將創建大量不需要的審計線索項目,並可能帶來一些空間限制問題。爲了限制它們,您可以指定僅當在查詢中使用了希望的列組合時纔開始審計。當定義策略時,您可以使用一個新的參數:
audit_column_opts => DBMS_FGA.ALL_COLUMNS
這個參數將使策略僅當列 ACCOUNT_NO 和 BALANCE 在查詢中都被訪問時才創建審計線索項目。例如,以下查詢將產生一個審計線索項目。
select account_no, balance from account;
但這條查詢不會產生審計線索項目。
select account_no from account;
使用這個參數將把審計的數量限制在一個更易管理的大小。如果希望採用默認的行爲 — 即任意列被選中時都進行審計,那麼您可以對同一參數的使用不同值。
audit_column_opts => DBMS_FGA.ANY_COLUMNS
3.8.3 與標準審計的結合:
   通過制定如下審計策略實現標準審計與細粒度審計的結合

 

begin

 

   dbms_fga.add_policy (

 

      object_schema     => 'TEST',

 

      object_name       => 'ACCOUNT',

 

      policy_name       => 'ACCOUNT_SEL',

 

      audit_column      => 'ACCOUNT_NO, BALANCE',

 

      audit_condition   => 'BALANCE >= 3000',

 

      statement_types   => 'SELECT',

 

      audit_column_opts => DBMS_FGA.ALL_COLUMNS,

 

      audit_trail       => DB

 

 );

 

end;
通過指定audit_trail => DB參數實現在細粒度審計時開啓標準審計。在 Oracle Database 10g 中,標準審計也得到了巨大的改進。通過 AUDIT 命令執行標準審計,它現在能夠捕獲大量其它有用的信息。在內容和功能方面,標準審計類似於細粒度審計。然而,作爲一個數據庫管理員,有興趣知道所有的審計項目,而不只是一個審計項目。一個新的視圖,DBA_COMMON_AUDIT_TRAIL,結合了標準審計線索和 FGA審計線索。用以下查詢來檢查它們二者如:
select * from dba_common_audit_trail;通過這條查詢可以同時查看兩種審計收集的信息。
四、FGA 審計和標準審計的差異 :
  • 標準審計必須用參數 AUDIT_TRAIL 在數據庫級啓用。這個參數不是動態的;您必須重啓數據庫來使其生效。相比而言,FGA 不需要任何參數修改。
  • 一旦被設置在一個對象上,標準審計將保持在那裏。要解除它,必須用 NOAUDIT 命令刪除審計選項。這可能很不方便,因爲在一個表上丟棄審計選項也將丟棄元數據信息。然而,FGA 可以臨時禁用和啓用,不丟失任何元數據信息。
  • FGA 只能夠處理四種類型的語句:SELECT、INSERT、UPDATE 和 DELETE。相比而言,常規審計可以處理其它許多語句和權限,甚至會話連接和斷開。
  • 標準審計每次會話只創建一條記錄(按會話)或每次訪問對象創建一條記錄(按訪問)這種佔用資源很少的方式對於控制審計線索表中的空間非常重要。FGA 並不是同樣節省資源;它每次訪問運行一次 — 使得線索更大。
  • 通過記錄線索,標準審計可以用來檢測任何中斷企圖,如果企圖沒有成功,則將產生錯誤代碼。而 FGA 不能。
  • 標準審計可以寫數據庫表或 OS 文件。後者在審計員(不是數據庫管理員)能夠訪問線索時非常有用。在 Windows 下,非數據庫審計線索記錄在事件日誌中,並且可以用不同的方式對其進行訪問。這個選項保護了審計線索的完整性。然而,FGA 日誌僅寫到數據庫表 FGA_LOG$ 中。可以在 FGA 中創建用戶自定義的審計處理程序來寫 OS 文件,但它們的完整性不能保證。
  • 標準審計可以設置用於默認對象。當表是在運行期創建時,這個功能變得極爲有用:默認的審計選項允許沒有數據庫管理員干預的審計。這在 FGA 中是不可能的,用戶必須在一個現有的表上創建策略,上述的情況只能在表已創建之後纔可能發生。
  • FGA 中,審計更加靈活 — 僅當訪問某些列,當某個特定的條件爲真時等等。這種多功能性在您需要控制線索的增長時非常方便。
  • FGA 中,SQL 賦值變量默認被捕獲。在標準審計中,必須把初始化參數 audit_trail設爲 db_extended,以啓用這一功能。
  • 權限差異:標準審計需要審計系統或語句權限;FGA 只需要 dbms_fga 程序包上的運行權限。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章