主題:Oracle審計功能

來源:互聯網
上載者:User

 

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

u         審查可疑的活動。例如:資料被非授權使用者所刪除,此時安全性系統管理員可決定對該 資料庫的所有串連進行審計,以及對資料庫的所有表的成功地或不成功地刪除進行審計。

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

ORACLE支援三種審計類型:

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

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

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

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

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

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

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

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

設定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$的SQLBIND和SQLTEXT欄位

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;

       ENDLOOP;

       close c2;

     END IF;

   ENDLOOP;

   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 <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>;

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.