码迷,mamicode.com
首页 > 数据库 > 详细

【读书笔记】数据库审计

时间:2016-08-06 22:05:36      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:oracle   数据库审计   

数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 

一、审计类型

ORACLE的审计技术,除了SYSDBA审计之外,还有数据库审计、基于值的审计、细粒度审计。

SQL> show parameter audit;

NAME                        TYPE        VALUE

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

audit_file_dest              string       /u01/app/oracle/admin/orcl/adump

audit_sys_operations           boolean      FALSE

audit_syslog_level            string      

audit_trail                 string       DB

1.1 SYSDBA审计

audit_sys_operations(默认为false)设置为TRUE,那么作为SYSDBA或SYSOPER连接数据库的用户所发布的每条语句都会被写入操作系统审核跟踪,从而能够给出DBA所进行操作的完整记录。

alter system set audit_sys_operations=TRUE scope=spfile;

之后重启数据库。

之后DBA的操作都会被记录在审计文件中。

1.2 数据库审计

设置数据库审计之前,必须设置audit_trail的值,这个参数可以具有以下值:

NONE(或者FALSE):禁用数据库审计

OS:审计记录会被写至操作系统的文件中;

DB:审计记录写到SYS.AUD$中。

DB_EXTENDED:与DB作用大体相同,不过包含生成审计记录的、具有绑定变量的SQL语句。

XML:与OS作用大体相同,但使用XML标记设置格式。

XML_EXTENDED:与XML作用大体相同,但使用SQL语句和绑定变量。

例如对scott上的emp表做审核

如果audit_trail的值是“DB",那么就看不到执行的语句,因此修改成:

alter system set audit_trail=DB_EXTENDED scope=spfile;

重启数据库。

audit select,delete,update on scott.emp by access;

--关闭审计:noaudit

select * from emp;

update emp

set comm=1500

where empno=7900;

insert into emp

select 7935,ename,job,mgr,hiredate,sal,comm,deptno

from emp

where empno=7934;

delete from emp 

where empno=7935;

--查看审计信息

select OS_USERNAME,username,USERHOST,TERMINAL,TIMESTAMP,OWNER,obj_name,ACTION_NAME,

sessionid,os_process,sql_text

  from dba_audit_trail

  where obj_name=‘EMP‘

  order by timestamp desc;

如果audit_trail的值是DB,则看不到sql_text的信息,因此将audit_trail修改成db_extended,重新运行一次。

1.3 基于触发器执行基于值的审计

使用触发器配合审计,将变更的值记录到某个表中。即使不配置审计策略,也可以执行。

例如,我们对scott.emp表上comm列的变更值比较感兴趣,就可以建立一个触发器,将操作的值写入到表中。

create table AUDIT_VALUE_TRAIL

(

  terminal     VARCHAR2(256),

  sessionid    VARCHAR2(256),

  isdba        VARCHAR2(256),

  current_user VARCHAR2(256),

  os_user      VARCHAR2(256),

  ip_address   VARCHAR2(256),

  obj_user     VARCHAR2(10),

  obj_name     VARCHAR2(22),

  act_value    VARCHAR2(255)

);

create or replace trigger tri_emp_audit

after update of comm on scott.emp

referencing new as new old as old

for each row

begin

if :old.comm !=:new.comm then

insert into sys.audit_value_trail

values(SYS_CONTEXT(‘USERENV‘,‘TERMINAL‘),

SYS_CONTEXT(‘USERENV‘,‘sessionid‘),

SYS_CONTEXT(‘USERENV‘,‘ISDBA‘),

SYS_CONTEXT(‘USERENV‘,‘CURRENT_USER‘),

SYS_CONTEXT(‘USERENV‘,‘OS_USER‘),

SYS_CONTEXT(‘USERENV‘,‘IP_ADDRESS‘),

‘scott‘,‘emp‘,:new.empno||‘ comm is  changed from ‘||:old.comm ||‘to ‘||:new.comm );

end if;

end;

/

执行:

update emp

set comm=2000

where empno=7900;

commit;

对比dba_audit_trail、audit_value_trail的结果是否一样。


1.4 细粒度审计(FGA)

细粒度审计可以配置为只在访问特定行或特定行的特定列时生成审计记录,此外还可以配置为在违反审计条件时运行一个PL/SQL代码块。

配置FGA将会涉及包DBMS_FGA,为了创建一个FGA审计策略,需要使用add_policy过程,这个过程接受下表所示的参数:


参考资料:《OCP/OCA 认证考试指南全册》 第六章:ORACLE安全性 第6节使用标准数据库审核

本文出自 “三国冷笑话” 博客,请务必保留此出处http://myhwj.blog.51cto.com/9763975/1835066

【读书笔记】数据库审计

标签:oracle   数据库审计   

原文地址:http://myhwj.blog.51cto.com/9763975/1835066

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!