[轉]ORACLE 審計功能


審計是對選定的用戶動作的監控和記錄,通常用於:

u          審查可疑的活動。例如:數據被非授權用戶所刪除,此時安全管理員可決定對該 數據庫的所有連接進行審計,以及對數據庫的所有表的成功地或不成功地刪除進行審計。

u          監視和收集關於指定數據庫活動的數據。例如:DBA可收集哪些被修改、執行了多少次邏輯的I/O等統計數據。

ORACLE支持三種審計類型:

u          語句審計,對某種類型的SQL語句審計,不指定結構或對象。

u          特權審計,對執行相應動作的系統特權的使用審計。

u          對象審計,對一特殊模式對象上的指定語句的審計。

ORACLE所允許的審計選擇限於下列方面:

u          審計語句的成功執行、不成功執行,或者其兩者。

u          對每一用戶會話審計語句執行一次或者對語句每次執行審計一次。

u          對全部用戶或指定用戶的活動的審計。

當數據庫的審計是使能的,在語句執行階段產生審計記錄。審計記錄包含有審計的操作、用戶執行的操作、操作的日期和時間等信息。審計記錄可存在數據字典表(稱為審計記錄)或操作系統審計記錄中。數據庫審計記錄是在SYS模式的AUD$表中。

設置ORACLE審計

下列步驟可以設置ORACLE的審計功能:

 

1. 修改參數文件(init.ora,如果使用服務器參數文件使用alter system set = 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 = 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

    注意:WINDOWS NT不使用AUDIT_FILE_DEST參數,如果使用OS設置,那么審計信息會存放在WINDOWS NT的事件日志里。下面的章節會有專門的介紹。

   

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; 

設置審計的實例:對試圖嘗試口令的訪問的審計

本節討論的是一個審計的實例,用於記錄嘗試通過野蠻嘗試法破譯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 過程已成功完成。

將審計相關的表移動到其他表空間

由於AUD$表等審計相關的表存放在SYSTEM表空間,因此為了不影響系統的性能,保護SYSTEM表空間,最好把AUD$移動到其他的表空間上。可以使用下面的語句來進行移動:

 

sql>connect / as sysdba;

sql>alter table aud$ move tablespace ;

sql>alter index I_aud1 rebuild online tablespace ;

SQL> alter table audit$ move tablespace ;

SQL> alter index i_audit rebuild online tablespace ;

SQL> alter table audit_actions move tablespace ;

SQL> alter index i_audit_actions rebuild online tablespace ;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM