Oracle数据库审计
数据库审计是监视并记录选定的用户数据库操作。主要分为标准审计和精细粒度审计(FGA,Fine-Grained Auditing),标准审计可在语句级、对象级、权限级进行审计;精细粒度审计涉及到基于内容或特定数据的审计。
启用审计:
1、启用审计需要修改audit_trail的值,默认为NONE.
SQL> show parameter audit;
NAME                   TYPE        VALUE
---------------------- ----------- ------------------------------
audit_file_dest        string      /opt/oracle/product/10.0/admin/hunt/adump
audit_sys_operations   boolean     FALSE
audit_syslog_level     string     
audit_trail            string      NONE

audit_trail的取值可有以下几种:
SELECT * FROM V$parameter_Valid_Values where name='audit_trail';
    NUM NAME ORDINAL VALUE ISDEFAULT 备注
1 911 audit_trail 1 DB FALSE 
2 911 audit_trail 2 OS FALSE 
3 911 audit_trail 3 NONE FALSE 默认
4 911 audit_trail 4 TRUE FALSE 与DB一致
5 911 audit_trail 5 FALSE FALSE 与NONE一致
6 911 audit_trail 6 DB_EXTENDED FALSE 
7 911 audit_trail 7 XML FALSE 
8 911 audit_trail 8 EXTENDED FALSE XML_EXTENDED

 NONE:禁用数据库审计。NONE为此参数的默认值。
 OS:指出Oracle将把审计记录写到一个操作系统文件中。
 DB:指出Oracle将把审计记录写入数据库审计跟踪,可视为DBA_AUDIT_TRAIL(存储在SYS.AUD$表中)。
 DB_EXTENDED:指出Oracle将把所有审计记录发送到数据库审计跟踪,除此之外,填充SQLBIND和SQLTEXTCLOB列。
 XML:指定数据库审计,进入OS文件的是XML格式的审计记录。
 XML_EXTENDED:与XML设置相同,另外还记录所有审计跟踪列,包括SQLTEXT和SQLBIND。
如果指定AUDIT_TRAIL=OS,则审计跟踪不再数据库中存储审计信息,而是在由AUDIT_TRAIL_DEST参数指定的位置存储审计信息。如果指定AUDIT_TRAIL=OS且省略AUDIT_TRAIL_DEST参数,则默认将审计信息写到$ORACLE_HOME/rdbms/audit/目录中。
2、修改audit_trail:
SQL>alter system set audit_trail=db_extended scope=spfile;
重启数据库
SQL> show parameter audit;

NAME                   TYPE        VALUE
---------------------- ----------- ------------------------------
audit_file_dest        string      E:\ORACLE\PRODUCT\10.2.0\ADMIN
                                   \HUNT\ADUMP
audit_sys_operations   boolean     FALSE
audit_trail            string      DB_EXTENDED   ----已改变

标准审计:
1、 权限审计:
基于系统的权限进行的审计,如create session、select{insert|update} any table ……,具体的权限可查询system_privilege_map。

A、 开启create session 审计:
SQL> show user;
USER 为 "SYS"
SQL> audit create session ;
审计已成功。
            查询表dba_priv_audit_opts可看到如下结果:  
    USER_NAME PROXY_NAME PRIVILEGE SUCCESS FAILURE
1   CREATE SESSION BY ACCESS BY ACCESS
            使用其他用户登录系统,查看dba_audit_trail可获得对登录用户的审计结果:
    OS_USERNAME USERNAME USERHOST TERMINAL TIMESTAMP OWNER ……
1 hunt\Administrator ADMIN WORKGROUP\hunt hunt 41026.8511    ……

B、 指定审计用户:
SQL> show user;
USER 为 "SYS"
SQL> audit create any table by test;
审计已成功。
            查询表dba_priv_audit_opts可看到如下结果:  
    USER_NAME PROXY_NAME PRIVILEGE SUCCESS FAILURE
