欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

真实案例:Oracle数据库中表插入操作的审计

程序员文章站 2022-06-17 13:38:52
...

在Oracle 10g中某个用户下表OBJECT_ID_FACTORY 的记录再次出现重复。这是一张字典表,用于生成某些表的记录主键值。重复的键值导

在Oracle 10g中某个用户下表OBJECT_ID_FACTORY 的记录再次出现重复。这是一张字典表,用于生成某些表的记录主键值。重复的键值导致了某些业务操作不能正常进行。

该问题以前出现过一次。通过logminer 也没能找到操作的应用,因此我们采用audit 技术来处理这个问题。

logminer的使用方法请见此文。链接: 或

1. 解决过程

在Oracle 10g 数据库中,此表的记录出现异常,无故增加了某条记录。我们使用logminer 无法查出是什么应用程序所为。因此,我们启用审计功能来捕捉错误的操作来解决这个问题。

Oracle 的审计功能是一个高级选项,默认是不开放的,需要修改审计类初始化参数来能使用。

第一步,,检查审计类参数

SQL> show parameter audit

NAME TYPE VALUE

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

audit_file_dest string /u01/app/oracle/admin/zxdb/adu

mp

audit_sys_operations boolean TRUE

audit_syslog_level string

audit_trail string DB

如果audit_trail 是空,则需要修改并重启实例使之生效后才能继续进行对象的审计操作。

调整审计结果的存储表aud$ 的表空间。原来是system 表空间,所以需要迁移到另外的表空间上,防止system 表空间暴涨不好收场。

SQL> alter table sys.aud$ move tablespace users;

第二步,设置对象操作的审计

审计linuxidc 用户下表OBJECT_ID_FACTORY 每一次访问的插入操作,不管成功或失败,都记录下来;

审计 linuxidc 用户下表OBJECT_ID_FACTORY 每一个会话的更新操作,不管成功或失败,都记录下来;

audit insert on linuxidc .OBJECT_ID_FACTORY by access;

audit update on linuxidc .OBJECT_ID_FACTORY; --by session [ WHENEVER [ NOT ] SUCCESSFUL ] 都可以省略掉。

第三步,检查哪些对象、哪些操作、哪些权限设置了审计

Select * from dba_stmt_audit_opts;

Select * from dba_priv_audit_opts;

Select * from dba_obj_audit_opts;

如这里 linuxidc 用户下表OBJECT_ID_FACTORY 设置了insert 和update 的操作的审计

SQL> Select * from dba_obj_audit_opts;

OWNER OBJECT_NAME OBJECT_TYPE ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE

CRE REA WRI FBK

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

linuxidc OBJECT_ID_FACTORY TABLE -/- -/- -/- -/- -/- -/- A/A -/- -/- -/- S/S -/- -/-

-/- -/- -/- -/-

第四步,使用noaudit 取消对象操作的审计

noaudit insert on linuxidc .OBJECT_ID_FACTORY by access;

noaudit update on linuxidc .OBJECT_ID_FACTORY;

如果审计目标已经实现,需要及时关闭审计设置。这点很重要,需在实现过程中予以注意。

真实案例:Oracle数据库中表插入操作的审计