ORACLE审计

ORACLE审计

审计简单一点讲就是监视数据库的可疑活动。监视用户所执行的数据库操作,并且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 Manager 10g Database Control Release 10.2.0.1.0 

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

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

Starting Oracle Enterprise Manager 10g Database 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浏览器, 选择工具"--&gt"internet选项"--&gt"常规", 选择 "语言", 默认只有 "中文", 选择 " 添加 ", 加入"英语(美国)" , 调整顺序, 英语(美国)”移动到最上面。

成功了

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

3.  审计页

      

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

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

4.  审计用户lsy的操作

A.权限审计

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

B. 对象审计

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

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

 

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     38 2010-11-21

  95031     38     39 2010-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_nameFGA策略名

audit_condition:审计条件

audit_column指定审计的列

statement_types:审计的类型

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

 

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;

                                                                      2010-11-29 by 饼干

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

转载于:http://blog.itpub.net/23493401/viewspace-680576/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值