1     CREATE SESSION BY ACCESS BY ACCESS
2 TEST   CREATE ANY TABLE BY ACCESS BY ACCESS
此时只有test 进行create table 才进行审记。
C、 指定审计范围:
默认对成功或失败的审计操作进行记录,实际的应用中我们往往更多的在意那些不成功的情况,比如系统登录。
SQL> show user;
USER 为 "SYS"
SQL> audit delete any table whenever not successful;
审计已成功。

whenever [not] successful:
whenever successful 操作成功(dba_audit_trail中returncode字段为0) 才审计,
whenever not successful 反之。省略该子句的话,不管操作成功与否都会审计。
            查询表dba_priv_audit_opts可看到如下结果:

USER_NAME PROXY_NAME PRIVILEGE SUCCESS FAILURE
1     CREATE SESSION BY ACCESS BY ACCESS
2     DELETE ANY TABLE NOT SET BY SESSION
3 TEST   CREATE ANY TABLE BY ACCESS BY ACCESS

取消审计只需要将审计语句中的audit改为noaudit即可:
noaudit create any table by test;
no audit create session;
2、 对象审计:
按对象审计,只审计on关键字指定对象的相关操作。
A、 开启审计:
SQL> show user;
USER 为 "ADMIN"
SQL> audit select on t;
审计已成功。
查询表dba_obj_audit_opts可看到如下结果:
    OWNER OBJECT_NAME OBJECT_TYPE …… SEL UPD REF EXE CRE REA WRI FBK
1 ADMIN T TABLE …… S/S -/- -/- -/- -/- -/- -/- -/-
       表中的SEL代表select ,对应的S/S指:SESSION级成功审计/失败审计。此处S可能为SESSION也可能为ACCESS.区别在于:
by access 每一个被审计的操作都会生成一条audit trail。
by session 一个会话里面同类型的操作只会生成一条audit trail,默认为by session。

查询T表,dba_audit_trail中记录的部分审计结果如下:
    OS_USERNAME USERNAME OWNER OBJ_NAME SES_ACTIONS SQL_TEXT
1 hunt\Administrator ADMIN ADMIN T ---------S------ select * from t
---------S------ 与上一表格中的内容对应S代表SEL的审计权限。
B、 打开全部审计权限:
SQL> show user;
USER 为 "ADMIN"
SQL> audit all on t;
审计已成功。
查询表dba_obj_audit_opts可看到如下结果:
    OWNER OBJECT_NAME OBJECT_TYPE ALT AUD COM DEL GRA IND INS LOC …
1 ADMIN T TABLE S/S S/S S/S S/S S/S S/S S/S S/S …

SQL> Audit all on t by access;
    OWNER OBJECT_NAME OBJECT_TYPE ALT AUD COM DEL GRA IND INS LOC …
1 ADMIN T TABLE A/A A/A A/A A/A A/A A/A A/A A/A …

3、 语句审计:
按语句来审计,比如audit table 会审计数据库中所有的create table,drop table,truncate table语句。
A、 开启审计:
SQL> show user;
USER 为 "ADMIN"
SQL> audit table by test;
审计已成功。
查询表dba_stmt_audit_opts可看到如下结果:
    USER_NAME PROXY_NAME AUDIT_OPTION SUCCESS FAILURE
1     CREATE SESSION BY ACCESS BY ACCESS
2     DELETE ANY TABLE NOT SET BY SESSION
3 TEST   CREATE ANY TABLE BY ACCESS BY ACCESS
4 TEST   TABLE BY ACCESS BY ACCESS
语句审计与权限审计有交叉。
此时我们用test用户创建一个表,查看dba_audit_trail中记录的部分审计结果如下:
    USERNAME OWNER OBJ_NAME ACTION_NAME SQL_TEXT
8 TEST TEST TAB_T CREATE TABLE create table tab_t(id int,name char(10))

通过长时间的审计,dba_audit_trail表会不断的增长,可以通过清空aud$ 达到删除审计的目的。

