在Oracle11g之前,oracle数据库自带的审计功能是关闭的,考虑到性能和审计管理的复杂性,用户一般不打开审计功能。如果有审计要求,DBA会采用trigger来实现对DDL审计的方法来折中。例如类似下面代码实现:

create or replace trigger sys.ddl_trigger

after DDL on database

BEGIN

insert into event_table

values (ora_sysevent,

ora_login_user,

ora_instance_num,

ora_database_name,

ora_dict_obj_name,

ora_dict_obj_type,

ora_dict_obj_owner,

sysdate);

END;

/

这种trigger审计很轻便,但功能有限,只能对DDL做一些记录跟踪,并且记录信息也不全面,如用户执行的完整的语句就不能记录下来,管理上也有诸多不便,如数据清理。在Oracle11g,Oracle不仅加强了审计的功能,同时也对自身的数据库审计(区别于第三方的审计产品)有了很大信心,Oracle官方宣称默认启用的审计日志不会对绝大多数产品数据库的性能带来过大的负面影响,11g默认启用数据库审计选项,AUDIT_TRAIL参数的缺省值为DB,这意为着审计数据将记录在数据库中的AUD$审计字典基表上。

注意,因为在11g中CREATE SESSION将被作为受审计的权限来被记录,因此当SYSTEM表空间因磁盘空间而无法扩展时将导致这部分审计记录无法生成,这将最终导致普通用户的新会话将无法正常创建,普通用户将无法登陆数据库。默认情况下表空间会以AUTOEXTEND ON自动扩展选项创建SYSTEM表空间,因此系统表空间在必要情况下还是会自动增长的,我们所需注意的是磁盘上的剩余空间是否能够满足其增长需求即可,但是数据文件扩展是有上限的,对于普通的8k smallfile表空间而言单个数据文件的最大尺寸是32G。

为了便于管理Oracle审计,袋鼠云提供了集中审计管理功能,其产品设计思路如下:

1、审计的关闭和打开

2、审计数据迁移

3、自动化审计数据清理

4、审计统计分析

一、审计的关闭和打开

袋鼠云前台界面提供了Oracle标准审计的所有功能,如登录审计、语句审计、权限审计、特定对象审计等等。用户可以灵活的选择审计的打开和关闭,审计所针对的对象和权限等。

二、审计数据迁移

考虑到DB,EXTENDED审计数据默认使用SYSTEM表空间,DTOPS提供一键数据迁移功能,底层调用的代码如下:比如将标准审计表迁入USERS表空间

BEGIN

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(

AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

AUDIT_TRAIL_LOCATION_VALUE => 'USERS'

);

END;

/

三、自动化审计数据清理

前文已经说过,数据库的审计信息一般较重,尤其在打开登录审计后,所有session的登录和退出都会在审计表中留有记录,由于表空间或者存储的限制,如果不能写入审计记录,数据库执行需要有审计的操作将被挂起,比如打开了CREATE SESSION审计,由于空间限制普通用户将不能登录数据库。需要有关办法来灵活的管理数据库的审计记录空间。

下面介绍自动清理数据的方法,针对已经分析过的老数据做自动清理,首先要初始化清理策略:

begin

dbms_audit_mgmt.init_cleanup(

audit_trail_type            => dbms_audit_mgmt.audit_trail_db_std,

default_cleanup_interval    => 24 );

end;

/

这个INIT_CLEANUP过程设计到两个参数:

audit_trail_type:指要设置的清理类型,这里是audit_trail_db_std,标准的数据库审计跟踪,即aud$表。

default_cleanup_interval:这个值表示每隔多少时间执行清理任务,24即24小时。

相关审计类型:

Parameter

Description

audit_trail_aud_std

The standard AUD$ audit trail in the database

audit_trail_fga_std

The FGA_LOG$ table, for Fine Grained Auditing

audit_trail_db_std

Both standard and FGA audit trails

audit_trail_os

The OS audit trail

audit_trail_xml

The XML audit trail

audit_trail_files

Both OS and XML audit trails

audit_trail_all

All of the above

设置完初始化清理参数后,实际上在调用清理任务时,会发现并没有达到你的预期,可能数据一条都没有清理掉,我们还需要设置另一个过程参数SET_LAST_ARCHIVE_TIMESTAMP,它的作用是告诉清理进程一个审计归档时间戳,这个过程接收三个参数:

