第九课
实施Oracle审计
Oracle 12c推出一套全新的审计架构,称为统一审计功能。
Oracle提供细粒度的授权控制来限制数据库访问。
Oracle支持通过高级安全选件来使用高级验证技术(如基于令牌、生物学和证书的身份识别技术)。
即使经过授权和验证的用户有时也会钻系统漏洞。为了跟踪用户活动和确定可疑活动的变化趋向,Oracle提供了很多审计工具。
如果审计设置不当,则会对系统性能产生明显的影响。
标准数据库审计:audit_trail=db,审计对象和权限,使用audit命令。
基于值的审计: 捕获插入、更新或删除的实际值,通过数据库触发器实现。
细粒度审计FGA: 扩展了标准数据库审计的功能,从而可捕获发出的实际 SQL语句,而不仅仅是发生事件的情况。
强制审计:
无论配置与否,都要审核几个操作:
统一审计:
select * from v$option where parameter='Unified Auditing';
统一审计是一个替代标准审计的新技术。
所有的审计records存储在一个审计表中。
AUDSYS. AUD$UNIFIED只读表,不能DML操作
unified_audit_trail 视图(查看审计记录)
AUDSYS用户
select * from unified_audit_trail;(查看审计记录)
exec dbms_audit_mgmt.flush_unified_audit_trail;(实时刷新审计记录)
BEGIN
dbms_audit_mgmt.flush_unified_audit_trail;
END;
开启统一审计:
1.查询是否开启统一审计
select * from v$option where parameter=‘Unified Auditing’;
2.关闭实例和监听
shutdown immediate
lsnrctl stop
3.启用统一审计
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=$ORACLE_HOME
cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk uniaud_off ioracle ORACLE_HOME=$ORACLE_HOME
4.启动监听和实例,然后再次查询v$option视图
ORA_SECURECONFIG:和标准审计一样
ORA_DATABASE_PARAMETER:捕获alter database、alter system、create spfile。
ORA_ACCOUNT_MGMT:捕获create user、alter user、drop user、create role、drop role、alter role、set role、grant、revoke。
创建审计策略:
1.使用命令
create audit policy select_t actions select on ouzy.t;
select * from unified_audit_trail;
2.使用EMCC
select * from unified_audit_trail;
select distinct policy_name from audit_unified_policies;
select * from audit_unified_enabled_policies;
select * from unified_audit_trail;
select OBJECT_NAME,SQL_TEXT,UNIFIED_AUDIT_POLICIES from unified_audit_trail;
alter audit policy SELECT_T condition 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') = ''OUZY''' evaluate per Statement
审核类别
类别 要指定的内容
privileges 一个或多个系统/对象权限
actions 一个或多个SQL命令
roles 一个或多个角色
混合
select * from auditable_system_actions;(查询系统的actions)
select * from auditable_object_actions;(查询对象的actions)
默认情况下,审计记录不实时写入审计表中,而是通过一个内存中的缓存队列来写入。gen进程负责把队列的记录异步写入到表中。
--立即写入磁盘中
begin
dbms_audit_mgmt.set_audit_trail_property(
audit_trail_type => dbms_audit_mgmt.AUDIT_TRAIL_UNIFIED,
audit_trail_property => dbms_audit_mgmt.AUDIT_TRAIL_WRITE_MODE,
audit_trail_property_value => dbms_audit_mgmt.AUDIT_TRAIL_IMMEDIATE_WRITE);
end;
/
--改回默认的队列写入模式
begin
dbms_audit_mgmt.set_audit_trail_property(
audit_trail_type => dbms_audit_mgmt.AUDIT_TRAIL_UNIFIED,
audit_trail_property => dbms_audit_mgmt.AUDIT_TRAIL_WRITE_MODE,
audit_trail_property_value => dbms_audit_mgmt.AUDIT_TRAIL_QUEUED_WRITE);
end;
/
在许多情况下,会使用细粒度审计(FGA) 功能,而不会使用基于值的触发器。
BEGIN
dbms_fga.add_policy
(object_schema => 'OUZY'
,object_name => 'T'
,policy_name => 'audit_t'
,audit_column => 'object_name,status'
,ENABLE => TRUE
,statement_types => 'SELECT,UPDATE');
END;
BEGIN
dbms_fga.disable_policy(object_schema => 'OUZY'
,object_name => 'T'
,policy_name => 'audit_t');
END;
BEGIN
dbms_fga.drop_policy(object_schema => 'OUZY'
,object_name => 'T'
,policy_name => 'audit_t');
END;
select * from dba_audit_policies;(查看fga审计视图)
select * from unified_audit_trail; (审计结果查看)
select OBJECT_NAME,SQL_TEXT,UNIFIED_AUDIT_POLICIES,fga_policy_name from unified_audit_trail;
归档和清除:
–设置清理
begin
dbms_audit_mgmt.clean_audit_trail(
audit_trail_type => dbms_audit_mgmt.AUDIT_TRAIL_UNIFIED,
use_last_arch_timestamp => TRUE);
end;
–设置归档上次归档时间
BEGIN
dbms_audit_mgmt.set_last_archive_timestamp(
audit_trail_type =>
dbms_audit_mgmt.AUDIT_TRAIL_UNIFIED,
last_archive_time => SYSTIMESTAMP);
END;
–设置归档上次归档时间(按UTC时间-8小时)
begin
dbms_audit_mgmt.set_last_archive_timestamp(
audit_trail_type => dbms_audit_mgmt.AUDIT_TRAIL_UNIFIED,
last_archive_time => systimestamp-8/24);
end;
如果是AUDIT_TRAIL_UNIFIED,则是UTC时间。
SELECT * FROM dba_audit_mgmt_last_arch_ts;(查询上次归档时间)
注意时区(默认UTC时间,而系统时间设置默认为CST,相差8小时)