m6米乐安卓版下载-米乐app官网下载
暂无图片
11

搞懂oracle统一审计 -m6米乐安卓版下载

原创 cqiwen 2023-10-30
654

为什么要写这个?

话说笔者的一个朋友的朋友在管理一套由第三方搭建的oracle19c rac集群。为了保证数据安全,于是他写了一个脚本,脚本的作用就是每天定时使用expdp备份数据库中所有业务表。当然,脚本写得没问题,备份也正常。但奇怪的是sysaux表空间总是快速地增长。经过分析,他发现是因为有一个视图,保存了业务上平时所有的操作行为,特别是expdp这种行为,每次备份后都会在这个视图中找到非常非常多的记录。他不明白具体原因,于是咨询我,看能否不让expdp的行为记录到该视图之中。

我听完他的描述后,初步怀疑是审计日志导致的。但在我的印象中,我管理的数据库也没出现这种expdp被大量记录在审计日志中的情况呀!远程连接查看一波,奇怪,sys.aud$表中竟然没有任何内容。而audsys.aud$unified表中却看到了大量的审计内容。诶,这还是我所了解的审计吗?这什么情况,感觉要翻车了。

下面,我就临时抱佛脚,通过官方文档和博客,对oracle统一审计进行了整理,希望对大家能有所启发。

一、统一审计

从oracle12c开始,oracle引入了统一审计(unified auditing),提供了一整套增强的审计功能。为了向后兼容,仍然支持传统的审计(traditional auditing)。

统一审计默认是关闭的。如果统一审计关闭,则传统的审计方式生效,可以将audit_trail参数设为:none\os\db\xml\extended,与11g无异。

如果开启统一审计,则audit_trail参数无效,审计记录会自动存储在audsys用户下(audsys.aud$unified表),该表默认在sysaux表空间中。

oracle建议将现有审计设置迁移到新的统一审计策略语法。对于新的审计要求,oracle建议您使用新的统一审计。在未来的主要版本中,可能不再支持传统审计。

二、查看是否开启统一审计

col parameter for a30
col value for a20
select parameter,value from v$option where parameter = 'unified auditing';

image.png
unified auditing为false说明统一审计为关闭状态,此时使用的是传统审计。

–如果使用的是传统审计,可再进一步检查audit_trail参数

select name,value from v$parameter where name like '%audit%';

image.png
1)若audit_trail为none,且audit_sys_operations参数为true,则只审计且记录sys登录数据库,其他审计规则无效。

如果audit_syslog_level设为非空值,如local1.info,则oracle会将sys的审计日志写到/var/log/messages日志;

如果数据库是asm管理的(非rac),asm实例默认的audit_syslog_level为local0.info,则会将数据库和asm实例的sys登录记录写到/var/log/messages;此时因为数据库实例的audit_syslog_level为空,默认写到audit_file_dest下,asm实例的audit_syslog_level不为空,默认写到/var/log/message下,导致写了双份。

(2)若为非none(os,db,xml,extended等),且audit_sys_operations默认为true,则会记录sys登录和执行的sql。建议将audit_trail设为os,而不是db,os相对较为容易清理(设为db查询较容易)。

关于传统审计,我只说这么多,有需要深入了解的朋友,可以查找相关资料。

三、开启和关闭统一审计

3.1,开启纯统一审计(12c及以上版本)
1)先关库,shutdown immediate

linux system:
cd $oracle_home/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle

windows systems:
重命名 %oracle_home%/bin/orauniaud19.dll.dbl 文件为 %oracle_home%/bin/orauniaud19.dll

2)开启数据库,startup,再确认统一审计开启是否成功(true):

col parameter for a30
col value for a20
select parameter,value from v\$option where parameter = 'unified auditing';

3.2,关闭统一审计
先关库,shutdown immediate
再编译:make -f ins_rdbms.mk uniaud_off ioracle

四、统一审计的相关查询

4.1,检查默认enabled的统一审计策略

col policy_name format a18
col audit_option format a40
col entity_name for a20
set lines 400 pages 9999 long 9999
select * from audit_unified_enabled_policies;
policy_name enabled_option entity_name entity_ suc fai
------------------ --------------- -------------------- ------- --- ---
ora_secureconfig by user all users user yes yes
ora_logon_failures by user all users user no yes
这两个统一审计策略(ora_secureconfig和ora_logon_failures)是12c之后默认创建的,分别包含的审计内容可通过如下语句查询:
select audit_option from audit_unified_policies where policy_name='ora_logon_failures' order by audit_option;
select audit_option from audit_unified_policies where policy_name='ora_secureconfig' order by audit_option;

在这里我要多说两句,在本文开头,我提到的那个案例中,我通过以上查询,发现对方的数据库确实是开启了统一审计,且只有这两个默认的统一审计策略。并且我也发现,我即使查看这两个默认的策略中包含的审计内容,也并没有看到有对expdp的相关审计策略。那为什么expdp会被审计呢?后来,我在官方文档中看到了相关说明,但我当时没有截图,大意就是:开启统一审计后,exp是默认被审计的,且无法单独关闭,除非直接关闭统一审计。

4.2,查询统一审计写入模式

select parameter_value
from dba_audit_mgmt_config_params
where parameter_name = 'audit write mode';
parameter_value
------------------------------
queued write mode