audit_trail_type:要清理的审计类型,如audit_trail_aud_std

last_archive_time:最后一次归档时间,可以手工设置

rac_instance_number:RAC的话可以指定实例号

具体示例如下:

begin

dbms_audit_mgmt.set_last_archive_timestamp(

audit_trail_type  => dbms_audit_mgmt.audit_trail_aud_std,

last_archive_time =>

to_timestamp('2016-03-30 10:00:00','YYYY-MM-DD HH24:MI:SS'),

rac_instance_number  => null

);

end;

/

执行上段程序后,你可以在DBA_AUDIT_MGMT_LAST_ARCH_TS视图中查到相关信息。

有了归档时间后,就可以执行真正的清理程序了。

begin

dbms_audit_mgmt.clean_audit_trail(

audit_trail_type        =>  dbms_audit_mgmt.audit_trail_aud_std,

use_last_arch_timestamp => TRUE

);

end;

/

同样,audit_trail_type表示清理的审计类型,use_last_arch_timestamp => TRUE,表示用最后的归档时间,如果为false,将会清理掉audit_trail_aud_std类型的所有审计信息。上面是手工清理的方法,设置了清理时间点后运行清理过程。下一步看自动清理怎么做:

将采用数据库的自动任务来实现,第一个任务,自动产生清理时间点:

BEGIN

DBMS_SCHEDULER.CREATE_JOB (

job_name   => 'DAILY_AUDIT_ARCHIVE_TIMESTAMP',

job_type   => 'PLSQL_BLOCK',

job_action => 'BEGIN DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(AUDIT_TRAIL_TYPE =>

DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,LAST_ARCHIVE_TIME => sysdate-10); END;',

start_date => sysdate,

repeat_interval => 'FREQ=HOURLY;INTERVAL=24',

enabled    =>  TRUE,

comments   => 'Create an archive timestamp'

);

END;

/

第二个任务,根据时间点自动清理:

BEGIN

DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(

AUDIT_TRAIL_TYPE           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

AUDIT_TRAIL_PURGE_INTERVAL => 24 /* hours */,

AUDIT_TRAIL_PURGE_NAME     => 'Daily_Audit_Purge_Job',

USE_LAST_ARCH_TIMESTAMP    => TRUE

);

END;

/

完成以上两步后,可以在DBA_AUDIT_MGMT_CLEANUP_JOBS数据字典视图中查看到这两个任务的相关信息。

到此数据库审计自动清理就可以实现了,但是从数据库的性能考虑,如果您的数据库很大,几个T或者几十T,您的审计数据也很庞大,一天的数据量上G,我们就得考虑数据的审计清理的性能,因为以上的审计清理时delete操作,不是truncate操作,oracle11g也提供了一个很好的解决方法,设置清理批处理时commit行数。如下:

begin

dbms_audit_mgmt.set_audit_trail_property(

audit_trail_type            => dbms_audit_mgmt.audit_trail_aud_std,

audit_trail_property        => dbms_audit_mgmt.db_delete_batch_size,

audit_trail_property_value  => 100000);

end;

/

三个参数,一看就懂,audit_trail_type清理类型,audit_trail_property设置删除批处理,audit_trail_property_value表示每次commit行数100000。

这篇文档主要介绍了Oracle11g审计跟踪管理相关的知识点,如审计表迁移,Oracle审计不同的类型,审计的定时自动清理等。这里仅仅介绍袋鼠云相关审计功能实现原理,至于针对审计数据的集中收集,展现方法已不属于审计跟踪管理的范畴。袋鼠云目前主要支持的数据库有MySQL、Oracle,比如对基于阿里云上或云下Oracle数据库提供一系列解决方案,如数据库自动部署、备份管理、容灾管理、恢复管理、容灾切换管理、性能监控等等。

