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

[经验分享] Oracle 审计详解(一)

[复制链接]
YunVN网友  发表于 2018-9-14 09:57:29 |阅读模式
  一、审计分类:
  Oracle中审计总体上可分为“标准审计”和“细粒度审计”后者也称为“基于政策的审计”,在Oracle10G之后功能得到很大增强。其中标准审计可分为用户级审计和系统级审计。用户级审计是任何Oracle用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作。系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。
  二、标准审计:
  1、分类:
  在ORACLE中分别支持以下三种标准审计类型:
  语句审计,对某种类型的SQL语句审计,不指定结构或对象。
  特权审计,对执行相应动作的系统特权的使用审计。
  对象审计,对一特殊模式对象上的指定语句的审计。
  这三种标准审计类型分别对如下3方面进行审计:
  审计语句的成功执行、不成功执行,或者其两者。
  对每一用户会话审计语句执行一次或者对语句每次执行审计一次。
  对全部用户或指定用户的活动的审计。
  当数据库的审计功能打开后,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。
  2、设置ORACLE标准审计:
  下列步骤可以设置ORACLE的标准审计功能:
  (1)修改初始化参数文件(initsid.ora)
  如果使用服务器参数文件使用alter system set parameter=value scope=spfileboth,详情参照1.1节中关于参数文件的介绍),设置 AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:
  DBTRUE:启动审计功能,并且把审计结果存放在数据库的 SYS.AUD$ 表中
  OS:启动审计功能,并把审计结果存放在操作系统的审计信息中
  DB_EXTENDED:具有DBTRUE的功能,另外填写AUD$的SQLBIND和SQLTEXT字段
  NONEFALSE:关闭审计功能
  (2)设置AUDIT_TRAIL参数:
  如果设置 AUDIT_TRAIL = OS, 还需要修改参数AUDIT_FILE_DEST。
  如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE
  _DEST所指定的目录下,并且文件名包含进程的PID。
  比如:
  AUDIT_FILE_DEST = $ORACLE_HOMErdbmsaudit
  $ ls -l $ORACLE_HOMErdbmsaudit
  -rw-rw----  1 ora92dba881 Mar 17 0957 ora_13264.aud
  $ ps -efgrep 13264
  ora92 13264 13235 0 095643  000 oracleV92 (DESCRIPTION=(LOCAL=Y)
  SQL select spid, program, username from v$process;
  SPID PROGRAM USERNAME
  ------ -------------------------------------------- -------------
  …
  13264oracle@frhp11 (TNS V1-V3)ora92
  (3)确认审计相关的表是否已经安装
  SQLPLUS connect  AS SYSDBA
  SQLPLUS select  from sys.aud$;  -- 没有记录返回
  SQLPLUS select  from dba_audit_trail; -- 没有记录返回
  如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。
  SQLPLUS connect  as sysdba
  SQLPLUS @$ORACLE_HOMErdbmsadmincataudit.sql
  审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。
  (4)关闭并重启数据库
  (5)设置所需要的审计信息
  下面是一个例子
  SQL connect systemmanager
  SQL grant audit system to scott;
  SQL connect scotttiger
  SQL audit session;
  停止审计:
  SQL noaudit session;
  通常设置了标准审计后都是通过Audit语句开启审计,使用noaudit语句收回审计。如下所示:
  对修改SC表结构或数据的操作进行审计可使用如下语句:

  AUDIE>  取消对SC表的一切审计可使用如下语句:
  NOAUDIT ALL ON SC;
  3、设置审计的实例(对试图尝试口令的访问的审计):
  以下是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:
  (1)修改审计相关参数(参照上面介绍的方法)
  (2)重启数据库
  (3)设置审计信息
  SQLAUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
  (4)查询AUD$
  SQL select returncode, action#, userid, userhost, terminal,timestamp
  from aud$
  RETURNCODEACTION# USERID   USERHOST  TERMINAL
  ---------- ---------- -------- -------------------- --------------------
  1017100  SCOTTWPRATA-BR
  1017100  SCOTTWPRATA-BR
  1017100  SCOTTWPRATA-BR
  ORA-1017的含义为错误的用户名口令。通过查看AUD$表可以清楚地看到WPRATA-BR尝试破译SCOTT的口令。可以通过下面一个存储过程来分析AUD$表,找出可疑的信息:
  create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)
  is
  USER_ID VARCHAR2(20);
  cursor c1 is select userid,count() from sys.aud$ where returncode='1017' and timestamp#=to_date(Since,'yyyy-mm-dd')
  group by userid;
  cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DDHH24MISS')
  from sys.aud$ WHERE returncode='1017' and timestamp#=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID;
  ct PLS_INTEGER;
  V_USERHOST VARCHAR2(40);
  V_TERMINAL VARCHAR(40);
  V_DATE VARCHAR2(40);
  BEGIN
  OPEN C1;
  dbms_output.enable(1024000);
  LOOP
  FETCH C1 INTO USER_ID,CT;
  EXIT WHEN C1%NOTFOUND;
  IF(CT=TIMES) THEN
  DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM'USER_ID);
  OPEN C2;
  LOOP
  FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;
  DBMS_OUTPUT.PUT_LINE(CHR(9)'HOST'V_USERHOST',TERM'V_TERMINAL',TIME'V_DATE);
  EXIT WHEN C2%NOTFOUND;
  END LOOP;
  close c2;
  END IF;
  END LOOP;
  close c1;
  END;
  一下是执行结果:
  SQLset serveroutput on;
  SQL execute auditlogin('2004-01-01',2);
  USER BROKEN ALARMSYS
  HOST,TERMXUJI,TIME2004-09-22110800
  HOST,TERMXUJI,TIME2004-09-22110801
  HOST,TERMXUJI,TIME2004-09-22110929
  HOST,TERMXUJI,TIME2004-09-22110929
  PLSQL 过程已成功完成。
  4、将审计相关的表移动到其他表空间:
  由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:
  sqlconnect  as sysdba;
  sqlalter table aud$ move tablespace new tablespace;
  sqlalter index I_aud1 rebuild online tablespace new tablespace;

  SQL>
  SQL>
  SQL>
  SQL>  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 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.iyunv.com/thread-582070-1-1.html 上篇帖子: create oracle listener with silent mode 下篇帖子: Oracle审计详解(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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