Oracle

您所在的位置:网站首页 查看oracle审计是否开启 Oracle

Oracle

2024-07-01 12:12| 来源: 网络整理| 查看: 265

简述

审计 (Audit) 用于监视和记录用户所执行的数据库操作,审计记录可存在数据字典表(默认存储在system表空间中的SYS.AUD$表中,可通过视图dba_audit_trail查看审计记录)或操作系统审计记录文件中(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/)。默认情况下,是没有开启审计功能的

审计记录内容包含 操作的日期和时间等信息 用户执行的特定类型操作

注意: 无论是否打开数据库的审计功能,以系统管理员(sysdba, sysoper)权限连接数据库实例,启动数据库和关闭数据库的操作都会强制写入操作系统日志文件中。

存储位置 旧(12c以前版本)审计引擎不同的组件存放在不同的位置 SYS.AUD$ : 会存放数据库的标准审计结果 SYS.FGA_LOG$ : 会存放细粒度审计结果(fine-grained auditing DVSYS.AUDIT_TRAIL$ : 会存放Oracle Database Vault和Oracle Label Security等组件的审计结果 12C 统一审计引擎 所有的审计记录都存储在字典表UNIFIED_AUDIT_TRAIL 审计功能 审计语句的成功执行、不成功执行或其两者 审计维度 标准审计(AUD) 细粒度审计(FGA)-Fine Grained Auditing

细粒度的审计使用DBMS_FGA包完成配置和管理工作。细粒度审计除了审计功能外,还可用于绑定变量值的捕获。oracle 9i引进的一个新特性。

审计级别

Statement (语句)、Privilege (权限)、object(对象)

Statement

对某种类型的SQL语句审计,不指定结构或对象。如audit table 会审计数据库中所有的create table,drop table,truncate table语句。通过视图DBA_STMT_AUDIT_OPTS查看当前开启的审计选项

Privilege

对某些系统权限的使用情况进行审计。通过视图DBA_PRIV_AUDIT_OPTS查看当前开启的审计选项

object

对指定模式对象上的指定语句的审计。通过视图DBA_OBJ_AUDIT_OPTS查看当前开启的审计选项

审计选项 noaudit | audit audit: 开启指定对象的审计 noaudit: 取消审计 by ACCESS | by session

by access: 每一个被审计的操作都会生成一条审计记录

by session: 同一个会话中同类型操作只会生成一条审计记录,默认by session

whenever [not] successful whenever successful: 操作成功时才被审计 whenever not successful: 操作失败时才被审计

省略该子句时,不管操作成功与否都会审计。

新特性 11g 引入新特性之X$DBGALERTEXT内部视图

若需要利用SQL查询Oracle的alert.log告警日志,在11g以前可以通过创建Alert.log内容的外部表来实现查询日志内容的目的。在11g开始,引入了新的ADR(Automatic Diagnostic Repository) 自动诊断仓库特性之后,自动将alert.log文件格式自动转换为XML的格式,默认存放在$ADR_HOME/alert&trace目录下,并且为日志条目增加了更多的属性(如Level之类),使得告警日志能提供更多有用的信息。

从11g开始,就不需要手动创建外部表的方式查询,它已经由Oracle的内部视图X$DBGALERTEXT直接提供。

set linesize 168 pagesize 99 select originating_timestamp, message_group, problem_key, message_text from X$DBGALERTEXT where message_text like '%ORA-00600%' -- and message_group = 'Generic Internal Error' -- 最近出现过的Internal Errors -- and message_group = 'admin_ddl' -- 审计最近2天内管理员执行过的DDL语句 and rownum < 10;

X$DBGALERTEXT的内容极其丰富,包括message记录发生的日期、发生问题的进程号、trace日志的位置、问题的关键(problem key),为分析数据库日志提供极为强大的接口,节约大量的时间。

当log.xml的大小超过10MB时,Oracle会将其内容归档到如log_$N.xml这样的归档文件中,并清空当前的log.xml的内容。

注意: X$DBGALERTEXT的数据实际来源于ADR中的log.xml文件, 若xml被删除或者内容缺失都会影响信息完整性

12C 新特性审计模式

Mixed Auditing Policy(混合审计模式):支持新的审计引擎和老的审计引擎一起工作,数据库创建后,默认是使用混合模式,使用ora_secureconfig策略

审计策略:

set lines 168 pages 99 col POLICY_NAME for a32 col USER_NAME for a18 col SUCCESS for a8 col FAILURE for a8 select USER_NAME, POLICY_NAME, ENABLED_OPT, ENABLED_OPTION, SUCCESS, FAILURE from AUDIT_UNIFIED_ENABLED_POLICIES; ora_secureconfig 策略 ora_account_mgmt 策略 ora_database_parameter 策略

Unified Auditing Policy(统一审计模式):12C新引入的审计引擎,审计数据默认放在sysaux表空间中的只读审计表,其属主是audsys(该用户默认是被锁定的)

查看统一审计模式下的审计记录数据

通过字典表UNIFIED_AUDIT_TRAIL查看审计记录

col OS_USERNAME format a12 col TERMINAL for a12 col SQL_TEXT format a60 COL AUDIT_TYPE format a10 col ACTION_NAME format a24 col UNIFIED_AUDIT_POLICIES format a18 select AUDIT_TYPE,OS_USERNAME,TERMINAL,ACTION_NAME, SQL_TEXT,UNIFIED_AUDIT_POLICIES from UNIFIED_AUDIT_TRAIL where OBJECT_NAME='EMP'; 相关参数 audit_sys_operations

默认为false,当设置为true时,所有sys用户(包括以sysdba, sysoper身份登录的用户)的操作都会被记录,审计记录不会写到sys.aud$表中。如果是Windows平台,它会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

注意:该参数是(static)静态参数,需要重新启动数据库才能生效

audit_trail

注意:该参数是(static)静态参数,需要重新启动数据库才能生效

None:是默认值,不做审计;

DB:将审计记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;

DB,Extended:审计结果里面除了连接信息还包含了当时执行的具体语句;

OS:将审计记录在操作系统文件中,文件名由audit_file_dest参数指定;

XML:10g里新增的参数

安装配置 desc sys.aud$

若上面语句返回结果:表不存在时,说明审计相关的表,视图等对象还没有安装

安装审计表

由于审计表默认安装在SYSTEM表空间,因此,需要确保SYSTEM表空间有足够的空间存放审计信息

sqlplus "/ as sysdba" 120 /* hours */); END; / 验证 SET SERVEROUTPUT ON BEGIN IF DBMS_AUDIT_MGMT.is_cleanup_initialized(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD) THEN DBMS_OUTPUT.put_line('YES'); ELSE DBMS_OUTPUT.put_line('NO'); END IF; END; / select to_char(min(ntimestamp#),'yyyy-mm-dd hh24:mi:ss') ntime from sys.aud$; SET_LAST_ARCHIVE_TIMESTAMP -- 设定归档间隔 BEGIN DBMS_AUDIT_MGMT.set_last_archive_timestamp( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, last_archive_time => SYSTIMESTAMP-8 ); END; / -- 查看设定的归档间隔 SELECT * FROM dba_audit_mgmt_last_arch_ts; CREATE_PURGE_JOB -- 通过创建一个purge Job来进行清理已归档的历史审计记录 BEGIN DBMS_AUDIT_MGMT.CREATE_PURGE_JOB( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, AUDIT_TRAIL_PURGE_INTERVAL => 24 /* hours */, AUDIT_TRAIL_PURGE_NAME => 'DAILY_AUDIT_PURGE_JOB', USE_LAST_ARCH_TIMESTAMP => TRUE ); END; / exec DBMS_SCHEDULER.RUN_JOB(job_name => 'SYS.DAILY_AUDIT_PURGE_JOB'); 手动清理审计记录数据 sqlplus -S / as sysdba clear_aud_`date +%Y%m%d`.log create table tb_aud_`date +%Y%m` nologging tablespace AUDTBS compress as select * from aud\$; truncate table sys.aud\$; EOF # 表如果太大则采用该方式清理,keep值根据实际情况设置,例如当前aud$大小为5000m truncate table sys.aud$ reuse storage; alter table sys.aud$ deallocate unused keep 4000m; alter table sys.aud$ deallocate unused keep 3000m; alter table sys.aud$ deallocate unused keep 2000m; alter table sys.aud$ deallocate unused keep 1000m; ## fga_log$ 表使用类似的清理方法 示例 审计登录失败事件 alter session set nls_date_format='yyyy-mm-dd HH24:Mi:SS'; set lines 168 pages 99 col userhost for a32 col terminal for a18 col LOGOFF$TIME for a32 select userid,userhost,terminal,action#,LOGOFF$TIME,NTIMESTAMP# from sys.aud$ where userid ='GDYX2' and rownum (sysdate - 10) group by os_username,userhost,username,terminal,TIMESTAMP order by TIMESTAMP desc ;

附录 参考文档 How to - Monitor Non Critical 11g Database Alert Log Errors Using a SQL UDM (Doc ID 961682.1)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3