看一下Oracle的审计功能(包括FGA细粒度审计)能给我们带来些什么的强悍效果。
我将通过这个小文儿向您展示一下Oracle很牛的审计功能。Follow me. 
1.使用审计,需要先激活审计功能
1)查看系统中默认的与审计相关的参数设置
sys@ora10g> conn / as sysdba
Connected.
sys@ora10g> show parameter audit
NAME                  TYPE      VALUE
--------------------- --------- --------------------------------------
audit_file_dest       string    /oracle/app/oracle/admin/ora10g/adump
audit_sys_operations  boolean   FALSE
audit_syslog_level    string
audit_trail           string    NONE
2)对上面所列的参数进行一下解释
(1)AUDIT_FILE_DEST = 路径
指示出审计的文件存放的路径信息,我们这里显示的是“/oracle/app/oracle/admin/ora10g/adump”
不管打开还是不打开审计功能,这个目录项都会记录以sysdba身份的每次登录信息,有兴趣的朋友可以到这个目录中查看一下。
例如:
$ cat ora_9915.aud
Audit file /oracle/app/oracle/admin/ora10g/adump/ora_9915.aud
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
ORACLE_HOME = /oracle/app/oracle/product/10.2.0/db_1
System name:    Linux
Node name:      testdb183
Release:        2.6.18-128.el5
Version:        #1 SMP Wed Dec 17 11:41:38 EST 2008
Machine:        x86_64
Instance name: ora10g
Redo thread mounted by this instance: 1
Oracle process number: 13
Unix process pid: 9915, image: oracle@testdb183 (TNS V1-V3)
Wed Aug 26 19:24:11 2009
ACTION : 'CONNECT'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/1
STATUS: 0
(2)audit_sys_operations
默认值是FALSE,如果开启审计功能,这个参数需要修改为TRUE。
(3)audit_syslog_level
       语句:指定审计语句或特定类型的语句组,象审计表的语句 CREATE TABLE, TRUNCATE TABLE, COMMENT ON TABLE, and DELETE [FROM] TABLE
       权限:使用审计语句指定系统权限,象AUDIT CREATE ANY TRIGGER
       对象:在指定对象上指定审计语句,象ALTER TABLE on the emp table
(4)AUDIT_TRAIL = NONE|DB|OS
        DB--审计信息记录到数据库中
        OS--审计信息记录到操作系统文件中
        NONE--关闭审计(默认值)
3)修改参数audit_sys_operations为“TRUE”,开启审计的功能
sys@ora10g> alter system set audit_sys_operations=TRUE scope=spfile;
System altered.
4)修改参数audit_trail为“db”,审计信息记录到数据库中
sys@ora10g> alter system set audit_trail=db scope=spfile;
System altered.
5)注意,到这里如果需要使这些参数生效,必须重新启动一下数据库
sys@ora10g> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@ora10g> startup;
ORACLE instance started.
Total System Global Area 1073741824 bytes
Fixed Size                  2078264 bytes
Variable Size             293603784 bytes
Database Buffers          771751936 bytes
Redo Buffers                6307840 bytes
Database mounted.
Database opened.
6)验证一些参数修改后的结果,这里显示已经修改完成
sys@ora10g> show parameter audit;
NAME                  TYPE     VALUE
--------------------- -------- --------------------------------------
audit_file_dest       string   /oracle/app/oracle/admin/ora10g/adump
audit_sys_operations  boolean  TRUE
audit_syslog_level    string
audit_trail           string   DB
2.开启了审计功能后,这里有一个有趣的效果,就是所有sysdba权限下的操作都会被记录到这个/oracle/app/oracle/admin/ora10g/adump审计目录下。这也是为什么开启了审计功能后会存在一些开销和风险。
1)假如我们在sysdba权限用户下执行下面三条命令
sys@ora10g> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
sys@ora10g> select * From dual;
D
-
X
sys@ora10g> show parameter spfile
NAME   TYPE   VALUE
------ ------ ------------------------------------------------------------
spfile string /oracle/app/oracle/product/10.2.0/db_1/dbs/spfileora10g.ora
2)使用tail命令可以看到在相应的trace文件中有如下的详细记录信息,有点意思的发现,可以看到“show parameter spfile”命令背后真正执行了什么样的SQL语句
Wed Aug 26 20:04:03 2009
ACTION : 'alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss''
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/2
STATUS: 0
Wed Aug 26 20:04:03 2009
ACTION : 'BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/2
STATUS: 0
Wed Aug 26 20:04:16 2009
ACTION : 'select * From dual'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/2
STATUS: 0
Wed Aug 26 20:04:16 2009
ACTION : 'BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/2
STATUS: 0
Wed Aug 26 20:07:21 2009
ACTION : 'SELECT NAME NAME_COL_PLUS_SHOW_PARAM,DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',5,'number',        6,'big integer', 'unknown') TYPE,DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%spfile%') ORDER BY NAME_COL_PLUS_SHOW_PARAM,ROWNUM'
DATABASE USER: '/'
PRIVILEGE : SYSDBA
CLIENT USER: oracle
CLIENT TERMINAL: pts/2
STATUS: 0
3.演示一下对sec用户的t_audit表delete操作的审计效果
1)表t_audit信息如下
sec@ora10g> select * from t_audit order by 1;
         X