SYS用户登录时数据库会启用强制审计,WINDOWNS里的事件查看器里,内容如下:
事件类型: 信息
事件来源: Oracle.hunt
事件种类: 无
事件 ID: 34
日期:  2012-4-27
事件:  20:22:24
用户:  N/A
计算机: WWW-61131B590F7
描述:
Audit trail: ACTION : 'CONNECT' DATABASE USER: 'sys' PRIVILEGE : SYSDBA CLIENT USER: hunt CLIENT TERMINAL: LENOVO-PC STATUS: 0 .
LINXU下位于$ORACLE_HOME/admin/$ORACLE_SID/adump下,内容如下:
     Audit file /opt/oracle/product/10.0/admin/wlan/adump/ora_18094.aud
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /opt/oracle/product/10.0
System name:    SunOS
Node name:      crmdb
Release:        5.10
Version:        Generic_141414-07
Machine:        sun4v
Instance name: wlan
Redo thread mounted by this instance: 1
Oracle process number: 53
Unix process pid: 18094, p_w_picpath: oracle@wlandb (TNS V1-V3)

Fri Apr 27 12:10:01 2012
ACTION : 'CONNECT'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL:
STATUS: 0

精细粒度审计:
A、 定义审计策略:
begin
  dbms_fga.add_policy(object_schema   => 'ADMIN',
                      object_name     => 'T',
                      policy_name     => 'audit_t',
                      audit_column    => 'SALARY',
                      enable          => TRUE,
                      statement_types => 'select,insert,update,delete');

end;
/
查询dba_audit_policies 表,结果如下;

OBJECT_SCHEMA OBJECT_NAME POLICY_NAME POLICY_COLUMN SEL INS UPD DEL
2 ADMIN T AUDIT_T SALARY YES YES YES YES

此时我们对T表进的SALARY列进行操作,然后查询dba_fga_audit_trail表,部分审计结果如下:
    OBJECT_SCHEMA OBJECT_NAME POLICY_NAME SQL_TEXT STATEMENT_TYPE
1 ADMIN T AUDIT_T select * from t SELECT
2 ADMIN T AUDIT_T update t set salary=1000 where id=1 UPDATE
3 ADMIN T AUDIT_T insert into t values(3,'c',2000) INSERT

删除策略:

begin
  dbms_fga.drop_policy(object_schema => 'ADMIN',
                       object_name   => 'T',
                       policy_name   => 'AUDIT_T');
end;
精细粒度的审计日志可以通过删除sys.fga_log$表进行清空。

最后,审计日志的清理:
1、 直接清除sys.aud$和sys.fga_log$表;
2、 利用DBMS_AUDIT_MGMT.INIT_CLEANUP设置策略清除:
BEGIN
 IF
   NOT DBMS_AUDIT_MGMT.IS_CLEANUP_INITIALIZED(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD)
 THEN
   DBMS_AUDIT_MGMT.INIT_CLEANUP(
      audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
      default_cleanup_interval => 12 /* hours */);
 END IF;
END;
/
包的具体用法可参考:
http://docs.oracle.com/cd/E11062_01/admin.1023/e11059/avadm_app_d_audit_mgmt.htm
3、转移表空间(未测试)
alter table sys.aud$ move tablespace users;
alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);
alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);
alter index sys.I_AUD1 rebuild tablespace users;

转载于:https://blog.51cto.com/hunt1574/846223

