不一样的天空w

暂无签名

  • 博客访问: 111443
  • 博文数量: 595
  • 用 户 组: 普通用户
  • 注册时间: 2016-09-22 15:29
  • 认证徽章:
个人简介

ITPUB论坛APP

ITPUB论坛APP



APP发帖 享双倍积分

文章分类

全部博文(595)

文章存档

2017年(429)

2016年(155)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题
【审计】标准数据库审计 2016-10-21 07:33:53

分类: Oracle

审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件
(默认位置为$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或数据库(存储在system表空间中的
SYS.AUD$表中,可通过视图 dba_audit_trail查看)中。默认情况下审计是没有开启的。

强制审计:不管你是否打开数据库的审计功能,以下这些操作系统会强制记录:
用管理员权限连接Instance;启动数据库;关闭数据库。
和审计相关的两个主要参数:
1.Audit_sys_operations:默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)
的操作都会被记录,audit trail不会写在aud$表中,这个很好理解,如果数据库还未启动aud$不可用,
那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是windows平台,audti trail会记录在windows的
事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。
2.Audit_trail:None:是10g默认值,不做审计;11g默认值DB,将审计结果记录到aud$表中;
审计
强制性审计
启停数据库等动作,都记录在了 alert 日志中,这些就是强制审计,是 oracle 自动开启的
 
标准数据库审计
show parameter audit_trail
基于值审计
这个是通过我们自己编写的触发器来完成的。
细粒度审计 (FGA)
可以针对某一列进行更细致的审计
DBA 审计
安全管理员对 DBA 的审计

标准数据库审计
- 审计语法:
audit sql_statement_clause by {session | access} whenever [not] successful;
?
by session在一个会话中同类型的操作只审计一条
? by access每个符合审计的操作全部审计
- 审计相关参数 audit_trail):
audit_trail = { none | os | db [, extended] | xml [, extended] }
? none10g 默认值,不做审计;
? os:将 audit trail 记录在操作系统文件中,文件名由 audit_file_dest 参数指定;
? db11g 默认值将审计结果记录到 aud$中;
? db,extended:将审计结果记录到 aud$中,同时包括绑定变量及 CLOB 字段
? xml:记录 OS 文件的是 XML 格式的审计记录;
? xml,extended:记录OS 文件的是 XML 格式的审计记录,同时包括绑定变量及 CLOB 字段
oracle10g:默认审计参数NONE,即未开启

Oracle11g:默认审计参数DB

 
实验开始:

——查看审计是否开启: DB表示为11g默认参数)

SYS@ORA11GR2>show parameter audit_trail

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- -----------------------------------------

audit_trail                          string          DB

 

注:存储审计信息的表( aud$)的默认表空间为 system system 表空间是不建议用的,所以最好为表aud$单独创建一个表空间用于存储审计数据。


——验证:

SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';

 

TABLE_NAME                     TABLESPACE_NAME

------------------------------ ------------------------------

AUD$                           SYSTEM

 

1) 创建 ts_audit 表空间,用于存储审计信息

SYS@ORA11GR2>create tablespace ts_audit datafile '/u01/app/oracle/oradata/ORA11GR2/ts_audit_01.dbf' size 10m autoextend on next 10m;

 

Tablespace created.

 

2) 存储审计信息的表 move ts_audit 表空间

SYS@ORA11GR2>alter table aud$ move tablespace ts_audit;

 

Table altered.

——验证:

SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';

 

TABLE_NAME                     TABLESPACE_NAME

------------------------------ ------------------------------

AUD$                           TS_AUDIT

考虑将 aud$ clob 字段单独存储一个表空间,如下
alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);
alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);
oracle10g
中,还可以考虑将索引 move 一个新的表空间, oracle11g aud$表已无索引
alter index sys.I_AUD1 rebuild tablespace users;


3) 查看审计参数并对其修改,改为存储到数据库记录绑定变量

--查看当前数据库中参数 audit_trail 的值

SYS@ORA11GR2>show parameter audit_trail

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_trail                          string      DB

 

--修改为审计记录保存到数据库中并且包含 clob 字段

SYS@ORA11GR2>alter system set audit_trail=db,extended scope=spfile;

 

System altered.

 

SYS@ORA11GR2>startup force;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

 

Total System Global Area  830930944 bytes

Fixed Size                  2257800 bytes

Variable Size             503319672 bytes

Database Buffers          322961408 bytes

Redo Buffers                2392064 bytes

Database mounted.

Database opened.

——验证:

SYS@ORA11GR2>show parameter audit_trail

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_trail                          string      DB, EXTENDED

 

4) 登录 scott 用户,创建 t 表并开启 update 审计,使用 by access 子句,每次 update 都审计

SCOTT@ORA11GR2>create table t(x int);

 

Table created.

 

SCOTT@ORA11GR2>insert into t values(9);

 

1 row created.

 

SCOTT@ORA11GR2>commit;

 

Commit complete.

——在scott用户下对t表进行access级别的审计

SCOTT@ORA11GR2>audit update on t by access表示对t表的每次更新操作进行审计

by access每个符合审计的操作全部审计;by session在一个会话中同类型的操作只审计一条)

Audit succeeded.

 

5) 使用绑定变量的 sql 进行 update 测试

SCOTT@ORA11GR2>var v_num number;

SCOTT@ORA11GR2>exec :v_num:=1000;   (:v_num绑定变量,:v_num:=给绑定变量授予一个值)


PL/SQL procedure successfully completed.

 

SCOTT@ORA11GR2>update t set x=:v_num;

 

1 row updated.

 

SCOTT@ORA11GR2>commit;

 

Commit complete.

 

6) 返回 sys 账户,验证结果

SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text='update t set x=:v_num';

 

USERNAME   SQL_TEXT                  SQL_BIND

---------- ------------------------- ---------------

SCOTT      update t set x=:v_num      #1(4):1000

 

7) 另: sql 语句中&变量非绑定变量,在审计表中也可以清晰的看出来

SYS@ORA11GR2>conn scott/tiger

Connected.

SCOTT@ORA11GR2>select * from t;

 

         X

----------

      1000

 

SCOTT@ORA11GR2>update t set x=&val;

Enter value for val: 9

old   1: update t set x=&val

new   1: update t set x=9

 

1 row updated.

 

SCOTT@ORA11GR2>commit;

 

Commit complete.

 

——查看:

SCOTT@ORA11GR2>conn / as sysdba

SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text like 'update t set x=%';

 

USERNAME   SQL_TEXT                  SQL_BIND

---------- ------------------------- ---------------

SCOTT      update t set x=:v_num      #1(4):1000

SCOTT      update t set x=9

 

8) 取消审计(取消语句无需写 by access 子句)

SYS@ORA11GR2>conn scott/tiger

Connected.

SCOTT@ORA11GR2>noaudit update on t;

 

Noaudit succeeded.

实验结束!!!!!!!!


阅读(35) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册