设为首页 收藏本站
查看: 672|回复: 0

[经验分享] 真实案例:Oracle数据库中表插入操作的审计

[复制链接]
YunVN网友  发表于 2016-8-14 07:35:13 |阅读模式
在Oracle 10g中某个用户下表OBJECT_ID_FACTORY的记录再次出现重复。这是一张字典表,用于生成某些表的记录主键值。重复的键值导致了某些业务操作不能正常进行。

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

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

 

(miki西游 @mikixiyou 文档原文链接: http://mikixiyou.iyunv.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设置了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
------------------------------ ------------------------------ ----------------- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- --- -----
----- ----- ----- -----
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.iyunv.com/blog/1547353
当然,您可以去参考oracle.doc,那里更详细。
 
 
 
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-257581-1-1.html 上篇帖子: 如何在Oracle中管理计划任务(JOB) 下篇帖子: Oracle DBA手记4:数据安全警示录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表