oracle学习笔记之 审计相关推荐

  1. oracle:oracle学习笔记(四)循环、光标、异常、瀑布模型

    oracle学习笔记:循环.光标.异常 文章目录 打印Hello World 定义基本变量 引用型变量(单行)` my_name emp.ename%type ` 记录型变量(多行) `emp_rec ...

  2. Oracle学习笔记---(一)

    Oracle学习笔记---(一) 一 1.Oracle简介     Oracle是以高级结构化查询语言(SQL)为基础的大型关系数据库:是一个对象关系数据库管理系统(ORDBMS).它提供了关系数据库 ...

  3. 在大量数据迁移期间oracle学习笔记

    在数据迁移期间oracle学习笔记 0主键(自增) 1用户代码 2区域代码 3承保公司代码 4理赔编码 5投保确认码 6案件状态 7案件进展 8重开案件进展 9转换后案件状态 需求分析: 1.根据上述 ...

  4. oracle 权限问题9017,[数据库]oracle学习笔记(一)用户管理_星空网

    oracle学习笔记(一)用户管理 2014-04-13 0 1 --oracle学习第一天 2 --连接 @后面连接数据库实例,具体连接到那个数据库 3 conn scott/tiger@MYORA ...

  5. 【Oracle】Oracle学习笔记

    [Oracle]Oracle学习笔记 目录 [Oracle]Oracle学习笔记 P1.Oracle数据库的安装和配置 P2.Oracle数据库管理 P3-0.初步SQL P3-1.基本SQL SEL ...

  6. oracle学习笔记 Oracle体系结构概述

    oracle学习笔记 Oracle体系结构概述 从这节开始,开始讲oracle数据库体系结构. 首先从总体上,从概述上把oracle整体的体系结构讲一下, 然后接下来的时间我们会一块一块的将oracl ...

  7. Oracle学习笔记 字符集概述

    Oracle 学习笔记 字符集概述 这节课开始讲oracle里面的字符集 偏重于原理和简单的一些判断以及实现 字符集它涉及到很多的东西 比如建库和操作系统环境 这节课把字符集的原理性的东西以及常见的操 ...

  8. oracle学习笔记 oracle软件安装准备工作 第一部分 环境准备

    oracle学习笔记   oracle软件安装准备工作  第一部分 环境准备 这节课对初学者来说内容较多,我把它分成了三篇. 即使这样也不可能把每个可能遇到的问题都说到,如果遇到没说到的问题自己上网搜 ...

  9. Oracle学习笔记(七)——分组统计查询

    Oracle学习笔记(七)--分组统计查询 基础统计函数的使用 分组统计操作的实现,结合多表查询使用分组统计 常用统计函数 COUNT(*|[DISTINCT]字段) MAX(字段,日期或数字) MI ...

最新文章

  1. docker always_介绍两款Docker可视化工具
  2. 可动态调节参数的线程池实现
  3. SSH框架整合——基于注解
  4. VMware 虚拟机如何连接网络,且远程可连接
  5. 【IJCAI 2020】篇章要素识别和篇章结构评分(下)
  6. 极限编程的12个实践原则
  7. vue el-checkbox循环多个如何选中当前的_vue 快速入门指南(一)
  8. 《人机交互技术》 第七章 Web界面设计
  9. word流程图怎么使箭头对齐_word 流程图 怎么把箭头对整齐啊?
  10. FH153C6常用一键开关机芯片 ON/OFF单键开关IC 美容仪电子开关IC
  11. 带宽与速度的换算(表达式+例子)
  12. C语言的数据类型大全,整型数据在内存中的存储方式
  13. linux中tmp文件在哪,Linux系统中/tmp文件夹
  14. 这10款数据可视化软件工具免费好用
  15. [WEB_ezeval]
  16. 《Real-Time Rendering 4th Edition》读书笔记--简单粗糙翻译 第二章 渲染管线 The Graphics Rendering Pipeline
  17. 局域网文件夹同步工具
  18. 跨境电商常用的物流方式
  19. parallelStream中的线程安全问题
  20. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!

热门文章

  1. 一文快速理解23种经典设计模式
  2. python计算今年第几天_Python三种方法计算指定日期是今年的第几天
  3. PHP发送和接收JSON请求
  4. PHP面向对象中new self( )和 new static( ) 的区别
  5. java设置首页跳转_SpringBoot设置首页(默认页)跳转功能的实现方案
  6. win10 mysql 主从复制_win10 使用Docker配置mysql主从复制
  7. php使用mysqlnd引发的一些问题处理
  8. Project Euler:Problem 39 Integer right triangles
  9. Progress Control控件的使用
  10. 康柏川(帮别人名字作诗)