Oracle 11g 审计跟踪管理的更多相关文章

  1. oracle 11g审计关闭,及删除日志

    转自https://blog.csdn.net/louwzh/article/details/51274955 环境:Linux redhat6.3 下安装的oracle11g oracle 11g推 ...

  2. Oracle 11g DG配置简明版

    环境: 主库A机:在线生产环境,RHEL 6.4 + Oracle 11.2.0.3 备库B机:新增备机,RHEL 6.4 需求: 对生产环境最小影响前提下配置DG备库. 目录: 一.B机安装相同版本 ...

  3. Oracle 11g R2 常用配置与日志的文件位置

    假设.bash_profile中oracle相关环境变量如下: $ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 $ORACLE_BASE=/u01/a ...

  4. 针对Oracle的审计方案

    主题:针对Oracle的审计方案 数据库环境:Oracle 11g 数据库审计需求: 1.需要对连接数据库的行为进行审计 2.需要对核心表的DML操作进行审计 3.需要迁移审计数据到指定表空间 4.需 ...

  5. Oracle Audit 审计功能的认识与使用

    1.Audit的概念 Audit是监视和记录用户对数据库进行的操作,以供DBA进行问题分析.利用Audit功能,可以完成以下任务: 监视和收集特定数据库活动的数据.例如管理员能够审计哪些表被更新,在某 ...

  6. 由Oracle 11g SYSAUX 和 SYSTEM 表空间回收引发的联想

    0x00--目的 整理一下以前一个SYSTEM表空间和SYSAUX表空间使用率达到99%上限的处理思路和相关知识点,好记性不如烂笔头 0x01--表空间使用率现状 通过查询可得知目前表空间使用情况如下 ...

  7. Oracle 11g必须开启的服务及服务详细介绍

    转自:http://www.educity.cn/shujuku/404120.html 成功安装Oracle  11g数据库后,你会发现自己电脑运行速度会变慢,配置较低的电脑甚至出现非常卡的状况,通 ...

  8. 【Oracle 集群】Oracle 11G RAC教程之集群安装(七)

    Oracle 11G RAC集群安装(七) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总. ...

  9. Linux平台oracle 11g单实例 安装部署配置 快速参考

    1.重建主机的Oracle用户 组 统一规范 uid gid 以保证共享存储挂接或其他需求的权限规范 userdel -r oracle groupadd -g 7 oinstall groupadd ...

随机推荐

  1. HDU 1180 诡异的楼梯(超级经典的bfs之一,需多回顾)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1180 诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others)     ...

  2. lucene&solr学习——分词器

    下图是语汇单元的生成过程: 从一个Reader字符流开始,创建基于Reader的Tokenizer分词器,经过三个TokenFilter生成语汇单元Tokens. 要看分词器的分析效果,只需要看Tok ...

  3. Lucene 工作原理

    Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakarta 家 ...

  4. Django快速开发投票系统

    使用Django搭建简单的投票系统:这个是官网的教程:https://docs.djangoproject.com/en/2.0/intro/tutorial01/ 在Run manage.py Ta ...

  5. jsonp 跨域只能调用一次ajax(无法多次调用或者循环调用)

    jsonp 跨域只能掉用一次ajax(无法多次调用或者循环调用) 百度搜索关键字:jsonp 只能调用一次ajax 解决方法 //回调函数设置,给后台执行        window[callback ...

  6. maven-坐标与依赖

    1.坐标-找到项目依赖的重要依据 <groupId>cmbc.com.cn</groupId> <artifactId>myapp</artifactId&g ...

  7. RubyMine常用快捷键

    一级必会 Shift+F10:运行running Ctrl+Alt+R:弹出RakeCtrl+Alt+G:弹出GenerateCtrl+Alt+L:格式化代码Alt+F1:切换视图(Project, ...

  8. logger模块的使用

    logging模块 下面是logger模块的配置文件,在写程序需要记录日志可以直接拿过来用,但是要经过相应配置的一些修改. 对于如何使用,在我上一篇随笔<ATM程序规范练习>中的记录日志的 ...

  9. 记一次MD5妙用

    记一次MD5妙用 最近项目组中在做历史记录的改造工作,主持讨论了多次,但每次讨论完都觉的很完美了,但实际在写这部分逻辑的时候还是会发现一些问题出来,很难受,反反复复的暴露智商是硬伤,人艰不拆,暂先不扯 ...

  10. go学习笔记-结构体

    结构体 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合 定义 格式 type struct_variable_type struct { member definition; member ...