4.3,在统一审计中创建定制的审计策略
1)查看可以统计的标准系统行为:

set pages 9999 lines 400
col name for a60
select name from auditable_system_actions where component = 'standard' order by name;
select * from auditable_system_actions where name like '%exp%'
  10 datapump 1 export

2)手动关闭某些审计策略:
noaudit policy ora_secureconfig;
关闭审计策略只会在新连接中关闭生效,已有的连接依旧会审计响应的策略

3)开启审计策略:
audit policy ora_secureconfig;
同理,开启审计策略只有新连接才能生效,已有的连接仍旧不会审计

4)删除定制的审计策略:
noaudit policy audit_dp_export_pol;
drop audit policy audit_dp_export_pol;

5)查询当前审计日志中包含的分类:

select unified_audit_policies,system_privilege_used,audit_type from unified_audit_trail
group by unified_audit_policies,system_privilege_used,audit_type order by 1;

6)统一审计相关视图:

dba_audit_mgmt_clean_events --displays the cleanup event history
dba_audit_mgmt_cleanup_jobs --displays the currently configured audit trail purge jobs
dba_audit_mgmt_config_params --displays the currently configured audit trail properties
dba_audit_mgmt_last_arch_ts --displays the last archive timestamps set for the audit trails
例:
select parameter_value from dba_audit_mgmt_config_params where parameter_name = 'audit write mode'; --查询统一审计写入模式
select * from dba_audit_mgmt_config_params order by parameter_name,audit_trail; --查看当前配置的所有审计属性

五、清理统一审计日志

既然开启统一审计后,无法单独关闭exp的审计行为,那么当前可能就只剩下3个方案:

方案1)更改统一审计日志保存的表空间位置

创建专用表空间
▼▼▼
sql> create tablespace audit_tbs01 datafile ' data' size 30g autoextend off;
sql> alter tablespace audit_tbs01 add datafile ' data' size 30g autoextend off;
调整分区间隔
调整审计数据内部表分区间隔为 1 天。
▼▼▼
begin  
  dbms_audit_mgmt.alter_partition_interval(interval_number => 1,interval_frequency => 'day');
end;
更改审计记录保存的表空间
▼▼▼
begin  
  dbms_audit_mgmt.set_audit_trail_location(audit_trail_type => dbms_audit_mgmt.audit_trail_unified,
audit_trail_location_value => 'audit_tbs01');
end;

方案2)彻底关闭统一审计

方案3)定时清理审计日志

–设置自动清理统一日志:
统一审计unified_audit_trail视图的基表是audsys.aud$unified,此表不允许ddl或dml,所以清理统一审计记录只能通过dbms_audit_mgmt包来处理。

select max(event_timestamp),min(event_timestamp) from unified_audit_trail;
相关存储过程:
dbms_audit_mgmt.set_last_archive_timestamp(
audit_trail_type in pls_integer,
last_archive_time in timestamp,
rac_instance_number in pls_integer default null,
container in pls_integer default container_current,
database_id in number default null,
container_guid in varchar2 default null);
begin
  dbms_audit_mgmt.set_last_archive_timestamp(
    audit_trail_type => dbms_audit_mgmt.audit_trail_unified,
    last_archive_time => systimestamp-2 /* days */);  --清理多少天之前的审计日志
end;
select * from dba_audit_mgmt_last_arch_ts;
--初始化clean job,通过第1个过程来判断是否已经初始化,如果为no,则需要初始化
set serveroutput on
begin
  if sys.dbms_audit_mgmt.is_cleanup_initialized(sys.dbms_audit_mgmt.audit_trail_aud_std) then
    dbms_output.put_line('yes');
  else
    dbms_output.put_line('no');
  end if;
end;
/
--如果为no,则执行下面的过程
begin
  sys.dbms_audit_mgmt.init_cleanup(
    audit_trail_type => sys.dbms_audit_mgmt.audit_trail_all,
    default_cleanup_interval => 48 /* hours */);
end;
/
--创建自动清理job
begin
dbms_audit_mgmt.create_purge_job(
  audit_trail_type => dbms_audit_mgmt.audit_trail_all,
  audit_trail_purge_interval => 48 /* hours */,
  audit_trail_purge_name => 'aud_cleanup',
  use_last_arch_timestamp => true);
end;
/
begin
dbms_audit_mgmt.set_purge_job_status(
  audit_trail_purge_name => 'aud_cleanup',
  audit_trail_status_value => dbms_audit_mgmt.purge_job_enable);
end;
/
--如果要手动清理统一审计日志
begin
  sys.dbms_audit_mgmt.clean_audit_trail(
    audit_trail_type => sys.dbms_audit_mgmt.audit_trail_unified,
    use_last_arch_timestamp => false /*if set true,must set last_archive_timestamp */);
end;
/
--禁用默认开启的统一审计策略
sql> noaudit policy ora_secureconfig;
sql> noaudit policy ora_logon_failures;

好了,问题暂时告一段落,希望oracle能够优化统一审计相关策略,希望也能够根据用户的意愿,可以选择对exp审计进行关闭。

最后修改时间:2023-11-02 21:19:59
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【米乐app官网下载的版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

网站地图