您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

Oracle 审计详解(一)

 

一、审计分类:

Oracle中审计总体上可分为“标准审计”和“细粒度审计”后者也称为“基于政策的审计”,在Oracle10G之后功能得到很大增强。其中标准审计可分为用户级审计和系统级审计。用户级审计是任何Oracle用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作。系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。


二、标准审计:

1、分类:

在ORACLE中分别支持以下三种标准审计类型:

   语句审计,对某种类型的SQL语句审计,不指定结构或对象。

   特权审计,对执行相应动作的系统特权的使用审计。

   对象审计,对一特殊模式对象上的指定语句的审计。

这三种标准审计类型分别对如下3方面进行审计:

   审计语句的成功执行、不成功执行,或者其两者。

   对每一用户会话审计语句执行一次或者对语句每次执行审计一次。

   对全部用户或指定用户的活动的审计。

当数据库的审计功能打开后,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。


2、设置ORACLE标准审计:

下列步骤可以设置ORACLE的标准审计功能:

(1)修改初始化参数文件(initsid.ora)

如果使用服务器参数文件使用alter system set parameter=value scope=spfileboth,详情参照1.1节中关于参数文件的介绍),设置 AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:

  DBTRUE:启动审计功能,并且把审计结果存放在数据库的 SYS.AUD$ 表中

  OS:启动审计功能,并把审计结果存放在操作系统的审计信息中

  DB_EXTENDED:具有DBTRUE的功能,另外填写AUD$的SQLBIND和SQLTEXT字段

  NONEFALSE:关闭审计功能

(2)设置AUDIT_TRAIL参数:

如果设置 AUDIT_TRAIL = OS, 还需要修改参数AUDIT_FILE_DEST。

如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE

_DEST所指定的目录下,并且文件名包含进程的PID。

比如:

AUDIT_FILE_DEST = $ORACLE_HOMErdbmsaudit

$ ls -l $ORACLE_HOMErdbmsaudit

-rw-rw----  1 ora92dba881 Mar 17 0957 ora_13264.aud

$ ps -efgrep 13264

ora92 13264 13235 0 095643  000 oracleV92 (DESCRIPTION=(LOCAL=Y)

SQL select spid, program, username from v$process;

SPID PROGRAM USERNAME

------ -------------------------------------------- -------------

13264oracle@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_HOMErdbmsadmincataudit.sql

审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。

(4)关闭并重启数据库

(5)设置所需要的审计信息

下面是一个例子

SQL connect systemmanager

SQL grant audit system to scott;

SQL connect scotttiger

SQL audit session;

停止审计:

SQL noaudit session;

通常设置了标准审计后都是通过Audit语句开启审计,使用noaudit语句收回审计。如下所示:

对修改SC表结构或数据的操作进行审计可使用如下语句:

AUDIE ALTER,UPDATE ON SC;

取消对SC表的一切审计可使用如下语句:

NOAUDIT ALL ON SC;


3、设置审计的实例(对试图尝试口令的访问的审计):

以下是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:

(1)修改审计相关参数(参照上面介绍的方法)

(2)重启数据库

(3)设置审计信息

SQLAUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL

(4)查询AUD$

SQL select returncode, action#, userid, userhost, terminal,timestamp

from aud$

RETURNCODEACTION# USERID   USERHOST  TERMINAL

---------- ---------- -------- -------------------- --------------------

1017100  SCOTTWPRATA-BR

1017100  SCOTTWPRATA-BR

1017100  SCOTTWPRATA-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-DDHH24MISS')

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;

一下是执行结果:

SQLset serveroutput on;

SQL execute auditlogin('2004-01-01',2);

USER BROKEN ALARMSYS

HOST,TERMXUJI,TIME2004-09-22110800

HOST,TERMXUJI,TIME2004-09-22110801

HOST,TERMXUJI,TIME2004-09-22110929

HOST,TERMXUJI,TIME2004-09-22110929

PLSQL 过程已成功完成。


4、将审计相关的表移动到其他表空间:

由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:

sqlconnect  as sysdba;

sqlalter table aud$ move tablespace new tablespace;

sqlalter 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 FGA策略(细粒度审计)
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号