首页 > 数据库 >Oracle审计篇 —— 审计数据表空间迁移及定期数据清理设置

Oracle审计篇 —— 审计数据表空间迁移及定期数据清理设置

时间:2023-04-18 13:39:11浏览次数:84  
标签:审计 AUDIT DBMS name SYS 数据表 audit MGMT Oracle


以下内容测试版本为oracle 19c,其他版本可能会略有不同。最好是在创建数据库之后就进行设置,审计数据越多迁移会越麻烦,还可能影响业务。

 


编号

需求项

需求细节内容

说明

准备工作

1

检查是否打开审计

show parameter audit

audit_trail为NONE则未开启

2

检查审计表现在所在表空间

SELECT table_name, tablespace_name FROM dba_tables

WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name;

TABLE_NAME         TABLESPACE_NAME

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

AUD$                     SYSTEM

FGA_LOG$              SYSTEM

3

检查审计相关表数据量

select segment_name,bytes/1024/1024 size_in_megabytes from dba_segments where segment_name in ('AUD$','FGA_LOG$');

如果AUD$很大,迁移期间其他进程会被enq: ZA - add std audit table partition等待事件阻塞,需要先导出该表数据然后truncate

4

创建新审计表空间

create tablespace TBAUDIT datafile size 1g autoextend on next 100m maxsize 30g;

注意有没有启用OMF

show parameter create

5

检查当前数据库的失效对象

select OWNER,OBJECT_NAME,OBJECT_TYPE,status,TIMESTAMP,LAST_DDL_TIME from dba_objects where  STATUS ='INVALID';

注意迁移后新增了哪些失效对象

迁移审计表

6

迁移AUD$表

BEGIN

DBMS_AUDIT_MGMT.set_audit_trail_location(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

audit_trail_location_value => 'TBAUDIT');

END;

/

.0625M约8s

7

迁移FGA_LOG$表

BEGIN

DBMS_AUDIT_MGMT.set_audit_trail_location(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,

audit_trail_location_value => 'TBAUDIT');

END;

/

.0625M约7s

8

检查迁移结果

SELECT table_name, tablespace_name FROM dba_tables WHERE table_name IN ('AUD$','FGA_LOG$') ORDER BY table_name;

TABLE_NAME         TABLESPACE_NAME

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

AUD$                     TBAUDIT

FGA_LOG$              TBAUDIT

初始化清理对象和间隔(168h)

9

AUD$表

BEGIN

  DBMS_AUDIT_MGMT.init_cleanup(

    audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

    default_cleanup_interval => 168 );

END;

/

验证:


set lines 800

COLUMN parameter_name FORMAT A30

COLUMN parameter_value FORMAT A20

COLUMN audit_trail FORMAT A20

 

SELECT * FROM dba_audit_mgmt_config_params WHERE PARAMETER_NAME = 'DEFAULT CLEAN UP INTERVAL';


PARAMETER_NAME                 PARAMETER_VALUE      AUDIT_TRAIL

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

DEFAULT CLEAN UP INTERVAL      168                  FGA AUDIT TRAIL

DEFAULT CLEAN UP INTERVAL      168                  STANDARD AUDIT TRAIL

10

FGA_LOG$表

BEGIN

  DBMS_AUDIT_MGMT.init_cleanup(

    audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,

    default_cleanup_interval => 168 );

END;

/

验证审计日志清除是否已开启

11

验证审计日志清除是否已开启

SET SERVEROUTPUT ON

BEGIN

  IF DBMS_AUDIT_MGMT.is_cleanup_initialized(DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD) THEN

    DBMS_OUTPUT.put_line('YES');

  ELSE

    DBMS_OUTPUT.put_line('NO');

  END IF;

END;

/

输出应为YES

设置审计信息保留时间(90天)

12

AUD$表

BEGIN

DBMS_AUDIT_MGMT.set_last_archive_timestamp(

audit_trail_type  => dbms_audit_mgmt.audit_trail_aud_std,

last_archive_time => SYSTIMESTAMP-90);

END;

/


13

FGA_LOG$表

BEGIN

DBMS_AUDIT_MGMT.set_last_archive_timestamp(

audit_trail_type  => dbms_audit_mgmt.audit_trail_fga_std,

last_archive_time => SYSTIMESTAMP-90);

END;

/


查看审计数据最后归档时间

14

查看审计数据最后归档时间

SELECT * FROM dba_audit_mgmt_last_arch_ts;

只有归档的数据才能删除

schedule及job设置

15

创建清理的schedule

BEGIN

