ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Audit

Audit

原创 Linux操作系统 作者:grace_xuxj 时间:2012-05-24 20:45:19 0 删除 编辑

ORACLE审计

http://space.itpub.net/23493401/viewspace-680576

审计简单一点讲就是监视数据库的可疑活动。监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件或者数据库。


先看一下审计的分类:


1.强制性审计:不管其它审计选项或参数为何,所有Oracle数据库都会审计特定的操作。由于数据库需要记录系统启动和关闭等数据库活动,所以存在强制性审计日志。


2.标准数据库审计:这是通过使用AUDIT_TRAIL初始化参数在系统级别设置的。启用审计后,可选择要审计的对象和权限。


3.基于值审计:这种审计扩展了标准数据库审计的功能,不仅会捕获已发生的审计事件,还会捕获插入、更新或删除的实际值。基于值审计是通过数据库触发器实施的。


4.细粒度审计(FGA):FGA扩展了标准数据库审计的功能,这种审计可捕获已发出的实际SQL语句,而不仅仅是发生了事件的SQL语句。


5. DBA审计:在DBA与审计者或安全管理员之间划分审计责任,审计者或安全管理员在操作系统审计线索中负责监视DBA的活动。


还有一种分类:


1.      特权用户审计


默认情况下,Oracle会自动审计特权用户所执行的特权操作(例如启动和关闭数据库等),并将特权操作的相关信息记载道操作系统的审计跟踪记录中。为了审计特权用户所执行的其他数据库操作,必须设置初始化参数audit_sys_operations.


2.      数据库审计


默认情况下,Oracle不会审计数据库用户的任何操作。为了审计数据库用户所执行的操作,必须设置初始化参数AUDIT_TRAIL,并且指定要审计的数据库操作。当设置该参数为OS时,Oracle会将审计结果存放到OS审计跟踪记录在UNIX或Linux环境下,审计记录存储在文件中。该文件的位置是AUDIT_FILE_DEST参数指定的位置。    当设置该参数为DB时,Oracle会将审计结果存放到数据字典$AUD中,则可复查DBA_AUDIT_TRAIL视图中的审计记录,这个视图是SYS方案的一部分。


3.      应用审计


当使用数据库审计时,Oracle只会记载执行审计操作的用户名,数据库操作、操作对象以及操作时间等信息,而不会记载数据的变化。为了审计数据变化(例如UPDATE操作前后的数据),必须使用应用审计。


 


随着时间的推移,审计跟踪记录会越来越多,从而会占用更多空间,所以DBA用户应该定期删除不再需要的审计更总记录。


通过EM来使用审计


1. 启动em

在oracle用户下输入emctl start dbconsole,


[oracle@field ~]$ emctl start dbconsole


TZ set to PRC


Oracle Enterprise Manager10gDatabase Control Release10.2.0.1.0 


Copyright (c) 1996, 2005 Oracle Corporation. All rights reserved.


http://field:1158/em/console/aboutApplication


Starting Oracle Enterprise Manager10gDatabase Control ........ started.


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


Logs are generated in directory /opt/ora10g/product/10.2.0/db_1/field_inomc/sysman/log


打开IE输入http://192.168.1.253:1158/em/console


这里有一点,看



登陆的地方时乱码,解决办法


打开你的ie浏览器,选择工具"-->"internet选项"-->"常规",选择"语言",默认只有"中文",选择"添加",加入"英语(美国)" ,调整顺序,把“英语(美国)”移动到最上面。



成功了


2. 通过单击“Administration(管理)”标签,然后单击“Users & Privileges(用户和权限)”区域中的“Audit Settings(审计设置)”链接,可访问“Database Control Home(数据库控制主页)”中的“Audit(审计)”页。


3. 审计页


      


可以看到在该页可以修改Audit Trail、Audit SYS User Operations等参数,我们在这里做普通用户审计的操作并把操作结果放在数据库中



修改成功,这里注意一点,audit_sys_operations和Audit Trail这两个参数都是静态参数,也就是说修改之后需要重新启动才可以生效。


4. 审计用户lsy的操作


A.权限审计


不多说了,就是点点鼠标,我自己做的结果



B.对象审计



饼干在这添加了select、insert、delete三个操作,强调一下这里有个by session和by access,by session就是一个会话里面如果有两个相同操作只显示一个,by access是每一次操作都会记录,选by session



