Oracle教程之Oracle管理审计(六)--Oracle审计实例

设置审计的实例:对试图尝试口令的访问的审计
本节讨论的是一个审计的实例,用于记录尝试通过野蛮尝试法破译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 <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>;

更多oracle视频教程:http://crm2.qq.com/page/portalpage/wpa.php?uin=800060152&f=1&ty=1&aty=0&a=&from=6

你可能感兴趣的:(oracle,oracle审计,Oracle审计实例,Oracle管理审计)