zoukankan      html  css  js  c++  java
  • oracle 审计(一)

    一、何谓数据库审计?
    数据库审计,就是对数据库的活动做跟踪记录,主要包括数据库连接,SQL语句执行,数据库对象访问这些方面的跟踪记录。
     
    二、审记记录的存储方式
    分为两种:一种是存储在操作系统文件中,一种是存储在system表空间中的SYS.AUD$表中。
     
    三、对数据库性能影响的考虑
    审计必然需要占用CPU,因此,需要综合平衡审计需求与性能之间的平衡性问题,以确定出最好的审许策略。
     
    四、审记结果中包含哪些信息
    前面讲到审许结果的存储分数据库存储和文件存储两种方式。对于数据库存储的情况,SYS.AUD$表中包含以下信息:
    1)        ·操作系统用户名
    2)        ·数据库用户名
    3)        ·连接会话标识
    4)        ·终端标识
    5)        ·被访问的schema对象名
    6)        ·尝试的操作
    7)        ·操作的完整代码
    8)        ·日期和时间戳
     
    若审计记录存储在外部操作文件中,则该文件可能包含以下信息:
    1)         ·操作系统产生的审计记录
    2)         ·数据库的审计记录
    3)         ·被审计到的数据库操作
    4)         ·超级管理员(SYS)的审计记录
    其中,被写到文件中的审计记录是以编码的方式存储的,如果要理解这些编码所对应的信息,可以查询以下数据字典表:
    编码信息数据字典表
    -------------------------------
    数据库操作代码表示尝试的操作。它的相关描述可以从数据字典表AUDIT_ACTIONS表中查询到
    操作所使用的权限可以在字典表SYSTEM_PRIVILEGE_MAP中查询到对应的说明
    完整的操作代码操作成功时将返回0,失败时返回相关oracle错误信息,错误信息码所对应的说明可以从oracle官方文档中获得
    --------------------------------
     
    五、缺省的审计
    不论当前是否已经开启的审计功能,数据库都会把一些数据库相关的操作写入外部审计文件中(注意:不是写入SYS.AUD$表),这些被缺省审计的操作是:
    1)         ·以超级管理员权限对数据库的连接(connectASSYSDBA或connectASSYSOPER)
    2)         ·数据库启动
    3)         ·数据库停止
     
    六、对超级管理员用户的操作行为的审计
    超级管理员用户指的是以ASSYSDBA或ASSYSOPER方式连接数据库的用户。初始化参数AUDIT_SYS_OPERATIONS用来指定是超级管理员的审计选项,如果将AUDIT_SYS_OPERATIONS设置为TRUE,那么所有超级管理员的操作都将被审计,而不管当前是否有开启审计功能,而且所有的审计信息都被写入外部审计文件中(注意:不是写入SYS.AUD$表)。
     
    七、执行审计
    1.设定审计记录的存放位置
    初始化参数AUDIT_TRAIL指定了审计记录的存放位置,该参数有三个取值:
    1)         ·DB审计记录存放在数据库的SYS.AUD$表中
    2)         ·OS审计记录存放在外部的操作系统文件中
    3)         ·NONE关闭审计(缺省值)
    初始化参数AUDIT_FILE_DEST指定了当审外部审记文件目标存储路径,其缺省值是$ORACLE_HOME/rdbms/audit
    2.审计选项
    这个审计选项指的是执行审计的AUDIT语句的可选项。AUDIT语句的语法请参考oracle官方SQL参考。
     
    3.以实例说明审计
    a.审计某用户的会话的创建与结束
    AUDITSESSIONBYscott,fey;
    b.审计所有用户的会话的创建与结束
    AUDITSESSION;
    c.审计删除表的操作
    AUDITDELETEANYTABLE;
    c.审计删除表的操作(限制:只审计删除失败的情况)
    AUDITDELETEANYTABLEWHENEVERNOTSUCCESSFUL;
    d.审计删除表的操作(限制:只审计删除成功的情况)
    AUDITDELETEANYTABLEWHENEVERSUCCESSFUL;
    e.审计删除表的操作(限制:同一个会话中相同的操作语句只审计一次)
    AUDITDELETEANYTABLEBYSESSION;
    (注:对于这种情况,如果审计记录被设定为存储在外部文件中时,这个效果是体现不出来的,因为oracle无法判断是否已经审计过相同的操作语句。)
    f.审计删除表的操作(限制:每支删除语句都审计,不论同一会话中是否有多条相同的操作语句)
    AUDITDELETEANYTABLEBYACCESS;
    g.审计对fey.employee表的delete操作
    AUDITDELETEONfey.employee;
    h.审计对fey.employee表的delete、updet、insert操作
    AUDITDELETE,UPDATE,INSERTONfey.employee;
     
    八、停止审计
    停止审计使用NOAUDIT语句,该语句的语法请参考oracle官方SQL参考。下面以实例说明NOAUDIT的使用:
    a.停止所有对会话的创建与结束的审计
    NOAUDITSESSION;
    b.停止对用户fey,scott的会话的创建与结束的审计
    NOAUDITSESSIONBYfey,scott;
    c.停止审计删除表的操作
    NOAUDITDELETEANYTABLE;
    c.停止审计删除表的操作(限制:停止审计删除失败的情况)
    NOAUDITDELETEANYTABLEWHENEVERNOTSUCCESSFUL;
    d.停止审计删除表的操作(限制:停止审计删除成功的情况)
    NOAUDITDELETEANYTABLEWHENEVERSUCCESSFUL;
    g.停止审计对fey.employee表的delete操作
    NOAUDITDELETEONfey.employee;
    h.停止审计对fey.employee表的delete、updet、insert操作
    NOAUDITDELETE,UPDATE,INSERTONfey.employee;
     
    九、对审计记录表SYS.AUD$的管理
    当SYS.AUD$表的审计记录越来越多的时候,以至达到存储极限时,会因为审计记录无法写入而产生错误。或许我还也需要对该表的数据进行一些转储或者碎片的整理,或是删除一些我们认为不再需要的审计记录。这些都是要考虑的事情。下面给出一个对该表进行存储碎片的整理的一个方法:
    a.将该表的数据selectinto到另一个表中,或利用export导出到外部文件
    b.truncate这张表(要以超级管理员登录才行)
    c.再将原先转储的数据再加载进来。
     
    也许我们需要对针对SYS.AUD$表的操作进行审计,如:AUDITINSERT,UPDATE,DELETEONsys.aud$BYACCESS;
     
    十、Fine-Grained审计
    如前面所述,审计的记录中并没有含操作所作用的数据,比如说,需要审计针对一个表的select,而且需要在审计记录中包含select语句所返回的数据。这时,就需要用到Fine-Grained审计。Fine-Grained审计是基于oracle的事件,其原理是在insert,update或delete相关的事件中截取相关的数据。属于orale程序开发的范畴。具体可以参考相关oracle文檔。
     
    十一、审计相关的数据字典视图
    STMT_AUDIT_OPTION_MAP
    AUDIT_ACTIONS
    ALL_DEF_AUDIT_OPTS
    DBA_STMT_AUDIT_OPTS
    DBA_PRIV_AUDIT_OPTS
    DBA_OBJ_AUDIT_OPTS
    USER_OBJ_AUDIT_OPTS
    DBA_AUDIT_TRAIL
    USER_AUDIT_TRAIL
    DBA_AUDIT_OBJECT
    USER_AUDIT_OBJECT
    DBA_AUDIT_SESSION
    USER_AUDIT_SESSION
    DBA_AUDIT_STATEMENT
    USER_AUDIT_STATEMENT
    DBA_AUDIT_EXISTS
     
    DBA_AUDIT_POLICIES
    DBA_FGA_AUDIT_TRAIL
  • 相关阅读:
    6位密码框js
    总结 清除浮动的四种常见方法
    JS中关于clientWidth offsetWidth scrollWidth 的区别及意义
    字符超过长度将以省略号显示
    如何改变在浏览器上选中字体的颜色
    dev gridcontrol把event事件转换成命令
    gridcontrol datatemplate trigger
    oracle数据库一些用户管理语句
    dev gridcontrol 绑定int型及日期型的列默认当值为0时显示空白及格式化日期显示方式
    c#计算datatable中某一列值的和
  • 原文地址:https://www.cnblogs.com/sangmu/p/7052604.html
Copyright © 2011-2022 走看看