可以清楚的看到,在一个会话中如果对该表有select、insert、delete三个操作,就会有一条记录,但是也只会有一条记录。


 


5. 审计用户lsy的基于值的审计


这个EM据我观察好像没法做,通过建立触发器实现


进行数据库审计时会记录审计对象中发生的插入、更新和删除操作,但是不会捕获   更改的实际值。基于值审计扩展了数据库审计的功能,它能够捕获更改的实际值。   基于值审计利用了数据库触发器(事件驱动的PL/SQL构造)。


      create table audit_emp_change(


      asno     NUMERIC (6, 0),oldage NUMERIC(3,0),


      newage NUMERIC(3,0),time date


     );


     


     


 create or replace trigger tr_stu_change

   after update of age on students

   for each row

   

declare

    v_tmp int;

   begin

      select count(*) into v_tmp from audit_emp_change

       where asno=:old.sno;


      if v_tmp=0 then

      insert into audit_emp_change

       values(:old.sno,:old.age,:new.age,SYSDATE);

       else

       update audit_emp_change

       set ldage=:old.age ,newage=:new.age ,time=sysdate

       where asno=:old.sno;

       end if;

       end;


这个触发器有个缺点,他只能记录最后一次修改的记录,如果你在期间对该表的age字段有多次修改,他也只能记录最后一次


SQL> select * from audit_emp_change;


 


  ASNO OLDAGE NEWAGE TIME


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


 95029    22    382010-11-21


 95031    38    392010-11-21


6. FGA精细审计


这个EM据我观察好像也没法做,该种审计是为了审计用户在特定数据行或特定列上的SQL操作,FGA是使用包DBMS_FGA来实现的。


Exec dbms_fga.add_policy


(object_schema=>’lsy’,-


 object_name=>’students’,policy_name=>’chk_students’,-


 audit_condition => ‘sno=95029’,audit_column =>’sex,age’,-


 statement_types => ‘update,select’)


object_schema:方案名


object_name:数据库对象名


policy_name:FGA策略名


audit_condition:审计条件


audit_column:指定审计的列


statement_types:审计的类型


我解释一下,我是在方案lsy上审计表students上的学号为95029的性别和年龄,针对update和select操作。


 


SQL> exec dbms_fga.add_policy(object_schema =>'lsy',object_name => 'students' ,policy_name => 'chk_students', audit_condition => 'sno=95029', audit_column => 'sex,age' ,statement_types => 'update,select')


 


PL/SQL procedure successfully completed


 


执行相关select和update的操作,


SQL> select db_user ,USERHOST, scn ,SQL_TEXT from dba_fga_audit_trail;


 


DB_USER                       USERHOST                                                                               SCN SQL_TEXT


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


LSY                           WORKGROUP\PC-200911241118                                                           488822 select * from students


 


LSY                           WORKGROUP\PC-200911241118                                                           488993 select * from students


 


LSY                           WORKGROUP\PC-200911241118                                                           489026 select * from students where sno='95029'


 


LSY                           WORKGROUP\PC-200911241118                                                           489138 update students set age=21 where sno=95029


 


LSY                           WORKGROUP\PC-200911241118                                                           489147 update students set age=22 where sno=95029


 


LSY                           WORKGROUP\PC-200911241118                                                           489173 update students set sex='女' where sno=95029


 


看非常成功。


 


禁止FGA审计


SQL> exec dbms_fga.disable_policy( object_schema => 'lsy' , object_name =>'students' ,policy_name => 'chk_students')


 


PL/SQL procedure successfully completed


激活FGA审计


SQL>   exec dbms_fga.enable_policy( object_schema => 'lsy' , object_name =>'students' ,policy_name => 'chk_students')


 


PL/SQL procedure successfully completed


删除FGA策略


SQL>   exec dbms_fga.drop_policy( object_schema => 'lsy' , object_name =>'students' ,policy_name => 'chk_students')


 


PL/SQL procedure successfully completed


删除FGA审计结果


当使用FGA策略实现精细审计时,不需要激活数据库审计,并且oracle会自动将审计结果存放到数据字典表FGA_LOG$中。通过删除该表内容,可以删除精细神结果。


Delete from sys.fga_log$;


Commit;


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23490498/viewspace-730891/,如需转载,请注明出处,否则将追究法律责任。

上一篇: OPatch
下一篇: 增加Client备份时
请登录后发表评论 登录
全部评论

注册时间:2010-03-10

  • 博文量
    126
  • 访问量
    95705