AUDIT审计的一些使用
原创 Linux操作系统 作者:westzq1984 时间:2012-11-15 14:34:22 2772 0
11g开始默认开启了审计功能,配置选项为DB,同时对权限,登录进行了审计
审计其实是个很有用的功能,如果不打算使用审计,也可以考虑开启审计,但是删除其定义的规则即可:
noaduit all;
noaduit all statements;
noaudit all privileges;
noaudit EXEMPT ACCESS POLICY;
对于审计存放的位置,建议设置为XML,EXTENDED。这样增加了对SQL语句的捕获,并且存放在操作系统上,更利于清理
默认审计不会取AUDIT SYSDBA登录的用户,除非设置AUDIT_SYS_OPERATIONS为TRUE。所以,在决定启用审计的系统中,要严格控制SYSDBA权限的用户
在启用审计的系统中,严格控制DBA角色的分配,否则,审计数据可能会被篡改
审计的维护:
迁移AUD$和FGA_LOG$表,直接MOVE的话,配置表中的数据不会更改。但是影响不大
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
AUDIT_TRAIL_LOCATION_VALUE => 'USERS');
END;
/
清空所有审计数据
BEGIN
DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES,
USE_LAST_ARCH_TIMESTAMP => FALSE);
END;
/
TRUNCATE TABLE SYS.AUD$;
11g可以创建自动清理审计数据的JOB
其可以根据归档时间进行清理
BEGIN -- 清理DB审计数据必须初始化。
DBMS_AUDIT_MGMT.INIT_CLEANUP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
DEFAULT_CLEANUP_INTERVAL => 12); -- 定义调度清理工作的频率。其决定DB如何清理审计数据,但和实际运行频率无关
END;
/
SELECT * FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
BEGIN -- 定义归档审计数据的时间戳
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
LAST_ARCHIVE_TIME => SYSDATE);
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
LAST_ARCHIVE_TIME => SYSDATE);
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
LAST_ARCHIVE_TIME => SYSDATE);
END;
/
SELECT * FROM DBA_AUDIT_MGMT_LAST_ARCH_TS;
BEGIN
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
AUDIT_TRAIL_PURGE_INTERVAL => 24,
AUDIT_TRAIL_PURGE_NAME => 'Audit_Trail_PJ',
USE_LAST_ARCH_TIMESTAMP => TRUE );
END;
/
SELECT * FROM dba_scheduler_jobs
审计的一些用法:
审计登录
audit session;
本质是审计CREATE SESSION权限的使用
可以获得:登录时间,用户名,主机,主机用户名,主机上的进程号
SELECT * FROM DBA_COMMON_AUDIT_TRAIL
WHERE (STATEMENT_TYPE = 'LOGON' -- 普通登录
OR OS_PRIVILEGE = 'SYSDBA') -- SYSDBA登录
AND RETURNCODE > 0 -- 失败的登录
审计DDL
audit ALTER SYSTEM,CLUSTER,CONTEXT,DATABASE LINK,DIMENSION,DIRECTORY,INDEX,MATERIALIZED VIEW,OUTLINE,PROCEDURE ,PROFILE,PUBLIC DATABASE LINK,PUBLIC SYNONYM,ROLE,ROLLBACK SEGMENT,SEQUENCE,SYNONYM,SYSTEM AUDIT,SYSTEM GRANT,TABLE,TABLESPACE,TRIGGER,TYPE,USER,VIEW,ALTER SEQUENCE,ALTER TABLE,COMMENT TABLE,GRANT DIRECTORY,GRANT PROCEDURE,GRANT SEQUENCE,GRANT TABLE,GRANT TYPE
审计功能没有提供一种可以直接审计全部DDL的方法
审计指定对象上的DDL:
audit ALTER,AUDIT,COMMENT,GRANT,INDEX,RENAME on / default;
audit AUDIT,COMMENT,GRANT,RENAME on / default
审计对象上的所有操作,包括DML操作
audit all on ;
审计由于对象不存在而报错的语句
audit not exists;
SELECT * FROM dba_common_audit_trail WHERE returncode=942
审计报错的语句
audit all statements whenever not successful; -- 审计DDL语句错误,以及PK冲突等
audit all on whenever not successful; -- 审计DML语句错误
如果撤销用户的DBA角色,需要分配给用户那些必须的系统权限
audit all privileges by ;
SELECT DISTINCT priv_used FROM dba_common_audit_trail WHERE db_user='’
ALL与ALL STATEMENTS的区别
ALL审计特定的一类SQL,其不包含DML,ALTER TABLE等
ALL STATEMENTS审计用户发出的所有SQL,不包含递归语句,同时,解析失败的语句也不会记录(DDL语句在执行时报错,DML语句在解析时报错)