`
mikixiyou
  • 浏览: 1100998 次
  • 性别: Icon_minigender_1
  • 来自: 南京
博客专栏
C3c8d188-c0ab-3396-821d-b68331e21226
Oracle管理和开发
浏览量:353785
社区版块
存档分类
最新评论

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

阅读更多

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

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

logminer的使用方法请见此文。链接: http://mikixiyou.iteye.com/blog/1514632

 

(miki西游 @mikixiyou 文档原文链接: http://mikixiyou.iteye.com/blog/1563796

 

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;

 

 

 

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

 

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

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

 

audit insert on mikixiyou .OBJECT_ID_FACTORY by access;

audit update on mikixiyou .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;

 

如这里 mikixiyou 用户下表OBJECT_ID_FACTORY 设置了insertupdate 的操作的审计

 

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

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

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

mikixiyou                            OBJECT_ID_FACTORY               TABLE              -/-    -/-    -/-    -/-    -/-    -/-    A/A    -/-    -/-    -/-    S/S    -/- -/-  

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

 

 

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

 

noaudit insert on mikixiyou .OBJECT_ID_FACTORY by access;

noaudit update on mikixiyou .OBJECT_ID_FACTORY;

 

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

 

 

第五步,检查审计结果

 

在审计设置完成后,定期去查看视图dba_audit_trail 的记录情况。

 

SQL> desc dba_audit_trail;

  名称                                         是否为空 ?  类型

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

 OS_USERNAME                                         VARCHAR2(255)

 USERNAME                                            VARCHAR2(30)

 USERHOST                                            VARCHAR2(128)

 TERMINAL                                            VARCHAR2(255)

 TIMESTAMP                                           DATE

 OWNER                                               VARCHAR2(30)

 OBJ_NAME                                            VARCHAR2(128)

 ACTION                                     NOT NULL NUMBER

 ACTION_NAME                                         VARCHAR2(28)

 NEW_OWNER                                           VARCHAR2(30)

 NEW_NAME                                            VARCHAR2(128)

 OBJ_PRIVILEGE                                       VARCHAR2(16)

 SYS_PRIVILEGE                                       VARCHAR2(40)

 ADMIN_OPTION                                        VARCHAR2(2)

 GRANTEE                                             VARCHAR2(30)

 AUDIT_OPTION                                        VARCHAR2(40)

 SES_ACTIONS                                         VARCHAR2(19)

 LOGOFF_TIME                                         DATE

 LOGOFF_LREAD                                        NUMBER

 LOGOFF_PREAD                                        NUMBER

 LOGOFF_LWRITE                                       NUMBER

 LOGOFF_DLOCK                                        VARCHAR2(40)

 COMMENT_TEXT                                        VARCHAR2(4000)

 SESSIONID                                  NOT NULL NUMBER

 ENTRYID                                    NOT NULL NUMBER

 STATEMENTID                                NOT NULL NUMBER

 RETURNCODE                                 NOT NULL NUMBER

 PRIV_USED                                           VARCHAR2(40)

 CLIENT_ID                                           VARCHAR2(64)

 ECONTEXT_ID                                         VARCHAR2(64)

 SESSION_CPU                                         NUMBER

 EXTENDED_TIMESTAMP                                  TIMESTAMP(6) WITH TIME ZONE

 PROXY_SESSIONID                                     NUMBER

 GLOBAL_UID                                          VARCHAR2(32)

 INSTANCE_NUMBER                                     NUMBER

 OS_PROCESS                                          VARCHAR2(16)

 TRANSACTIONID                                       RAW(8)

 SCN                                                 NUMBER

 SQL_BIND                                            NVARCHAR2(2000)

 SQL_TEXT                                            NVARCHAR2(2000)

 

SQL>

 

注意,该视图是建立在sys.aud$ 表之上,最好定期去转存清理它的数据。

 

2.  小结

这个只是 Oracle 中一种普通的审计方法。它可以监控到数据库中表一级对象的增删改查等操作。该功能由来已久,在 10g 开始,增加了一种更细致的审计方法,可以监控到表中记录一级的增删改查操作。

这种方法称之为细粒度审计,在有些场合能使用到。

 

更完整的审计设置和细粒度审计设置,可以参考此文,链接http://mikixiyou.iteye.com/blog/1547353

当然,您可以去参考oracle.doc,那里更详细。

 

 

 

 

分享到:
评论

相关推荐

    Oracle数据库 资料学习

    Oracle数据库是全球最广泛使用的...通过分析和实践这些实际案例,你可以更好地将理论知识应用于实际操作中,提升对Oracle数据库的理解和应用能力。记得不断练习和实验,理论结合实践,才能真正掌握Oracle数据库的精髓。

    oracle数据库课程设计案例,

    本课程设计案例将为你提供深入理解Oracle数据库系统及其操作的宝贵机会。以下将围绕Oracle数据库的课程设计案例展开详细的讨论: 一、Oracle数据库基础 Oracle数据库采用SQL(结构化查询语言)作为其主要的数据管理...

    Oracle 课程设计案例精编.rar

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,它在企业级数据存储、管理和分析中扮演着核心角色。本"Oracle课程设计案例精编"旨在帮助学习者深入理解Oracle的特性和功能,通过实际操作案例来提升技能。...

    oracle数据库资料

    数据库是存储和管理数据的系统,Oracle数据库采用SQL(结构化查询语言)作为其主要的数据操作和管理语言。 2. Oracle体系结构:学习Oracle数据库的组成部分,如数据库实例、数据库进程、内存结构(如SGA和PGA)、...

    Oracle 9i&10g编程艺术:深入数据库体系结构

    1. **Oracle 9i与10g概述**:这两个版本在Oracle数据库历史中具有重要地位,9i引入了自动内存管理、XML支持和Real Application Clusters(RAC)等创新特性,10g则进一步增强了数据仓库功能,推出了Database 10g Grid...

    oracle数据库

    这个压缩包文件“oracle数据库”很可能包含了关于Oracle数据库的深入知识和实用代码示例,帮助用户理解和操作Oracle系统。 Oracle数据库的核心特性包括: 1. **数据存储**:Oracle使用表、索引、视图等数据结构来...

    oracle数据库学习资料

    通过深入学习这些内容,无论是初学者还是有一定经验的DBA,都能增强对Oracle数据库的理解,掌握实际操作技能,为应对复杂的企业级数据库管理挑战做好准备。这个压缩包中的资源无疑是学习和提升Oracle技能的宝贵资料...

    案例_Oracle.rar

    本案例中的“案例_Oracle.rar”压缩包文件可能包含一系列与Oracle数据库相关的实践操作、教程或者问题解决方案。由于没有具体的文件内容,我将根据Oracle数据库的一般特性、管理和应用来阐述相关知识点。 1. 数据库...

    Oracle 数据库系统基础与工具B

    在Oracle中,SQL用于创建和修改表、视图、索引等数据库对象,执行查询、插入、更新和删除数据,以及管理权限和角色。 5. **PL/SQL编程**: PL/SQL是Oracle特有的过程化语言,扩展了SQL的功能,允许编写复杂的业务...

    Oracle 11g 数据库应用简明教程

    4. **数据类型与表结构**:理解Oracle中的数据类型,如NUMBER、VARCHAR2、DATE等,并学会设计合理的数据库表结构,包括主键、外键、索引等概念。 5. **PL/SQL编程**:Oracle的PL/SQL是一种过程式语言,用于编写...

    Oracle公司内部数据库培训资料

    这份内部培训资料不仅涵盖了理论知识,还可能包含实际操作案例和最佳实践,对于希望深入理解Oracle数据库的专业人士来说是一份宝贵的资源。通过深入学习,你可以提升自己的数据库管理技能,更好地应对各种企业级...

    Oracle数据库课

    这门课程将带你深入了解Oracle数据库的核心概念、管理和操作技巧。 1. **Oracle数据库基础**: - 数据库系统:了解数据库的基本原理,包括关系型数据库模型、数据存储结构和事务处理。 - SQL语言:学习SQL(结构...

    oracle课程设计案例精编

    Oracle课程设计案例精编教程是针对学习Oracle数据库管理和开发的学员所准备的一份宝贵资源。这份教程通过一系列的实例,帮助读者深入理解Oracle数据库的工作原理和应用技巧,从而提升在实际工作中的技能。 1. ...

    Oracle数据库系统应用实例集锦与编程

    Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它在企业级数据管理、数据分析以及事务处理中扮演着核心角色。本集锦旨在深入探讨Oracle数据库的应用实例与编程技术,帮助读者更好地理解和掌握这一...

    《Oracle数据库系统实践》教学大纲.docx

    《Oracle数据库系统实践》教学大纲主要涵盖了Oracle数据库的基础理论与实际操作技能的培养。课程旨在让学生深入理解Oracle数据库系统的工作原理,掌握其管理和维护技术,以及在实际应用中的问题解决能力。 课程内容...

    Oracle数据库实用教程(第二版)附源代码

    Oracle数据库实用教程(第二版)是一本针对Oracle数据库学习者的宝贵资源,由唐远新编著,包含了丰富的实践案例和源代码,旨在帮助读者深入理解并掌握Oracle数据库系统的核心概念和技术。这本书分为12个章节,涵盖了...

    oracle学习资料包

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,尤其在企业级应用中占据主导地位。这个"Oracle学习资料包"显然为初学者提供了一个很好的起点,帮助他们踏入Oracle DBA(数据库管理员)的世界。Oracle...

    Oracle9i关系数据库实用教程

    第一章 Oracle9i概述:这部分介绍了Oracle数据库的历史,Oracle9i的主要特性,如数据仓库、网格计算以及其在企业级应用中的角色。读者将了解到Oracle9i数据库的基本架构,包括数据库实例、内存结构和进程。 第二章 ...

    ORACLE课程设计案例精编

    1. 数据库基础知识:Oracle数据库的基本概念,包括表空间、数据文件、控制文件、重做日志、索引等。理解这些基础元素是使用Oracle的第一步,它们构成了Oracle存储和操作数据的物理结构。 2. SQL语言:Oracle支持...

Global site tag (gtag.js) - Google Analytics