----------
         1
         2
         3
         4
         5
         6
6 rows selected.
2)这里仅仅开启对表t_audit的delete操作的审计
sec@ora10> audit delete on t_audit;
Audit succeeded.
3)查看审计设置可以通过查询dba_obj_audit_opts视图来完成
sec@ora10g> select OWNER,OBJECT_NAME,OBJECT_TYPE,DEL,INS,SEL,UPD from dba_obj_audit_opts;
OWNER  OBJECT_NAME  OBJECT_TYPE  DEL       INS       SEL       UPD
------ ------------ ------------ --------- --------- --------- ---------
SEC    T_AUDIT      TABLE        S/S       -/-       -/-       -/-
4)尝试插入数据
sec@ora10g> insert into t_audit values (7);
1 row created.
5)因为我们没有对insert语句进行审计,所以没有审计信息可以得到
sec@ora10g> select count(*) from dba_audit_trail;
  COUNT(*)
----------
         0
6)再尝试delete操作
sec@ora10g> delete from t_audit where x=1;
1 row deleted.
7)不出所料,delete操作被数据库捕获
这里可以通过查询dba_audit_trail视图或者sys.aud$视图得到详细的审计信息,这种审计方法可以得到操作的时间,操作用户等较粗的信息(相对后面介绍的细粒度审计来说)
sec@ora10g> select count(*) from dba_audit_trail;
  COUNT(*)
----------
         1
select * from dba_audit_trail;
select * from sys.aud$;
4.如想要取消对表t_audit的全部审计,需要使用手工方式来完成
sec@ora10> noaudit all on t_audit;
Noaudit succeeded.
通过查询dba_obj_audit_opts视图,确认确实已经取消的审计
sec@ora10g> select * from dba_obj_audit_opts;
no rows selected
5.【FGA】【细粒度审计】上面得到的审计信息是较粗的,我们进一步演示一下“细粒度审计FGA”的效果:可以通过FGA得到操作的SQL语句级别的信息
1)细粒度审计t_audit表上的增删改查的一切操作
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> exec dbms_fga.add_policy(object_schema=>'SEC', object_name=> 't_audit', policy_name=> 'check_t_audit',statement_types => 'INSERT, UPDATE, DELETE, SELECT');
PL/SQL procedure successfully completed.
2)对t_audit表增删改查操作一番
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> select * from t_audit;
         X
----------
         2
         3
         4
         5
         6
         7
6 rows selected.
sec@ora10g> delete from t_audit where x=5;
1 row deleted.
sec@ora10g> update t_audit set x=8 where x=7;
1 row updated.
sec@ora10g> insert into t_audit values (1);
1 row created.
sec@ora10g> commit;
Commit complete.
3)OK,查看dba_fga_audit_trail视图得到了4条审计记录
sec@ora10g> select count(*) from dba_fga_audit_trail;
  COUNT(*)
----------
         4
