• [转]ORACLE 审计功能


    审计是对选定的用户动作的监控和记录,通常用于:

    u          审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。

    u          监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。

    ORACLE支持三种审计类型:

    u          语句审计,对某种类型的SQL语句审计,不指定结构或对象。

    u          特权审计,对执行相应动作的系统特权的使用审计。

    u          对象审计,对一特殊模式对象上的指定语句的审计。

    ORACLE所允许的审计选择限于下列方面:

    u          审计语句的成功执行、不成功执行,或者其两者。

    u          对每一用户会话审计语句执行一次或者对语句每次执行审计一次。

    u          对全部用户或指定用户的活动的审计。

    当数据库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。

    设置ORACLE审计

    下列步骤可以设置ORACLE的审计功能:

    1. 修改参数文件(init.ora,如果使用服务器参数文件使用alter system set = scope=spfile|both,详情参照1.1节中关于参数文件的介绍),设置 AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:

    l         DB/TRUE:启动审计功能,并且把审计结果存放在数据库的 SYS.AUD$ 表中

    l         OS:启动审计功能,并把审计结果存放在操作系统的审计信息中  

    l         DB_EXTENDED:具有DB/TRUE的功能,另外填写AUD$SQLBINDSQLTEXT字段

    l         NONE/FALSE:关闭审计功能 

             

    2.如果设置 AUDIT_TRAIL = OS还需要修改参数AUDIT_FILE_DEST

        如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE

    _DEST所指定的目录下,并且文件名包含进程的PID

       比如: 

        AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit  

        $ ls -l $ORACLE_HOME/rdbms/audit  

       -rw-rw----  1 ora92    dba        881 Mar 17 09:57 ora_13264.aud

        $ ps -ef|grep 13264

        ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)

        SQL> select spid, program, username from v$process;

        SPID PROGRAM                                 USERNAME

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

       ...

       13264        oracle@frhp11 (TNS V1-V3)                    ora92

        注意:WINDOWS NT不使用AUDIT_FILE_DEST参数,如果使用OS设置,那么审计信息会存放在WINDOWS NT的事件日志里。下面的章节会有专门的介绍。

       

    3. 确认审计相关的表是否已经安装

       SQLPLUS> connect / AS SYSDBA 

       SQLPLUS> select * from sys.aud$;  -- 没有记录返回  

       SQLPLUS> select * from dba_audit_trail; -- 没有记录返回 

      如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。

     

       SQLPLUS> connect / as sysdba 

       SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql  

      审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。

         

    4. 关闭并重启数据库 

      

    5. 设置所需要的审计信息

     下面是一个例子

       SQL> connect system/manager

       SQL> grant audit system to scott;     

       SQL> connect scott/tiger

       SQL> audit session;

     停止审计:

       SQL> noaudit session; 

    设置审计的实例:对试图尝试口令的访问的审计

    本节讨论的是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:

     

    1. 修改审计相关参数(参照上一节介绍的方法)

    2. 重启数据库

    3. 设置审计信息

       SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL

     

    4. 查询AUD$

       SQL> select returncode, action#, userid, userhost, terminal,timestamp

    from aud$

     

       RETURNCODE    ACTION# USERID   USERHOST  TERMINAL

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

        1017        100      SCOTT    WPRATA-BR

        1017        100      SCOTT    WPRATA-BR

        1017        100      SCOTT    WPRATA-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-DD:HH24:MI:SS')

      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;

    /

    一下是执行结果:

    SQL>set serveroutput on;

    SQL> execute auditlogin('2004-01-01',2);

    USER BROKEN ALARM:SYS

            HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00

            HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01

            HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29

            HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29

     

    PL/SQL 过程已成功完成。

    将审计相关的表移动到其他表空间

    由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。可以使用下面的语句来进行移动:

     

    sql>connect / as sysdba;

    sql>alter table aud$ move tablespace ;

    sql>alter index I_aud1 rebuild online tablespace ;

    SQL> alter table audit$ move tablespace ;

    SQL> alter index i_audit rebuild online tablespace ;

    SQL> alter table audit_actions move tablespace ;

    SQL> alter index i_audit_actions rebuild online tablespace ;

     

  • 相关阅读:
    nginx 指定多个域名跨域请求配置 find ./ ! -path "./node_modules/*" -name *.js |xargs egrep basePath
    所以 if a 代表如果a有值的时候执行的内容,有值才能执行是True if not a 代表 a无值是空的时候执行的内容 not False 是True才能执行 代表空值的时候执行
    python 逻辑运算符
    git的突出解决--git rebase之abort、continue、skip
    chromium source get
    How JavaScript works in browser and node?
    chromium windows compile 浏览器编译 vs2017 win10
    Git Reset 三种模式
    webkit js
    用electron自己的nodejs写的depot_tools 工具下载 构建源码
  • 原文地址:https://www.cnblogs.com/oktell/p/4691494.html
Copyright © 2020-2023  润新知