AUDIT审计的一些使用


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语句在解析时报错)

 

posted @ 2020-06-05 17:50  耀阳居士  阅读(430)  评论(0编辑  收藏  举报