4)详细查看一下对应的SQL操作,FGA还是很强悍的
sec@ora10g> col DB_USER for a10
sec@ora10g> col SQL_TEXT for a50
sec@ora10g> select db_user,sql_text from dba_fga_audit_trail;
DB_USER    SQL_TEXT
---------- --------------------------------------------------
SEC        select * from t_audit
SEC        delete from t_audit where x=5
SEC        update t_audit set x=8 where x=7
SEC        insert into t_audit values (1)
5)最后再看一下这个dba_fga_audit_trail视图的结构,可以看到这个视图中记录了非常详尽的审计信息列
sec@ora10g> desc dba_fga_audit_trail
 Name                Null?    Type
 ------------------- -------- ----------------------------
 SESSION_ID          NOT NULL NUMBER
 TIMESTAMP                    DATE
 DB_USER                      VARCHAR2(30)
 OS_USER                      VARCHAR2(255)
 USERHOST                     VARCHAR2(128)
 CLIENT_ID                    VARCHAR2(64)
 ECONTEXT_ID                  VARCHAR2(64)
 EXT_NAME                     VARCHAR2(4000)
 OBJECT_SCHEMA                VARCHAR2(30)
 OBJECT_NAME                  VARCHAR2(128)
 POLICY_NAME                  VARCHAR2(30)
 SCN                          NUMBER
 SQL_TEXT                     NVARCHAR2(2000)
 SQL_BIND                     NVARCHAR2(2000)
 COMMENT$TEXT                 VARCHAR2(4000)
 STATEMENT_TYPE               VARCHAR2(7)
 EXTENDED_TIMESTAMP           TIMESTAMP(6) WITH TIME ZONE
 PROXY_SESSIONID              NUMBER
 GLOBAL_UID                   VARCHAR2(32)
 INSTANCE_NUMBER              NUMBER
 OS_PROCESS                   VARCHAR2(16)
 TRANSACTIONID                RAW(8)
 STATEMENTID                  NUMBER
 ENTRYID                      NUMBER

6)针对上面添加的审计策略进行调整:disable_policy、enable_policy和drop_policy的方法
使策略失效的方法:
sys@ora10g> exec dbms_fga.disable_policy(object_schema=>'SEC', object_name=> 't_audit', policy_name=> 'check_t_audit');
使策略生效的方法:
sys@ora10g> exec dbms_fga.enable_policy(object_schema=>'SEC', object_name=> 't_audit', policy_name=> 'check_t_audit');
彻底删除策略的方法:
sec@ora10g> exec dbms_fga.drop_policy(object_schema=>'SEC', object_name=> 't_audit', policy_name=> 'check_t_audit');
PL/SQL procedure successfully completed.
最后列一下dbms_fga提供给我们使用的方法都有哪些
sec@ora10g> desc dbms_fga
PROCEDURE ADD_POLICY
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
 OBJECT_NAME                    VARCHAR2                IN
 POLICY_NAME                    VARCHAR2                IN
 AUDIT_CONDITION                VARCHAR2                IN     DEFAULT
 AUDIT_COLUMN                   VARCHAR2                IN     DEFAULT
 HANDLER_SCHEMA                 VARCHAR2                IN     DEFAULT
 HANDLER_MODULE                 VARCHAR2                IN     DEFAULT
 ENABLE                         BOOLEAN                 IN     DEFAULT
 STATEMENT_TYPES                VARCHAR2                IN     DEFAULT
 AUDIT_TRAIL                    BINARY_INTEGER          IN     DEFAULT
 AUDIT_COLUMN_OPTS              BINARY_INTEGER          IN     DEFAULT
PROCEDURE DISABLE_POLICY
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
 OBJECT_NAME                    VARCHAR2                IN
 POLICY_NAME                    VARCHAR2                IN
PROCEDURE DROP_POLICY
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
 OBJECT_NAME                    VARCHAR2                IN
 POLICY_NAME                    VARCHAR2                IN
PROCEDURE ENABLE_POLICY
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 OBJECT_SCHEMA                  VARCHAR2                IN     DEFAULT
 OBJECT_NAME                    VARCHAR2                IN
 POLICY_NAME                    VARCHAR2                IN
 ENABLE                         BOOLEAN                 IN     DEFAULT
6.小结
以上的实验展示了Oracle的审计功能,包括Oracle引以为傲的FGA细粒度审计。
警告:这种审计的方法是需要付出一定的代价的,如磁盘的开销,性能的开销,以及您的系统是否允许反复的停启数据库实例等等。在生产环境中使用之前需要多方面评估。

