Oracle审计功能

审计是对选定的用户动作的监控和记录,通常用于:
u          审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。
u          监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。
ORACLE 支持三种审计类型:
u          语句审计,对某种类型的SQL语句审计,不指定结构或对象。
u          特权审计,对执行相应动作的系统特权的使用审计。
u          对象审计,对一特殊模式对象上的指定语句的审计。
ORACLE 所允许的审计选择限于下列方面:
u          审计语句的成功执行、不成功执行,或者其两者。
u          对每一用户会话审计语句执行一次或者对语句每次执行审计一次。
u          对全部用户或指定用户的活动的审计。
当数据库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在 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;
        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>;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值