专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

针对Oracle的审计方案 oracle审计功能一定要开吗

ins518 2024-10-31 14:22:05 技术文章 14 ℃ 0 评论

数据库环境:Oracle 11g

数据库审计需求:

  • 1.需要对连接数据库的行为进行审计
  • 2.需要对核心表的DML操作进行审计
  • 3.需要迁移审计数据到指定表空间
  • 4.需要清理历史审计数据的方案

1.需要对连接数据库的行为进行审计

需要对连接数据库的行为进行审计,其中包含例如审计那些错误密码登录等失败的登录行为。

主要关注查询的表就是aud$

比如查询最近一天使用错误密码登录的行为;

--aud$
select sessionid, userid, userhost, comment$text, spare1, ntimestamp#
  from aud$
 where returncode = 1017
   and ntimestamp# > sysdate - 1;

--dba_audit_trail
select *
  from dba_audit_trail
 where returncode = 1017
   and timestamp > sysdate - 1;

更多关于aud$的介绍可参考之前我总结过的文章:

  • aud$定位错误用户密码登陆数据库的具体信息

2.需要对核心表的DML操作进行审计

需要对核心表的DML操作进行审计,首先强调下这是不推荐进行审计的,原因是这类审计极少客户会用,它不但会使得核心表的操作性能本身受到一定影响,还有可能触发相关bug。 假如jingyu用户下的T1表非常重要,需要对DML操作进行审计:

SYS@jyzhao1 >AUDIT DELETE,UPDATE,INSERT ON JINGYU.T1;

Audit succeeded.

查询审计结果(列较多,建议图形化工具查看):

SQL> select * from dba_audit_trail order by timestamp;

可以从结果看到所有DML操作都会对应一条action_name为“SESSION REC”的值。

3.需要迁移审计数据到指定表空间

创建新的表空间,比如TBS_AUDIT,然后迁移审计数据从默认的SYSTEM到TBS_AUDIT表空间; 核心步骤如下:

--查看当前AUD$对象所在的表空间
SELECT OWNER, TABLE_NAME, TABLESPACE_NAME  
  FROM DBA_TABLES  
   WHERE TABLE_NAME = 'AUD
AND OWNER = 'SYS'; --更改AUD$表的表空间为其他表空间 BEGIN DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, AUDIT_TRAIL_LOCATION_VALUE => '&AUD_TBS_NAME'); END; /

更多细节可参考之前我总结过的一则案例:

  • SYSTEM表空间AUD$使用空间过大问题处理

4.需要清理历史审计数据的方案

需要清理历史审计数据的方案:

--截断占用空间最大的AUD$表(需要和DBA确认后操作)
truncate table AUD$;

截断之前可以考虑备份一下审计数据:

Oracle导出sys用户下的系统表aud$:

exp system/oracle file=aud.dmp log=aud.log tables=sys.aud$

实际这个exp导出在测试环境遇到问题,不过最终解决了,具体细节可以参考:

  • EXP导出aud$报错EXP-00008,ORA-00904 解决

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表