DBMS_AUDIT_MGMT.create_purge_job(

audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,

audit_trail_purge_interval => 168 /* hours */,

audit_trail_purge_name     => 'PURGE_STD_AUDIT_TRAILS',

use_last_arch_timestamp    => TRUE);

END;

/


16

修改清理job运行时间

BEGIN

SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

    ( name      => 'AUDSYS.PURGE_STD_AUDIT_TRAILS'

     ,attribute => 'START_DATE'

     ,value     => TO_TIMESTAMP_TZ('2019/11/28 02:05:00.000000 +08:00','yyyy/mm/dd hh24:mi:ss.ff tzr')

     );

SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

    ( name      => 'AUDSYS.PURGE_STD_AUDIT_TRAILS'

     ,attribute => 'REPEAT_INTERVAL'

     ,value     => 'FREQ=WEEKLY; BYDAY=SAT'

     );

END;

/

设置为每日凌晨2点5分

17

创建schedule每天设置保留时间为90天前

BEGIN

  SYS.DBMS_SCHEDULER.CREATE_JOB

    (

       job_name        => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

      ,start_date      => TO_TIMESTAMP_TZ('2018/12/19 01:05:00.000000 +08:00','yyyy/mm/dd hh24:mi:ss.ff tzr')

      ,repeat_interval => 'FREQ=WEEKLY; BYDAY=SAT'

      ,end_date        => NULL

      ,job_class       => 'DEFAULT_JOB_CLASS'

      ,job_type        => 'PLSQL_BLOCK'

      ,job_action      => 'BEGIN

  DBMS_AUDIT_MGMT.set_last_archive_timestamp(

   audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

   last_archive_time => SYSTIMESTAMP-90);

  DBMS_AUDIT_MGMT.set_last_archive_timestamp(

   audit_trail_type  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,

   last_archive_time => SYSTIMESTAMP-90);

END;'

      ,comments        => NULL

    );

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'RESTARTABLE'

     ,value     => FALSE);

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'LOGGING_LEVEL'

     ,value     => SYS.DBMS_SCHEDULER.LOGGING_OFF);

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'MAX_FAILURES');

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'MAX_RUNS');

  BEGIN

    SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

      ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

       ,attribute => 'STOP_ON_WINDOW_CLOSE'

       ,value     => FALSE);

  EXCEPTION

    -- could fail if program is of type EXECUTABLE...

    WHEN OTHERS THEN

      NULL;

  END;

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'JOB_PRIORITY'

     ,value     => 3);

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE_NULL

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'SCHEDULE_LIMIT');

  SYS.DBMS_SCHEDULER.SET_ATTRIBUTE

    ( name      => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD'

     ,attribute => 'AUTO_DROP'

     ,value     => TRUE);

 

  SYS.DBMS_SCHEDULER.ENABLE

    (name                  => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD');

END;

/


18

检查2个schedule是否设置

SELECT owner,job_name,run_count,next_run_date FROM DBA_SCHEDULER_JOBS WHERE job_name IN ('PURGE_STD_AUDIT_TRAILS','MOVE_LAST_TIMESTAMP_FORWARD');

检查运行时间是否是每天的凌晨1点5分和2点5分

检查是否有新增的审计相关失效对象

19

如果跟AUDIT相关的,需重编译一下

COLUMN OBJECT_NAME FORMAT A30

COLUMN OBJECT_TYPE FORMAT A20

COLUMN status FORMAT A20

COLUMN TIMESTAMP FORMAT A26

COLUMN LAST_DDL_TIME FORMAT A26


select OWNER,OBJECT_NAME,OBJECT_TYPE,status,TIMESTAMP,LAST_DDL_TIME from dba_objects where  STATUS ='INVALID';

alter view sys.DBA_FGA_AUDIT_TRAIL       compile;

alter view sys.DBA_COMMON_AUDIT_TRAIL    compile;

alter view SYS.FGA_LOG$FOR_EXPORT          compile;

alter public synonym  DBA_COMMON_AUDIT_TRAIL compile;

alter public synonym  DBA_FGA_AUDIT_TRAIL    compile;


--for CDB

alter view sys.CDB_FGA_AUDIT_TRAIL compile;

alter view sys.CDB_COMMON_AUDIT_TRAIL compile;

alter PACKAGE DBMS_AUDIT_UTIL compile;

alter PUBLIC SYNONYM CDB_FGA_AUDIT_TRAIL compile;

alter PUBLIC SYNONYM CDB_COMMON_AUDIT_TRAIL compile;

alter PUBLIC SYNONYM DBMS_AUDIT_UTIL compile;











保留备用

1

反向初始化方法

exec sys.DBMS_AUDIT_MGMT.deinit_cleanup(audit_trail_type=> DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD);


2

exec sys.DBMS_AUDIT_MGMT.deinit_cleanup(audit_trail_type=> DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD);


3

删除清理schedule

exec sys.DBMS_AUDIT_MGMT.drop_purge_job('PURGE_STD_AUDIT_TRAILS');


4

删除重置时间的schedule

exec SYS.DBMS_SCHEDULER.DROP_JOB(job_name  => 'SYS.MOVE_LAST_TIMESTAMP_FORWARD');


标签:审计,AUDIT,DBMS,name,SYS,数据表,audit,MGMT,Oracle
From: https://blog.51cto.com/u_13631369/6203164

相关文章

  • ORACLE修改ORACLE_SID总结
    在某些特殊情况下,需要修改当前Oracle数据库实例中的ORACLE_SID。下面简单的总结一下如何修改$ORACLE_SID的步骤。默认情况下,INSTANCE_NAME参数和ORACLE_SID的值是相同的,但是它们也可以不同。另外,如果参数文件(pfile或spfile)中没有指定instance_name的值,那么它的值跟ORACLE_SID的值......
  • Oracle审计篇——细粒度审计
    Oracle的标准审计默认级别是DB,这个级别不会记下具体sql语句是什么,如果需要记下需要开到DB,extended,但是改这个参数需要重启数据库生效,影响业务。SQL>showparameteraudit_trailNAMETYPEVALUE-------------------------------------......
  • 如何查看Oracle加密代码
    例如我们想看看dbms_pdb.cleanup_task这个函数的内容是什么,直接看会发现只能看到声明,代码是加密的可以把加密后的代码粘出来解密https://www.codecrete.net/UnwrapIt/解密后找到cleanup_task对应部分查了下PRAGMAINTERFACE(C,KPDBCLEANUPTASK);意思是调用C语言的内部代码,更深一层......
  • oracle 为sql寻找更好的执行计划并绑定
    这种方法只适合sql本身有更好的执行计划,不能绑定自己构造的执行计划(比如加hint),并且每次只能针对一个sql_id,如果慢sql未使用绑定变量导致有很多类似sql最好从索引、sql改写等方面优化。首先找到慢sql的sql_id,查看其各执行计划平均执行时间--可用v$active_session_history,dba_hist_a......
  • Oracle授予普通用户kill session权限
    开发A在测试环境操作时有时会遇到阻塞问题,需要找DBA帮忙查看阻塞会话及killsession,后来觉得太麻烦想要个kill会话的权限,查了下Oracle授予普通用户killsession权限的方法。1.授予altersystem权限官方文档查到,killsession需要ALTERSYSTEM权限,但是这个权限非常大,不能直接给GRANT......
  • kettle工具如何使用service_name连接oracle
    开发反馈使用kettle工具连pdb连不上,报错如下: Causedby:org.pentaho.di.core.exception.KettleDatabaseException:Errorconnectingtodatabase:(usingclassoracle.jdbc.driver.OracleDriver)Listenerrefusedtheconnectionwiththefollowingerror:ORA-12505,TNS:l......
  • Oracle 恢复之using backup controlfile 和 until cancel
    Oracle恢复数据库时有几个常用但非常相似的命令,整理下它们各自的作用及适用场景。recoverdatabaserecoverdatabaseuntilcancelrecoverdatabaseusingbackupcontrolfilerecoverdatabaseusingbackupcontrolfileuntilcancelrecoverdatabaseuntilcancelusingbackupc......
  • Oracle 利用在线重定义进行分区表转换
    例如原始非分区表为createtableTESTUSER.LOG_TEST("id"CHAR(36)primarykey,"created_at"DATE)一、选择重定义方法   Bykey,选择主键或者所有字段有NOTNULL约束的唯一键用于在线重定义操作。使用这种方法,在线重定义之前和之后表应该有相同的主键字段(默......
  • Oracle Dataguard安装先决条件与注意事项
    业务方要求把一个单实例DB做成dg,由于之前是业务方自己安装管理的,过去检查一番,发现这个库软件居然不是企业版的。整理了几篇相关的官方文档链接给业务方,反馈Oracle标准版不支持dg。顺便也根据官方文档(19c)整理一份checklist,方便以后使用。一、硬件与OS要求1.主库与所有从库安装版本......
  • oracle、达梦数据库、MySQL数据创建表与字段注释
    /**1.oracle注释*//*表本身注释*/commentontable表名is'注释信息';/*字段注释*/commentoncolumn表名.字段名is'注释信息';/*实例如下:*/commentontableUSERis'用户表';commentoncolumnUSER.IDis'主键ID';/**2.MySQL注释*//*表本身注释*/altertable表名co......