使用Oracle的审计功能监控数据库中的可疑操作相关推荐

  1. 从oracle9i/92数据库中导出数据至 oracle 8.1.7 数据库中

    根据ORACLE官方文档的说明,一旦数据库创建后,数据库的字符集是不能改变的.因此,提前考虑自己的数据库将选用哪一种字符集 是十分重要的.数据库字符集选择的一般规则是将数据库字符集设定为操作系统本地字 ...

  2. oracle常见单词_数据库中常用的英文单词

    数据库中常用的英文单词 ORACLE 开发 2010-06-30 16:20:05 阅读 17 评论 0 字号:大中小 订阅 下列是一些数据库中经常碰到的英文单词: Access method (访问 ...

  3. 关于C#中使用SQLDMO来获取数据库中的一些操作

    首先添加SQLDMO的引用 1:通过SQLDMO来获取可用的网络数据库(区域网当中) public static List<string> get可用SQL服务器()       {    ...

  4. 对 Access 数据库中日期字段操作时 OleDbParameter 的问题及解决

    比如 SQL 语句: Update [table] Set [CreateDate]=@CreateDate Where ... 其参数使用:New OleDbParameter("@Cre ...

  5. SQL Server数据库关系图和数据库中数据的操作(添加,查询,修改,删除)

    文章目录 一.创建数据库关系图 二.数据的操作 1.添加数据 (1) 添加单行数据 (2) 添加多行数据 2.简单查询数据 3.修改数据 4.删除数据 5.还原数据表 三.数据库的设计 1.主键的选择 ...

  6. oracle clob导入mysql_Oracle数据库中包含CLOB字段表的导出和导入

    1.表的导出和导入 因为oracle中存储大量数据的CLOB字段默认是不导出的,所以在导出时需要特别设置一下. 我使用DBVisualizer这个工具进行导出和导入. 软件版本: DBVisualiz ...

  7. oracle活跃用户,监控数据库中的活跃用户及其运行

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 [sql] view plain copy print? set linesize 120 pagesize 66 col c1 for a9 col c ...

  8. oracle数据库中的一些操作

    --清空两个字符中间的空格 update IMPORT_TEST a set a.name = REGEXP_REPLACE(a.name,'( ){1,}', '') where a.reason ...

  9. ORM对mysql数据库中数据进行操作报错解决

    在Pycharm中使用ORM语句直接对数据库进行CURD操作时会出现错误: django.core.exceptions.ImproperlyConfigured: Requested setting ...

最新文章

  1. Zend Studio 10代码格式化设置
  2. 百度 php 图片文字识别,PHP实现百度OCR文字识别
  3. 二进制(bit)整数
  4. [转载] 七龙珠第一部——第034话 红缎带军团
  5. 切换tab页时,tab页中的echart变形问题
  6. SAP CDS view自学教程之八:SAP Fiori Elements里不同类型的annotation
  7. 打印任意想要的菱形,例如3行的、9行的、13行的菱形
  8. 如何高效学python编程_如何高效自学编程?天下没有难学的python
  9. 计算机应用基础考试excel操作题,自学考试_《计算机应用基础》_上机操作_模拟练习题...
  10. 【学术】推荐给从事科研的青年人——石墨烯教父:从千年博后到物理诺奖的心路历程
  11. 10-新闻发布系统数据库-新闻管理数据操作
  12. 电源与地之间的电容作用
  13. Mac如何清理应用软件
  14. Linux内核之进程6: 深度睡眠
  15. 计算机专硕日语考研学校排名,日语考研院校排名(日语专硕学校排名)
  16. 亦舒的话,我的感触...
  17. cc2640软件用c语言开发,CC2640R2FTI-RTOS 拿到 TI CC2640R2F 开发板 第三件事就是使用 TI-RTOS 创建 一个任务 和 使用 信号量 超时来闪烁 LED灯...
  18. 《阴阳师》手游分析报告
  19. 基于JAVA的员工工资管理系统设计与实现
  20. express中req.body的理解

热门文章

  1. 批量kill掉linux中符合某些字段的进程
  2. 深度学习:优化器工厂,各种优化器介绍,numpy实现深度学习(一)
  3. Springcloud中的region和zone的使用
  4. HNOI2013 游走
  5. Centos7 虚拟机复制后网卡问题 Job for network.service failed
  6. iOS quartzCore学习之UIBezierPath 详解
  7. 手动用hibernate-validator校验入参
  8. [DOM Event Learning] Section 2 概念梳理 什么是事件 DOM Event
  9. Linux系列:Ubuntu/fedora实用小技巧—禁止自动锁屏、设置免密码自动登录、免密码执行sudo操作...
  10. LG状告索尼侵权招致荷兰停息出口PS3