oracle导入监视功能,【原创】Oracle监视情报获取(Audit机能)

作为企业内部监视的一环,对于DB的管控是首当其冲。以往常见的做法是购买第三方产品(比如AuditMaster),通过第三方来监视DB。但是问题多多

1.

第三方产品系一般会把取得的监控情报按照自己的格式存储。就是为了产品粘度,你只能通过第三方的界面来看。或再2次开发通过其接口,抽出导入自己的DB。好麻烦有没有啊。

2.​OS有Out of support的问题,金融企业尤其重要。 一旦Out of

support, OS将不会有Patch对应,也就是增加安全方面的风险。Out of

support是绝不被允许的。也就是需要升级OS,

OS一升级,第三方产品也得升级,这就是费用。

a4c26d1e5885305701be709a3d33442f.pngAudit​

实际,Oracle11g中完全可以简单的实现Audit监察机能,取得按照金融厅要求的情报信息:

1. Logon情报

谁,在什么时候,通过那个终端,使用什么用户名,访问DB时间,​成功与否等。

2. SQL Trace情报​

谁,在什么时候,通过那个终端,使用什么工具,访问了什么,发出的SQL文为何等。​

Oracle内部的Audit机能完全可以覆盖上诉要求。

1的代码:

#!/bin/bash

​​export

ORACLE_HOME=/u00/app/oracle11/product/11.2.0.2.0

​export

PATH=${ORACLE_HOME}/bin:${PATH}

​export ORACLE_SID=COMT03

​LOG_FILE=/home/oracle11/workATJ/AuditMaster/log/load_audit_logon_`date

+"%Y%m%d_%H%M%S"`.log

​RETVALUE=`sqlplus -S /nolog

<

​conn XXX/XXX

​spo ${LOG_FILE}

​INSERT INTO

T_AUDIT_LOGON

​SELECT

​​TIMESTAMP,

​USERNAME,

​TERMINAL,

​OS_USERNAME,

​ACTION_NAME,

​LOGOFF_TIME,

​DECODE(

​RETURNCODE,

​0, 'SUCCEEDED',

​'FAILED'

​) RETURNCODE

​FROM

​DBA_AUDIT_SESSION das

​WHERE NOT EXISTS ( SELECT 1

FROM  ORAH01.T_PA_EXCLUDE_ORACLE_USER eu WHERE

EU.USERNAME = DAS.USERNAME)

​ORDER BY timestamp;

​COMMIT;

​spo off

​EOF`if [[ $RETVALUE

== *"ORA-"* ]]

​​then

​​RETVALUE=-1;

​​fi

​echo

$RETVALUE

​2的代码:

#!/bin/bash

​export

ORACLE_HOME=/u00/app/oracle11/product/11.2.0.2.0

​export

PATH=${ORACLE_HOME}/bin:${PATH}

​export ORACLE_SID=COMT03

​LOG_FILE=/home/oracle11/workATJ/AuditMaster/log/load_audit_sqltrace_`date

+"%Y%m%d_%H%M%S"`.log

​RETVALUE=`sqlplus -S /nolog

<

​conn XXX/XXX

​spo ${LOG_FILE}

​INSERT INTO

T_AUDIT_SQL_TRACE

​SELECT

​EXTENDED_TIMESTAMP,

​USERNAME,

​TERMINAL,

​USERHOST,

​OBJ_NAME,

​ACTION_NAME,

​LTRIM(SQL_TEXT,2000)

​FROM DBA_AUDIT_TRAIL

dat

​WHERE NOT EXISTS ( select 1

from  ORAH01.T_PA_EXCLUDE_ORACLE_USER eu where

eu.username = dat.username)

​AND

OBJ_NAME NOT IN ('STMT_AUDIT_OPTION_MAP','SYSTEM_PRIVILEGE_MAP'

,'AUD$' ,'DUAL',

​'DBA_AUDIT_TRAIL'

,'AUDIT_ACTIONS','SQLPLUS_PRODUCT_PROFILE',

​'PRODUCT_PRIVS','DBA_AUDIT_SESSION')

​ORDER BY

EXTENDED_TIMESTAMP;

​COMMIT;

​spo off

​EOF`if [[ $RETVALUE

== *"ORA-"* ]]

​then

​RETVALUE=-1;

​fi

​echo

$RETVALUE

请看到最后这里的各位亲留意紫色的部分,可不是随便的​return下

$?哦。

因为执行SQL即便出现问题,$?也不会报错。上诉的方法是可以捕捉Oracle的error的,在实际的运用中,意义很大,往往7*24的monitoring系统监视的就是返回值。​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值