116
Oracle 9i/10g/11g 数据库审计与管理 赵元杰 北京群环域科技有限公司 2012.2

4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

Embed Size (px)

Citation preview

Page 1: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

Oracle 9i/10g/11g

数据库审计与管理

赵元杰

北京群环域科技有限公司 2012.2

Page 2: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

2/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 3: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

3/115 2012/2/27

审计概念

♠ 数据库审计 :

♠ RDBMS一般都提供审计(Audit)功能,它是用于监视用户所执行的数据库操作

♠ Oracle系统审计记录可存在数据字典表(system表空间中的 SYS.AUD$表中,可通过视图dba_audit_trail查看)

♠ 操作系统审计记录中(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/).

♠ 默认情况下审计是没有开启的。

Page 4: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

4/115 2012/2/27

审计概念

♠ 启用Oracle数据库审计 :

♠ 当Oracle系统启用审计后,在语句执行阶段产生审计记录

♠ 审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息

♠ 启用审计 目的:

♠ 审查可疑的活动(如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计)以及对数据库的所有表的成功地或不成功地删除进行审计。

♠ 监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据

Page 5: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

5/115 2012/2/27

审计概念

♠ Oracle系统的审计 :

♠ Oracle系统对任何用户所作的登录

♠操作数据库对象进行自动登记

♠数据库管理者在事后进行监督和检查

Page 6: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

6/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 7: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

7/115 2012/2/27

审计设置

♠ 1.审计表的安装:

♠ Oracle不同版本在默认下,审计表是否安装不统一

♠ 一般Oracle9i及之前,审计表没有安装

♠ 检查审计表是否安装:

SQLPLUS> connect / AS SYSDBA

SQLPLUS> select * from sys.aud$ ; --没有记录返回

SQLPLUS> select * from dba_audit_trail; -- 没有记录返回

--如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。

Page 8: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

8/115 2012/2/27

审计设置

♠ 1.审计表的安装:

♠ 要以sysdba登录,运行cataudit.sql脚本安装审计表 ♠ 审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。

♠ 安装后要重启数据库

SQL>connect / as sysdba

SQL> start c:\oracle\product\10.1.0\db_1\rdbms\admin\cataudit.sql

Table dropped.

Table created.

Comment created.

. . .

Page 9: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

9/115 2012/2/27

审计设置

♠ 2.审计配置- Audit_trail 参数:

♠ None:是默认值,Oracle系统不启用审计;

♠ DB:将audit trail 记录在 AUD$或FGA_LOG$;

♠ DB,Extended:这样审计结果里面除了连接信息还包含了当时执行的具体语句;

♠ (实际是只能是DB或db_extended )

♠ OS:将audit trail 记录在操作系统文件中,文件名由audit_file_dest参数指定;

♠ XML:10g/11g版本支持, 文件存储在AUDIT_FILE_DEST

Page 10: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

10/115 2012/2/27

审计设置

♠ 2.Audit_trail 参数设置:

♠ 要以sysdba登录并做下面的操作:

sql>connect / as sysdba;

SQL> SHOW PARAMETER AUDIT NAME TYPE VALUE

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

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

audit_file_dest string C:\ORACLE\PRODUCT\10.2.0\ADMIN

\DB10G\ADUMP audit_sys_operations boolean FALSE audit_trail

string NONE

SQL>

--AUDIT_TRAIL = { none | os | db | db,extended | xml |

xml,extended }

Page 11: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

11/115 2012/2/27

审计设置

♠ 2.Audit_trail 参数设置:

♠ 要以sysdba登录并做下面的操作:

sql>connect / as sysdba;

SQL> ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;

System altered.

SQL> SHUTDOWN

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> STARTUP

ORACLE instance started.

Total System Global Area 289406976 bytes

Fixed Size 1248600 bytes

Variable Size 71303848 bytes

Database Buffers 213909504 bytes

Redo Buffers 2945024 bytes

Database mounted.

Database opened.

Page 12: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

12/115 2012/2/27

审计设置

♠ 3.审计配置-Audit_sys_operations参数:

♠ 默认为false,表示不审计sys用户

♠ 当设置为true时,所有sys用户(包括以sysdba,

sysoper身份登录的用户)的操作都会被记录

♠ 当配置成审计sys时,audit trail不会写在aud$表中,如果数据库还未启动aud$不可用,那么像conn /as

sysdba这样的连接信息,只能记录在OS路径下

♠ 当设置为true时,如果是windows平台,audti trail会记录在windows的事件管理中,如果是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

Page 13: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

13/115 2012/2/27

审计设置

♠ 4.审计设置与审计名称:

♠ audit create session by access;

♠ audit audit system by access;

♠ audit grant any privilege by access;

♠ audit grant any object privilege by access;

♠ audit grant any role by access;

♠ audit create user by access;

♠ audit create any table by access;

♠ audit create public database link by access;

♠ audit create any procedure by access;

♠ audit alter user by access;

♠ audit alter any table by access;

♠ audit alter any procedure by access;

♠ audit alter database by access;

♠ audit alter system by access;

♠ audit alter profile by access;

♠ audit drop user by access;

♠ audit drop any procedure by access;

♠ audit drop any table by access;

♠ audit drop profile by access;

Page 14: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

14/115 2012/2/27

用EM配置审计

♠ 用EM可设置审计与管理审计,过程如下 :

♠ 启动EM;选择“用户”=>“审计设置”:

Page 15: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

15/115 2012/2/27

审计设置

♠ 审计表的移动:

♠ 审计表存储在SYSTEM表空间,会影响Oracle系统的数据字典等存储空间

♠ 把AUD$移动到其他的表空间上是个好方法:

sql>connect / as sysdba;

sql>alter table aud$ move tablespace <new tablespace>;

sql>alter index I_aud1 rebuild online tablespace <new

tablespace>;

SQL> alter table audit$ move tablespace <new tablespace>;

SQL> alter index i_audit rebuild online tablespace <new

tablespace>;

SQL> alter table audit_actions move tablespace <new tablespace>;

SQL> alter index i_audit_actions rebuild online tablespace <new

tablespace>;

Page 16: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

16/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 17: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

17/115 2012/2/27

审计激活-审计三个级别

♠ 语句审计:

♠ 对某种类型的SQL语句审计,不指定结构或对象。比如audit

table 会审计数据库中所有的create table,drop table,truncate

table语句,alter session by cmy会审计cmy用户所有的数据库连接

♠ 权限审计:

♠ 使用Oracle权限(grant select any table to a )则审计,当执行了audit select any table语句后,当用户a访问了用户b的表时(如select * from b.t)会用到select any table权限,故会被审计。

♠ 注意用户是自己表的所有者,所以用户访问自己的表不会被审计

♠ 对象审计:

♠ 对一特殊模式对象上的指定SQL语句的审计,如aduit

alter,delete,drop,insert on user1.t1 by scott; 这里会对user1用户的t1表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。

Page 18: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

18/115 2012/2/27

审计激活-语句级审计

♠ 1.语句级审计

♠ 所有类型的审计都使用audit命令来打开审计,使用noaudit命令来关闭审计。对于语句审计,audit命令的格式看起来如下所示:

AUDIT sql_statement_clause BY {SESSION | ACCESS}WHENEVER [NOT]

SUCCESSFUL;

--

--凡是SCOTT和BLAKE用户查询表和修改表都要审计:

--

AUDIT SELECT TABLE, UPDATE TABLE BY SCOTT, BLAKE;

Page 19: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

19/115 2012/2/27

审计激活-语句级审计

♠ 1.语句级审计-例1

♠ 对SCOTT用户创建进行审计:

SQL> audit index by SCOTT;

Audit succeeded.

--在HR.JOBS表上创建了一个索引:

SQL> create index job_title_idx on hr.jobs(job_title);Index

created.

--查询DBA_AUDIT_TRAIL中的审计跟踪,可看到SCOTT创建索引:

SQL> select username, to_char(timestamp,'MM/DD/YY HH24:MI')

Timestamp,2 obj_name, action_name, sql_text from

dba_audit_trail3 where username = ‘SCOTT';

USERNAME TIMESTAMP OBJ_NAME ACTION_NAME

SQL_TEXT

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

----

SCOTT 10/04/07 15:15 JOB_TITLE_IDX CREATE INDEX create

index hr.job_title_idx onhr.jobs(job_title)1 row selected.

--

SQL> noaudit index by SCOTT;

Noaudit succeeded.

Page 20: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

20/115 2012/2/27

审计激活-语句级审计

♠ 1.语句级审计-例2

♠ 对登录进行审计:

--每一个与 ORACLE 连结的活动均审计

SQL>audit session;

--每一个与 ORACLE 连结成功的活动均审计 :

SQL>audit session whenever seccessfull;

--每一个与 ORACLE 连结不成功的活动均审计:

SQL>audit session whenever not seccessfull;

. . . . . .

Page 21: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

21/115 2012/2/27

审计激活-权限审计

♠ 2.权限审计-数据库活动审计

♠ 进行过create any cluster,drop any cluster,create any index,create procedure的操作进行审计 …

♠ 以监视各用户使用Oracle资源的情况

[no]audit {<stat> [, …] | <system_priv> [, …] } [by <user> [, …]] [by {session | access}] [whenever [not] successful];

其中:

system_priv表示Oracle系统权限;

by <user> 表示按照用户来登记;

by session|access 表示按照会话或访问来登记;

whenever [not] successful表示无论成功与否。

Page 22: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

22/115 2012/2/27

审计激活-权限审计

♠ 2.权限审计-例1

♠ 希望将ALTER TABLESPACE权限授予所有的DBA,但希望在发生这种情况时生成审计记录:

♠ 每次成功使用ALTER TABLESPACE权限时,都会将一行内容添加到SYS.AUD$。

SQL> audit alter tablespace by access whenever successful;

Audit succeeded.

Page 23: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

23/115 2012/2/27

审计激活-权限审计

♠ 2.权限审计-例2

♠ 权限审计主要用于:序列使用审计、执行存储过程的审计、查询表的审计等:

--任何语句使用序列就审计,则:

GRANT privilege ON sequence ;

REVOKE privilege ON sequence ;

--执行存储过程审计,则:

AUDIT EXECUTE PROCEDURE audits

--查询表就审计,则:

SELECT FROM table/view/materialized view;

Page 24: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

24/115 2012/2/27

审计激活-对象审计

♠ 3.对象审计:

♠ 对象审计就是指任何用户对表的操作都可以进行审计

♠ 审计的语句如下:

[no]audit <stat> [, …] on {<object> | default} [by {session | access} ] [whenever [not] successful];

其中:

<object> 表示要审计的对象;

by <user> 表示按照用户来登记;

by session|access 表示按照会话或访问来登记, By session多次作同一操作只记录一次;如用户对emp表作了四次Update,则只记录一次。By access 表示每此操作均记录。

whenever [not] successful表示无论成功与否。

Page 25: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

25/115 2012/2/27

审计激活-对象审计

♠ 3.对象级审计-例1

♠ 对某个用户的某个对象设置审计:

--对EMP表插入就审计

audit insert on scott.emp;

--对EMP表查询、插入、修改、删除都审计

audit all on scott.dept; /* all=select ,insert,update, delete */

--连续对EMP表进行删除多次只登记一次(按照会话登记)

audit delete on scott.depart by access;

--

--方式查询都要审计(不管是否成功):

--

AUDIT SELECT ON scott.emp WHENEVER NOT SUCCESSFUL;

AUDIT SELECT ON scott.emp WHENEVER SUCCESSFUL;

Page 26: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

26/115 2012/2/27

审计用户-对象审计

♠ 3.对象级审计-例2

♠ 1)创建用户与授权:

CONNECT sys/password AS SYSDBA

CREATE USER audit_test IDENTIFIED BY password

DEFAULT TABLESPACE users

TEMPORARY TABLESPACE temp

QUOTA UNLIMITED ON users;

GRANT connect TO audit_test;

GRANT create table, create procedure TO audit_test;

Page 27: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

27/115 2012/2/27

审计用户-对象审计

♠ 3.对象级审计-例2

♠ 2)创建用户并设置审计:

CONNECT sys/password AS SYSDBA

AUDIT ALL BY audit_test BY ACCESS;

AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE,

DELETE TABLE BY audit_test BY ACCESS;

AUDIT EXECUTE PROCEDURE BY audit_test BY ACCESS;

Page 28: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

28/115 2012/2/27

审计用户-对象审计

♠ 3.对象级审计-例2

♠ 3)操作,在观察审计信息:

CONN audit_test/password

CREATE TABLE test_tab ( id NUMBER );

INSERT INTO test_tab (id) VALUES (1);

UPDATE test_tab SET id = id;

SELECT * FROM test_tab;

DELETE FROM test_tab;

DROP TABLE test_tab;

Page 29: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

29/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 30: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

30/115 2012/2/27

审计信息查询-简单查询

♠ 审计信息在AUD$

♠ 查询AUD$表得到审计信息:

select userid,userhost,terminal,obj$name,obj$creator,

ses$actions from aud$;

USERID USERHOST TERMINAL OBJ$NAME OBJ$CREATO

SES$ACTIONS

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

USER1 Windows PC ACITEM USER1 -------S---

USER1 Windows PC ACITEM USER1

SYSTEM ttyq1

USER1 Windows PC

USER1 Windows PC ACITEM USER1 ------S---

Page 31: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

31/115 2012/2/27

审计信息查询-IP地址

♠ AUD$ 表的详细

♠ AUD$的结构:

SQL> desc AUD$

名称 是否为空? 类型

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

SESSIONID NOT NULL NUMBER

ENTRYID NOT NULL NUMBER

STATEMENT NOT NULL NUMBER

TIMESTAMP# DATE

USERID VARCHAR2(30)

USERHOST VARCHAR2(128)

TERMINAL VARCHAR2(255)

ACTION# NOT NULL NUMBER

RETURNCODE NOT NULL NUMBER

OBJ$CREATOR VARCHAR2(30)

OBJ$NAME VARCHAR2(128)

AUTH$PRIVILEGES VARCHAR2(16)

AUTH$GRANTEE VARCHAR2(30)

NEW$OWNER VARCHAR2(30)

NEW$NAME VARCHAR2(128)

SES$ACTIONS VARCHAR2(19)

SES$TID NUMBER

LOGOFF$LREAD NUMBER

LOGOFF$PREAD NUMBER

LOGOFF$LWRITE NUMBER

LOGOFF$DEAD NUMBER

LOGOFF$TIME DATE

COMMENT$TEXT VARCHAR2(4000)

CLIENTID VARCHAR2(64)

SPARE1 VARCHAR2(255)

SPARE2 NUMBER

OBJ$LABEL RAW(255)

SES$LABEL RAW(255)

PRIV$USED NUMBER

SESSIONCPU NUMBER

NTIMESTAMP# TIMESTAMP(6)

PROXY$SID NUMBER

USER$GUID VARCHAR2(32)

INSTANCE# NUMBER

PROCESS# VARCHAR2(16)

XID RAW(8)

AUDITID VARCHAR2(64)

SCN NUMBER

DBID NUMBER

SQLBIND CLOB

SQLTEXT CLOB

OBJ$EDITION VARCHAR2(30)

Page 32: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

32/115 2012/2/27

审计信息查询- IP地址

♠ 审计信息在AUD$

♠ col SPARE1 = OS 用户名

♠ col RETURNCODE = ora-xxxx 代码

♠ col TERMINAL = terminal 终端名称

♠ col COMMENT$TEXT = IP 和 客户port - 有用!

♠ 从AUD$抽出IP地址:

select userid, terminal, spare1, substr(s1,1,instr(s1,')')-1) IP,

returncode, timestamp#

from

(select A.*, substr(comment$text,instr(comment$text,'HOST=')+5,100) s1

from aud$ a where action# in (100,101) )

order by IP;

Page 33: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

33/115 2012/2/27

审计信息查询- IP地址

♠ 从AUD$抽出IP地址

♠ 输出的样例:

USERID TERMINAL SPARE1 IP RETURNCODE TIMESTAMP#

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

HERS MARS apacheco 128.103.231.86 0 02/24/2004 3:08:36 PM

HERS oracle 128.103.231.86 0 01/25/2004 11:14:11 AM

EREQ_USER MRUTENBUR mrutenburg 140.247.10.130 0 01/30/2004 4:42:52 PM

BULKLOAD CJTRU cjtru 140.247.10.132 0 02/05/2004 4:26:41 PM

BULKLOAD ttyp3 oracle 140.247.10.132 0 02/09/2004 10:42:13 AM

SYS ttyp3 oracle 140.247.10.132 0 02/09/2004 11:55:56 AM

BULKLOAD ROBIN michael 140.247.10.135 0 01/29/2004 7:59:49 AM

SYSTEM JB Jen?Braster 140.247.10.135 0 01/28/2004 8:34:31 PM

EREQ_USER JB Jen?Braster 140.247.10.135 0 01/28/2004 8:39:07 PM

Page 34: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

34/115 2012/2/27

审计信息查询- IP地址

♠ 识别 ora-XXXX,登录失败

♠ 一般returncodes:

♠ 0 – successful

♠ 1017 – invalid username/password

♠ 1005 – null password given

♠ 1035 – RESTRICTED SESSION enabled

♠ 对于ora-1017s,可加 “where” 来限制查询条件

Page 35: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

35/115 2012/2/27

审计信息查询- IP地址

♠ 创建一个预期连接的IP地址表

♠ 对非属于预期的IP地址的企图连接进行告警

♠ 根据创建一个VPN终端连接表 (如140.247.10/11.0/255),

查询其他非VPN的终端和用户

Page 36: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

36/115 2012/2/27

审计信息查询- IP地址

♠ IP地址检查

♠ 查询脚本:

select * from (

select userid, terminal, spare1, substr(s1,1,instr(s1,')')-1) IP,

k.hostname, str.returncode, count(*) from

(select A.*, substr(comment$text,instr(comment$text,'HOST=')+5,100) s1

from aud$ a

) str, system.known_ips k

where 1=1

and (substr(s1,1,instr(s1,')')-1) not in (select ip from system.known_ips)

and NOT ( (substr(s1,1,instr(s1,')')-1) like '140.247.10%'

OR substr(s1,1,instr(s1,')')-1) like '140.247.11%' )

AND str.terminal in (select terminal from system.known_terminals)

)

)

and str.terminal NOT in (select terminal from system.known_terminals)

and substr(s1,1,instr(s1,')')-1)=k.ip(+)

and timestamp# > sysdate-20

group by userid, terminal, spare1, substr(s1,1,instr(s1,')')-1), hostname, returncode

) where IP not like '140.247.164.%' and IP not in ('140.247.232.22','140.247.232.23')

order by IP

Page 37: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

37/115 2012/2/27

审计信息查询- IP地址

♠ IP地址检查

♠ 查询脚本输出的结果:

USERID TERMINAL SPARE1 IP RETURNCOD

COUNT(*)

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

SYS unknown n_user 140.247.10.149 0 1

UTILITY LOKI dfaux 140.247.10.150 0 1

BULKLOAD CLIENT1 kyu 140.247.11.20 0 3

SYS ttyp2 oracle 140.247.11.20 0 1

SYS ttyp2 oracle 140.247.11.20 1017 1

ASPERIN CLIENT1 kyu 140.247.11.9 0 5

HR_DATACLIENT1 kyu 140.247.11.9 0 8

FIN_OFFIC UHALL-TEMP5 hadass 140.247.70.24 0 7

FIN_OFFIC IBM-5F0826A1BDE nasson 140.247.70.28 0 5

FIN_OFFIC IBM-5F0826A1BDE nasson 140.247.70.28 1017 4

Page 38: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

38/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 39: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

39/115 2012/2/27

审计的管理

♠ 审计带来的问题:

♠ 问题: AUD$ 在 SYSTEM 表空间

♠ 如果AUDIT SESSION 启用, 简单的工具就是将

SYSTEM 灌满就导致系统停机

♠ 忽略 AUD$ 会带来同样问题

♠ 解决: 监控 AUD$大小

Page 40: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

40/115 2012/2/27

审计的管理

♠ 创建审计数据归档表

♠ 创建system.aud$_bu表:

drop table system.aud$_bu;

create table system.aud$_bu

tablespace tools

as (select * from sys.aud$ where 1=2);

drop table system.aud$_prev_quarter;

create table system.aud$_prev_quarter

tablespace tools

as (select * from sys.aud$ where 1=2);

Page 41: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

41/115 2012/2/27

审计的管理

♠ 创建审计数据归档表

♠ 创建system.aud$_bu表:

drop table procedure quarterly_rotation is

/* Procedure quarterly_rotation

* Cleans out table system.aud$_prev_quarter

* and repopulates it with the previous quarter's worth of audit info

* Should be scheduled to run every quarter */

begin

commit;

set transaction use rollback segment rbs_bulk;

delete from system.aud$_prev_quarter;

insert into system.aud$_prev_quarter

( select * from sys.aud$ au

where au.timestamp# < trunc(sysdate,'Q'));

delete from sys.aud$ where timestamp# < trunc(sysdate,'Q') ;

commit;

end quarterly_rotation;;

--

create table system.aud$_bu

tablespace tools

as (select * from sys.aud$ where 1=2);

--

drop table system.aud$_prev_quarter;

--

create table system.aud$_prev_quarter

tablespace tools

as (select * from sys.aud$ where 1=2);

Page 42: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

42/115 2012/2/27

审计的管理

♠ 使用dbms_system.kdswrt()

♠ 使用内置包处理:

delete from sys.aud$ where timestamp# < trunc(sysdate,'Q') ;

commit;

sys.dbms_system.ksdwrt(3,'ORA-AUDIT TRAIL: Quarterly rotation

COMPLETE');

sys.dbms_system.ksdwrt(3,'ORA-AUDIT TRAIL: This message brought to

you by sys.manage_aud$');

end quarterly_rotation ;

Page 43: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

43/115 2012/2/27

审计的管理

♠ 检查AUD$的大小

♠ 检查AUD$ 过大,可删除部分数据:

procedure

keep_size_in_check

is

rowCount number;

begin

select count(*) into rowCount from sys.aud$ ;

if rowCount > 50000

then

commit;

set transaction use rollback segment rbs_bulk;

insert into system.aud$_bu (select * from sys.aud$);

delete from sys.aud$ ;

commit;

sys.dbms_system.ksdwrt (3,'ORA-AUDIT TRAIL: POSSIBLE DOS

ATTACK!!!! AUD$ rows moved to AUD$_BU');

end if;

end keep_size_in_check;

Page 44: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

44/115 2012/2/27

审计的管理

♠ 检查AUD$的大小

♠ 定时进行检查:

declare

myjob number;

begin

dbms_job.submit(myjob,

what => ‘manage_aud$.keep_size_in_check;’,

interval => ‘trunc(sysdate)+1/96’);

End;

Page 45: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

45/115 2012/2/27

审计的管理

♠ 限制审计数据增长

♠ 自动记录信息到数据字典或OS文件中

♠ 占用很多SYSTEM表空间

♠ 经常清除审计信息 :

--定期对审计数据进行维护,如:

--删除对EMP表的审计的数据

delete from sys.aud$ where obj$name='EMP';

Page 46: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

46/115 2012/2/27

审计的管理

♠ 限制审计数据增长

♠ 如果审计数据过快增长,可用exp备份;

♠ 再用TRUNCATE清除审计数据 :

--如需保留审计信息,用exp备份或考贝一份;

--以sys登录到sql>;

SQL>connect as sysdba

--用truncate命令删除sys.aud$;

SQL>TRUNCATE TABLE sys.aud$;

Page 47: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

47/115 2012/2/27

审计的管理

♠ 取消某些审计:

♠ 如果某些审计不必要,可取消审计;

♠ 取消审计的语句是NOAUDIT ,如:

--以sysdba关闭审计

SQL> conn /as sysdba

NOAUDIT session; --取消会话登录审计

NOAUDIT session BY SCOTT; -- 取消SCOTT会话登录审计

NOAUDIT DELETE ANY TABLE;

NOAUDIT SELECT TABLE, INSERT TABLE, DELETE

TABLE,EXECUTE PROCEDURE;

NOAUDIT ALL; -- 取消所有statement审计

NOAUDIT ALL PRIVILEGES; -- 取消所有权限审计

NOAUDIT ALL ON DEFAULT; -- 取消所有对象审计

Page 48: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

48/115 2012/2/27

审计的管理

♠ 取消整个Oracle数据库审计:

♠ 如果审计带来负面问题过多,且不必要启用审计时可取消审计;

♠ 修改审计参数可实现取消审计的启用 :

--以sysdba关闭审计

SQL> conn /as sysdba

SQL> show parameter audit

SQL> alter system set audit_trail=none;

Page 49: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

49/115 2012/2/27

审计的管理-数据字典

♠ Oracle 系统审计有关数据字典:

♠ STMT_AUDIT_OPTION_MAP --审计类型代码

♠ AUDIT_ACTIONS --审计动作描述

♠ ALL_DEF_AUDIT_OPTS --默认的审计对象

♠ DBA_STMT_AUDIT_OPTS --当前系统审计语句选件

♠ DBA_PRIV_AUDIT_OPTS --当前系统审计权限选件

♠ DBA_OBJ_AUDIT_OPTS --索引审计对象

♠ DBA_AUDIT_TRAIL --列出所有审计跟踪

♠ DBA_AUDIT_OBJECT --包含所有对象的审计记录

♠ DBA_AUDIT_SESSION --列出审计记录(含 CONNECT等)

♠ DBA_AUDIT_STATEMENT --列出审计记录(含GRANT, REVOKE等)

♠ DBA_AUDIT_EXISTS --列出AUDIT EXISTS / AUDIT NOT EXISTS

的信息

Page 50: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

50/115 2012/2/27

审计的管理-数据字典

♠ Oracle 系统审计数据字典-查询:

♠ AUDIT_ACTIONS --包含审计跟踪动作类型代码的描述,例如INSERT、DROP VIEW、DELETE、LOGON和LOCK

♠ 关键列:Action(动作的数字代码)和Name(动作或命令的名称)。Action 列和Name 列对应于USER_AUDIT_TRAIL视图中的Action 列和Action_Name 列。

--以sysdba关闭审计

--谁正在访问数据库?

Select c.sid, c.serial#,c.username,a.object_id,b.object_name,

c.program,c.status,d.name,c.osuser

from v$Locked_object a,

All_objects b,

v$session c,

audit_actions d

where a.object_id=b.object_id

and a.session_id =c.sid(+)

and c.command=d.action;

Page 51: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

51/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 52: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

52/115 2012/2/27

SYS帐户的审计

♠ 特殊的SYS帐户:

♠ 默认的审计对SYS用户不起作用;

♠ 要对SYS用户审计,要另外设置相关的参数 ;

♠ 设置AUDIT_TRAIL=OS ;

♠ 设置AUDIT_SYS_OPERATIONS = TRUE ;

♠ 系统忽略AUDIT_TRAIL 参数时,对SYS的审计的信息不是写到SYS.AUD$,而是对SYS的审计信息写到操作系统下。

Page 53: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

53/115 2012/2/27

对SYS审计的设置

♠ 设置审计SYS用户步骤:

♠ 1.设置相关参数:

--设置audit_trail参数

SQL> alter system set audit_trail=OS scope=spfile;

System altered.

--设置AUDIT_SYS_OPERATIONS参数

SQL> show parameter AUDIT_SYS_OPERATIONS

NAME TYPE VALUE

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

audit_sys_operations boolean FALSE

SQL> alter system set AUDIT_SYS_OPERATIONS = true scope=spfile;

System altered.

Page 54: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

54/115 2012/2/27

对SYS审计的设置

♠ 设置审计SYS用户步骤:

♠ 2.关闭数据库实例,使参数生效:

--关闭数据库实例

SQL> connect sys/ORACLE@ora10 as sysdba

Connected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

Page 55: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

55/115 2012/2/27

对SYS审计的设置

♠ 设置审计SYS用户步骤:

♠ 3.重启动数据库实例和设置审计:

--启动数据库实例

SQL> startup

--设置审计

SQL> audit all privileges;

Audit succeeded.

--修改用户口令操作,使产生审计信息

SQL> alter user scott identified by scott;

User altered.

Page 56: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

56/115 2012/2/27

对SYS审计信息的查看

♠ 查看对SYS审计的信息步骤:

♠ 4.点“我的电脑”=>选择“文件”=>点“控制面板”=>“管理工具”=>“事件查看器”

Page 57: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

57/115 2012/2/27

对SYS审计信息的查看

♠ 查看对SYS审计的信息步骤:

♠ 在 “管理工具”中选择“事件查看器”进入如图:

Page 58: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

58/115 2012/2/27

对SYS审计信息的查看

♠ 查看对SYS审计的信息步骤:

♠ “事件查看器”画面后,选择“应用程序”=》选中某行数据=>点右键=>选“属性”进入当前行数据的详细说明,如图 。

Page 59: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

59/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 60: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

60/115 2012/2/27

Oracle 10g R2审计

♠ Oracle 10g R2 审计:

♠ 从Oracle 10g R2版本后,允许将审计数据以XML格式写到操作系统路径下 ;

♠ 要设置下面两个参数:

♠ audit_file_dest = '/auditfs'

♠ audit_trail = xml

♠ 此二参数不能动态设置,所以要重启动数据库实例

♠ 默认下指到$ORACLE_HOME/rdbms/audit目录下。

Page 61: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

61/115 2012/2/27

Oracle 10g R2审计

♠ Oracle 10g R2 审计-XML格式:

♠ 1.显示当前参数:

SQL> show parameter audit_file_dest

NAME TYPE VALUE

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

audit_file_dest string E:\ORACLE\PRODUCT\10.2.0\ADMIN\ORA10\ADUMP

SQL> conn /as sysdba

已连接。

SQL> show parameter audit_trail

NAME TYPE VALUE

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

audit_trail string NONE

SQL> alter system set audit_trail=XML scope=spfile;

系统已更改。

Page 62: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

62/115 2012/2/27

Oracle 10g R2审计

♠ Oracle 10g R2 审计-XML格式:

♠ 2.重启动实例,使参数生效:

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 364904448 bytes

Fixed Size 1248984 bytes

Variable Size 218104104 bytes

Database Buffers 134217728 bytes

Redo Buffers 11333632 bytes

数据库装载完毕。

数据库已经打开。

SQL> show parameter audit_trail

NAME TYPE VALUE

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

audit_trail string XML

Page 63: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

63/115 2012/2/27

Oracle 10g R2审计

♠ Oracle 10g R2 审计-XML格式:

♠ 3.设置审计:

SQL> audit alter user;

审计已成功。

SQL> conn system/zhaoabc

已连接。

SQL> alter user scott identified by zhaoabc;

用户已更改。

SQL>

Page 64: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

64/115 2012/2/27

10g 审计新功能

♠ 10g 审计:

♠ 10g审计以一种非常详细的级别捕获用户行为,可消除手动的、基于触发器的审计

♠ 跟踪update SCOTT.EMP set salary = 12000 where empno =

123456; 语句

♠ 9i审计只能捕获“谁”执行此操作,而不能捕获执行了“什么”内容

♠ 要了解被更新前数据只能用:

♠ 编写触发器来捕获更改前的值

♠ 用Log Miner从存档日志中检索出来

Page 65: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

65/115 2012/2/27

10g 审计新功能

♠ 10g 审计实现要点:

♠ 9i细粒度审计 (FGA) ,能够记录 SCN 号和行级的更改以重建旧的数据,但是它们只能用于 select 语句,而不能用于 DML,如 update、insert 和 delete 语句。

♠ 10g在FGA 上除了支持 select 语句外,还支持 DMA 语句。这些更改都记录在同一个位置,即表 FGA_LOG$ 中,并通过

DBA_FGA_AUDIT_TRAIL 视图显示出来

♠ 10g除了 DML 外,您现在可以选择只有在访问了所有或者甚至很少的相关的列后,才可以触发一个线索

Page 66: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

66/115 2012/2/27

10g 审计新功能

♠ 10g 审计样例 :

♠ 想跟踪对 Scott 所拥有的表 EMP 的所有更新,您可以发出如下命令:

♠ 任何用户每一次更新表 SCOTT.EMP 时,该命令都会把所有的更新记录到审计跟踪表 AUD$ 中,可以通过

DBA_AUDIT_TRAIL 视图来查看。

SQL> audit UPDATE on SCOTT.EMP by access;

SQL>

Page 67: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

67/115 2012/2/27

11g 审计新功能

♠ 10g 审计数据与存储路径 :

♠ 10g 及之前版本:

♠ Background Dump

Dest:<ORACLE_BASE>/admin/sid/bdump

♠ Core Dump Dest:<ORACLE_BASE>/admin/sid/cdump

♠ User Dump Dest:<ORACLE_BASE>/admin/sid/udump

♠ Audit Dump Dest:<ORACLE_BASE>/admin/sid/adump

Page 68: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

68/115 2012/2/27

11g 审计新功能

♠ 11g 审计数据与存储路径 :

♠ 数据库审计存放路径:<ORACLE_BASE>/diag/rdbms/<instance>/<sid>/trace

♠ Listener 存储路径:<ORACLE_BASE>/diag/tnslsnr/<instance>/<sid>/trace

Page 69: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

69/115 2012/2/27

11g 审计-dbms_audit_mgmt包

♠ 11g 包的用途 :

♠ 用于管理AUDIT_TRAIL’s

♠ 需要Oracle Audit Vault

♠ Initialize audit management infrastructure

♠ Move AUD$ and FGA_LOG$ tables to an other location

♠ Clean up AUDIT_TRAIL and create purge jobs

♠ Set AUDIT_TRAIL properties

Page 70: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

70/115 2012/2/27

11g 审计-dbms_audit_mgmt包

♠ 11g 包相关的视图 :

♠ DBA_AUDIT_MGMT_CLEANUP_JOBS

♠ DBA_AUDIT_MGMT_CLEAN_EVENTS

♠ DBA_AUDIT_MGMT_CONFIG_PARAMS

♠ DBA_AUDIT_MGMT_LAST_ARCH_TS

Page 71: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

71/115 2012/2/27

11g 审计新功能-dbms_audit_mgmt

♠ 11g 审计-使用包实现设置 :

♠ PL/SQL实现更容易控制

♠ 下面例子

Declare

att number :=dbms_audit_mgmt.audit_trail_all;

atp number :=dbms_audit_mgmt.os_file_max_age;

Begin

dbms_audit_mgmt.set_audit_trail_property(

att,atp, 60 );

dbms_audit_mgmt.clear_audit_trail_property(

att,atp,TRUE );

END;

/

Page 72: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

72/115 2012/2/27

11g 审计新功能-dbms_audit_mgmt

♠ 11g 审计-使用包实现设置 :

♠ PL/SQL 设置审计属性

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

audit_trail_type <valor>,

audit_trail_property <valor>,

audit_trail_property_value <valor>) ;

--

BEGIN

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS ,

audit_trail_property => DBMS_AUDIT_MGMT.OS_FILE_MAX_SIZE ,

audit_trail_property_value => 1024 );

END;

/

BEGIN

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

audit_trail_property => DBMS_AUDIT_MGMT.DB_DELETE_BATCH_SIZE,

audit_trail_property_value => 100 );

END;

/

Page 73: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

73/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 审计-审计文件的位置查找 :

♠ 审计产生的文件的搜索

11 | wc -l - Wie view *.aud Date...

find $ORACLE_BASE/admin/$ORACLE_SID/adump -ctime +7

-name "*.aud" -exec rm -f {}\; -ls

Page 74: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

74/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 管理审计数据 :

♠ 用包管理审计数据

select PARAMETER_NAME, PARAMETER_VALUE, AUDIT_TRAIL

from DBA_AUDIT_MGMT_CONFIG_PARAMS

where audit_trail = 'STANDARD AUDIT TRAIL';

PARAMETER_NAME PARAMETER_VALUE AUDIT_TRAIL

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

DB AUDIT TABLESPACE SYSTEM STANDARD AUDIT TRAIL

DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL

select OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME

from DBA_SEGMENTS where SEGMENT_NAME='AUD$';

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME

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

SYS AUD$ TABLE SYSTEM

Page 75: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

75/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 管理审计数据

♠ 审计存储的路径

♠ 移动到新路径(New situation / location of AUD$):

exec DBMS_AUDIT_MGMT.INIT_CLEANUP(AUDIT_TRAIL_TYPE =>

DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, DEFAULT_CLEANUP_INTERVAL =>

12 /

*hours*/);

select PARAMETER_NAME, PARAMETER_VALUE, AUDIT_TRAIL

from DBA_AUDIT_MGMT_CONFIG_PARAMS

where audit_trail = 'STANDARD AUDIT TRAIL';

PARAMETER_NAME PARAMETER_VALUE AUDIT_TRAIL

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

DB AUDIT TABLESPACE SYSAUX STANDARD AUDIT TRAIL

DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL

DEFAULT CLEAN UP INTERVAL 12 STANDARD AUDIT TRAIL

select OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME

from DBA_SEGMENTS where SEGMENT_NAME='AUD$';

OWNER SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME

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

SYS AUD$ TABLE SYSAUX

Page 76: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

76/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 管理审计数据

♠ Move AUD$ to a new location

♠ Define a archive timestamp:

BEGIN

DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(

AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,

AUDIT_TRAIL_LOCATION_VALUE => 'AUDIT_DATA');

END;

/

BEGIN

DBMS_AUDIT_MGMT. SET_LAST_ARCHIVE_TIMESTAMP(

AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

LAST_ARCHIVE_TIME =>

TO_TIMESTAMP('27-09-2010 23:29:10','DD-MM-YYYY HH24:MI:SS'));

END;

/

Page 77: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

77/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 管理审计数据

♠ Audit records for create session

♠ Purge audit records before archive timestamp:

select USERNAME,ACTION_NAME,EXTENDED_TIMESTAMP ,RETURNCODE

from DBA_AUDIT_SESSION order by EXTENDED_TIMESTAMP;

USERNAME ACTION_NAME EXTENDED_TIMESTAMP RETURNCODE

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

HR LOGON 27-SEP-10 11.28.28.036902 PM +00:00 1017

SCOTT LOGON 27-SEP-10 11.28.34.302721 PM +00:00 0

SCOTT LOGOFF 27-SEP-10 11.28.39.540208 PM +00:00 0

SCOTT LOGON 27-SEP-10 11.30.13.632495 PM +00:00 0

SCOTT LOGOFF 27-SEP-10 11.30.18.094916 PM +00:00 0

HR LOGON 27-SEP-10 11.30.18.116640 PM +00:00 28000

8 rows selected.

DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(

AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

USE_LAST_ARCH_TIMESTAMP => TRUE);

END;

/

Page 78: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

78/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 审计数据自动清除

♠ Setup a automatic clean job

♠ Clean job as defined above:

BEGIN

DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(

AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,

AUDIT_TRAIL_PURGE_INTERVAL => 24 /* hours */,

AUDIT_TRAIL_PURGE_NAME => 'Daily_Purge_Job',

USE_LAST_ARCH_TIMESTAMP => TRUE);

END;

/

select JOB_NAME,JOB_STATUS,AUDIT_TRAIL,JOB_FREQUENCY

from DBA_AUDIT_MGMT_CLEANUP_JOBS;

JOB_NAME JOB_STAT AUDIT_TRAIL JOB_FREQUENCY

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

DAILY_PURGE_JOB ENABLED STANDARD AUDIT TRAIL

FREQ=HOURLY;INTERVAL=24

Page 79: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

79/115 2012/2/27

11g 审计-dbms_audit_mgmt

♠ 11g 审计数据自动清除

♠查询作业信息 :

SELECT owner "Dueno" ,

job_name "Nombre job",

state "Estado" ,

run_count "Num exec" ,

system "Es de sistema" ,

repeat_interval "Intervalo"

FROM DBA_SCHEDULER_JOBS

WHERE job_name like 'ELIMINA1'

Dueno ;Nombre job ;Estado ; Num exec;Es de sistema ;Intervalo

-------;--------------;----------;---------;---------------;-----------------------------

SYS ;ELIMINA1 ;SCHEDULED ; 2;TRUE ;FREQ=HOURLY;INTERVAL=1

SQL> exec dbms_audit_mgmt.create_purge_job

( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD ,

audit_trail_purge_interval => 1 ,

audit_trail_purge_name => 'ELIMINA1' ,

use_last_arch_timestamp => FALSE );

Page 80: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

80/115 2012/2/27

11g 审计新功能-dbms_audit_mgmt

♠ 11g 审计-使用包实现设置 :

♠ PL/SQL实现删除作业

DBMS_AUDIT_MGMT.DROP_PURGE_JOB(audit_trail_purge_name

=> 'Nombre job' ) ;

Page 81: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

81/115 2012/2/27

11g 审计需要注意的问题

♠ 不能对 SYS 审计进行管理,如果设置

♠ AUDIT_SYS_OPERATION

♠ 不能发生审计记录信息到:

♠ SYSLOG

♠ Windows Event Log

♠ 有几个Bug 需要修正 (11.2.0.2)

♠ SET_AUDIT_TRAIL_LOCATION 不许移动LOB段

♠ 审计数据达 1k前不能切换文件 (FILE_MAXSIZE 不能设置)

♠ CLEAN_AUDIT_TRAIL 将在 adx_sid.txt进行整改清除

♠ 当 AUDIT_TRAIL=OS 带有大写 ORACLE_SID时,

CLEAN_AUDIT_TRAIL不能工作

Page 82: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

82/115 2012/2/27

dbms_audit_mgmt与旧版本

♠ Oracle 11g R2 DBMS_AUDIT_MGMT 可用

♠ 11g 稍旧的版本,需要安装补丁:

♠ 11.1.0.7 DBMS_AUDIT_MGMT

♠ 10.2.0.5 DBMS_AUDIT_MGMT

♠ 10.2.0.4 Patch 6996030

♠ 10.2.0.3 Patch 6989148

♠ DBMS_AUDIT_MGMT 包不支持 9.2.0.x 与 10.1.0.x

Page 83: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

83/115 2012/2/27

10g 安装dbms_audit_mgmt包

♠ 11g 审计数据自动清除

♠ 下面是整个过程 :

[oracle@oracle11g OPatch]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Mon Mar 15 06:54:48 2010

Copyright (c) 1982, 2007, Oracle. All Rights Reserved.

SQL> conn / as sysdba

Connected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> quit

Page 84: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

84/115 2012/2/27

10g 安装dbms_audit_mgmt包

♠ 11g 审计数据自动清除

♠ 下面是整个过程 :

export PATH=$PATH:/u01/app/oracle/product/10.2.0/db_1/OPatch

[oracle@oracle11g parche_AUDIT_TRAIL_CLEAN]$ unzip p6996030_10204_Linuxx86.

zip

Archive: p6996030_10204_Linux-x86.zip

creating: 6996030/

creating: 6996030/files/

creating: 6996030/files/lib/

creating: 6996030/files/lib/libserver10.a/

inflating: 6996030/files/lib/libserver10.a/aud.o

inflating: 6996030/files/lib/libserver10.a/kspare.o

inflating: 6996030/files/lib/libserver10.a/kza.o

inflating: 6996030/files/lib/libserver10.a/kzam.o

inflating: 6996030/files/lib/libserver10.a/kzax.o

inflating: 6996030/files/lib/libserver10.a/kzft.o

inflating: 6996030/files/lib/libserver10.a/psdsys.o

inflating: 6996030/files/lib/libserver10.a/szaud.o

inflating: 6996030/files/lib/libserver10.a/zlle.o

creating: 6996030/files/rdbms/

creating: 6996030/files/rdbms/admin/

inflating: 6996030/files/rdbms/admin/catamgt.sql

inflating: 6996030/files/rdbms/admin/catlbacs.sql

inflating: 6996030/files/rdbms/admin/catnools.sql

inflating: 6996030/files/rdbms/admin/dbmsamgt.sql

inflating: 6996030/files/rdbms/admin/prvtamgt.plb

creating: 6996030/etc/

creating: 6996030/etc/config/

inflating: 6996030/etc/config/inventory

inflating: 6996030/etc/config/actions

creating: 6996030/etc/xml/

inflating: 6996030/etc/xml/GenericActions.xml

inflating: 6996030/etc/xml/ShiphomeDirectoryStructure.xml

inflating: 6996030/README.txt

Page 85: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

85/115 2012/2/27

10g 安装dbms_audit_mgmt包

♠ 11g 审计数据自动清除

♠下面是整个过程 : [oracle@oracle11g 6996030]$ opatch apply

Invoking OPatch 10.2.0.4.2

Oracle Interim Patch Installer version 10.2.0.4.2

Copyright (c) 2007, Oracle Corporation. All rights reserved.

Directorio RaÃ-z de Oracle : /u01/app/oracle/product/10.2.0/db_1

Inventario Central: /u01/app/oracle/oraInventory

de : /etc/oraInst.loc

Versión de OPatch : 10.2.0.4.2

Versión de OUI : 10.2.0.4.0

Ubicación de OUI : /u01/app/oracle/product/10.2.0/db_1/oui

Ubicación de Archivo Log :

/u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2010-03-15_06-54-22AM.log

ApplySession aplicando el parche temporal '6996030' al directorio raÃ-z de Oracle

'/u01/app/oracle/product/10.2.0/db_1'

Running prerequisite checks...

Prerequisite check "CheckActiveFilesAndExecutables" failed.

The details are:

Following executables are active :

/u01/app/oracle/product/10.2.0/db_1/bin/oracle

ApplySession failed during prerequisite checks: Prerequisite check

"CheckActiveFilesAndExecutables" failed.

Sistema intacto, OPatch no intentará restaurar el sistema

OPatch failed with error code 74

[oracle@oracle11g 6996030]$ opatch apply

Invoking OPatch 10.2.0.4.2

Oracle Interim Patch Installer version 10.2.0.4.2

Copyright (c) 2007, Oracle Corporation. All rights reserved.

Directorio RaÃ-z de Oracle : /u01/app/oracle/product/10.2.0/db_1

Inventario Central: /u01/app/oracle/oraInventory

de : /etc/oraInst.loc

Versión de OPatch : 10.2.0.4.2

Versión de OUI : 10.2.0.4.0

Ubicación de OUI : /u01/app/oracle/product/10.2.0/db_1/oui

Ubicación de Archivo Log :

/u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2010-03-15_06-55-09AM.log

ApplySession aplicando el parche temporal '6996030' al directorio raÃ-z de Oracle

'/u01/app/oracle/product/10.2.0/db_1'

Running prerequisite checks...

Prerequisite check "CheckActiveFilesAndExecutables" failed.

The details are:

Following executables are active :

/u01/app/oracle/product/10.2.0/db_1/bin/oracle

ApplySession failed during prerequisite checks: Prerequisite check

"CheckActiveFilesAndExecutables" failed.

Sistema intacto, OPatch no intentará restaurar el sistema

OPatch failed with error code 74

[oracle@oracle11g 6996030]$ opatch apply

Invoking OPatch 10.2.0.4.2

Oracle Interim Patch Installer version 10.2.0.4.2

Copyright (c) 2007, Oracle Corporation. All rights reserved.

Directorio RaÃ-z de Oracle : /u01/app/oracle/product/10.2.0/db_1

Inventario Central: /u01/app/oracle/oraInventory

de : /etc/oraInst.loc

Versión de OPatch : 10.2.0.4.2

Page 86: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

86/115 2012/2/27

10g 安装dbms_audit_mgmt包

♠ 11g 审计数据自动清除

♠ 下面是整个过程 :

Versión de OUI : 10.2.0.4.0

Ubicación de OUI : /u01/app/oracle/product/10.2.0/db_1/oui

Ubicación de Archivo Log :

/u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2010-03-15_06-55-32AM.log

ApplySession aplicando el parche temporal '6996030' al directorio raÃ-z de Oracle

'/u01/app/oracle/product/10.2.0/db_1'

Running prerequisite checks...

OPatch ha detectado un directorio raÃ-z de Oracle de no cluster del inventario y sólo

aplicará un parche al sistema local.

Please shutdown Oracle instances running out of this ORACLE_HOME on the local system.

(Oracle Home = '/u01/app/oracle/product/10.2.0/db_1')

Is the local system ready for patching? [y|n]

y

User Responded with: Y

Realizando copia de seguridad de los archivos e inventario (no para rollback automático)

del directorio raÃ-z de Oracle

Realizando copia de seguridad de los archivos afectados por el parche '6996030' para

restauración. Tardará unos minutos...

Realizando copia de seguridad de los archivos afectados por el parche '6996030' para

rollback. Tardará unos minutos...

Aplicando parche a componente oracle.rdbms, 10.2.0.4.0...

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/aud.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/kspare.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/kza.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/kzam.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/kzax.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/kzft.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/psdsys.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/szaud.o"

Actualizando el archivo de almacenamiento

"/u01/app/oracle/product/10.2.0/db_1/lib/libserver10.a" con "lib/libserver10.a/zlle.o"

Copiando archivo en "/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/catamgt.sql"

Copiando archivo en "/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/catlbacs.sql"

Copiando archivo en "/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/catnools.sql"

Copiando archivo en "/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/dbmsamgt.sql"

Copiando archivo en "/u01/app/oracle/product/10.2.0/db_1/rdbms/admin/prvtamgt.plb"

Ejecutando la utilidad make para el destino ioracle

ApplySession agregando el parche temporal '6996030' al inventario

Verifying the update...

Inventory check OK: Patch ID 6996030 is registered in Oracle Home inventory with proper

meta-data.

Files check OK: Files from Patch ID 6996030 are present in Oracle Home.

El sistema local tiene parches y se puede reiniciar.

OPatch succeeded.

Page 87: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

87/115 2012/2/27

10g 安装dbms_audit_mgmt包

♠ 11g 审计数据自动清除

♠ 下面是整个过程 :

SQL> @?/rdbms/admin/catamgt.sql

SQL> @?/rdbms/admin/dbmsamgt.sql

SQL> @?/rdbms/admin/ prvtamgt.plb

[oracle@oracle11g OPatch]$ ./opatch lsinventory

Invoking OPatch 10.2.0.4.2

Oracle Interim Patch Installer version 10.2.0.4.2

Copyright (c) 2007, Oracle Corporation. All rights reserved.

Directorio RaÃ-z de Oracle : /u01/app/oracle/product/10.2.0/db_1

Inventario Central: /u01/app/oracle/oraInventory

de : /etc/oraInst.loc

Versión de OPatch : 10.2.0.4.2

Versión de OUI : 10.2.0.4.0

Ubicación de OUI : /u01/app/oracle/product/10.2.0/db_1/oui

Ubicación de Archivo Log :

/u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/opatch2010-03-15_07-08-20AM.log

Lsinventory Output file location :

/u01/app/oracle/product/10.2.0/db_1/cfgtoollogs/opatch/lsinv/lsinventory2010-03-15_07-08-

20AM.txt

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

Productos de nivel superior instalados (2):

Oracle Database 10g 10.2.0.1.0

Oracle Database 10g Release 2 Patch Set 3 10.2.0.4.0

Hay 2 productos instalados en este directorio raÃ-z de Oracle.

Parches temporales (1) :

Patch 6996030 : applied on Mon Mar 15 06:57:47 CLT 2010

Created on 21 Oct 2008, 06:57:58 hrs PST8PDT

Bugs fixed:

6964283, 6940487, 4740049, 6996030, 6954407, 6023472, 4085593, 6340297

6655588, 6726958

Page 88: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

88/115 2012/2/27

审计内容

♠ 审计概念

♠ 审计设置

♠ 审计的激活

♠ 审计数据的浏览

♠ 审计管理

♠ SYS审计

♠ 11g审计新功能

♠ 精细审计初步

Page 89: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

89/115 2012/2/27

精细的审计

♠ 标准的审计

♠ 可以轻松发现访问了哪些对象以及由谁访问,但无法知道访问了哪些行或列

♠ 精细审计( Fine Grained Auditing =FGA)

♠ Fine Grained Auditing 精细的设计或细粒度的审计

♠ 从Oracle9i开始引入细粒度的对象审计(简称FGA),审计变得更为关注某个方面和更为精确

♠ 使用程序包DBMS_FGA来建立特定表上的策略

Page 90: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

90/115 2012/2/27

精细的审计

♠ DBMS_FGA包有4个过程:

♠ 可使用DBMS_FGA包来指定表审计设置:

程序 功能

ADD_POLICY 添加使用谓词和审计列的审计策略

DROP_POLICY 删除审计策略

DISABLE_POLICY 禁用审计策略,但保留与表或视图关联的策略

ENABLE_POLICY 启用策略

Page 91: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

91/115 2012/2/27

精细的审计

♠ FGA 数据字典与视图:

♠ 精细审计产生的数据存储在 SYS 拥有的表

FGA_LOG$ 中

♠ DBA_FGA_AUDIT_TRAIL 是FGA_LOG$表上的一个视图

♠ 一般用户可直接查询DBA_FGA_AUDIT_TRAIL

视图即可

♠ DBA_AUDIT_POLICIES 记录审计策略

Page 92: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

92/115 2012/2/27

精细的审计

♠ FGA 数据字典与视图:

♠ DBA_FGA_AUDIT_TRAIL视图关键列

列名称 存储内容

SESSION_ID 审计会话标识符;与 V$SESSION 视图中的会话标识符不同

TIMESTAMP 审计记录生成时的时间标记

DB_USER 发出查询的数据库用户

OS_USER 操作系统用户

USERHOST 用户连接的机器的主机名

CLIENT_ID 客户标识符(由 dbms_session.set_identifier 设置)

Page 93: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

93/115 2012/2/27

精细的审计

♠ FGA 数据字典与视图:

♠ DBA_FGA_AUDIT_TRAIL视图关键列(续)

列名称 存储内容

EXT_NAME 外部认证的客户名称,如 LDAP 用户

OBJECT_SCHEMA 对该表的访问触发了审计的表所有者

OBJECT_NAME 对该表的 SELECT 操作触发了审计的表名称

POLICY_NAME 触发审计的策略名称(如果对表定义了多个策略,则每个策略将插入一条记录。在此情况下,该列显示哪些行是由哪个策略插入的)

SCN 记录了审计的 Oracle 系统更改号

SQL_TEXT 由用户提交的 SQL 语句

SQL_BIND 由 SQL 语句使用的绑定变量(如果存在)

Page 94: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

94/115 2012/2/27

精细的审计

♠ FGA 数据字典与视图:

♠ DBA_AUDIT_POLICIES-审计策略关键列

列名称 存储内容

OBJECT_SCHEM

A

对其定义了 FGA 策略的表或视图的所有者

OBJECT_NAME 表或视图的名称

POLICY_NAME 策略的名称 — 例如,ACCOUNTS_ACCESS

POLICY_TEXT 策略中的审计条件 ,例如 BALANCE >;= 11000

POLICY_COLUM

N

审计列 — 例如,BALANCE

ENABLED 如果启用则为 YES,否则为 NO

PF_SCHEMA 拥有策略处理器模块的模式(如果存在)

PF_PACKAGE 处理器模块的程序包名称(如果存在)

PF_FUNCTION 处理器模块的过程名称(如果存在)

Page 95: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

95/115 2012/2/27

精细的审计

♠ 精细审计-例子1

♠ 1.创建一个测试表:

CONN audit_test/password

CREATE TABLE emp (

empno NUMBER(4) NOT NULL,

ename VARCHAR2(10),

job VARCHAR2(9),

mgr NUMBER(4),

hiredate DATE,

sal NUMBER(7,2),

comm NUMBER(7,2),

deptno NUMBER(2)

);

INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Tim', 1);

INSERT INTO emp (empno, ename, sal) VALUES (9999, 'Larry',

50001);

COMMIT;

Page 96: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

96/115 2012/2/27

精细的审计

♠ 精细审计-例子1

♠ 2.以sysdba 设置审计:

--以sys登录到sql>;

SQL>connect as sysdba

BEGIN

DBMS_FGA.add_policy(

object_schema => 'AUDIT_TEST',

object_name => 'EMP',

policy_name => 'SALARY_CHK_AUDIT',

audit_condition => 'SAL > 50000',

audit_column => 'SAL');

END;

/

Page 97: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

97/115 2012/2/27

精细的审计

♠ 精细审计-例子1

♠ 3.以测试用户对被审计表进行操作:

--以测试用户登录到sql>;

CONN audit_test/password

SELECT sal FROM emp WHERE ename = 'Tim';

SELECT sal FROM emp WHERE ename = 'Larry';

Page 98: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

98/115 2012/2/27

精细的审计

♠ 精细审计-例子1

♠ 4.以SYS用户查询审计数据:

CONN sys/password AS SYSDBA

SELECT sql_text

FROM dba_fga_audit_trail;

SQL_TEXT

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

SELECT sal FROM emp WHERE ename = 'Larry'

1 row selected.

SQL>

Page 99: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

99/115 2012/2/27

精细的审计

♠ 精细审计-例子2

♠ 加条件的审计设置:

BEGIN

DBMS_FGA.add_policy(

object_schema => 'AUDIT_TEST',

object_name => 'EMP',

policy_name => 'SALARY_CHK_AUDIT',

audit_condition => 'SAL > 50000',

audit_column => 'SAL',

handler_schema => 'AUDIT_TEST',

handler_module => 'FIRE_CLERK',

enable => TRUE);

END;

/

Page 100: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

100/115 2012/2/27

精细的审计

♠ 清除精细审计数据

♠ 精细审计数据存放在FGA_LOG$中

♠ 可用下面方法清除:

-- 以sysdba连接:

CONN sys/password AS SYSDBA

TRUNCATE TABLE fga_log$;

--

SELECT sql_text FROM dba_fga_audit_trail;

no rows selected.

Page 101: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

101/115 2012/2/27

审计数据维护-归档方法

♠ 审计数据归档当AUD$(选自Natalka Roshak)

♠ SYSTEM.AUD$_BU

♠ SYSTEM.AUD$_PREV_QUARTER

drop table system.aud$_bu;

create table system.aud$_bu

tablespace tools

as (select * from sys.aud$ where 1=2);

drop table system.aud$_prev_quarter;

create table system.aud$_prev_quarter

tablespace tools

as (select * from sys.aud$ where 1=2);

Page 102: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

102/115 2012/2/27

审计数据维护-循环处理

♠ 审计数据处理PL/SQL程序

♠ 编写PL/SQL程序,如:

procedure quarterly_rotation

is

/* Procedure quarterly_rotation

* Cleans out table system.aud$_prev_quarter

* and repopulates it with the previous quarter's worth of audit info

* Should be scheduled to run every quarter

*/

begin

commit;

set transaction use rollback segment rbs_bulk;

delete from system.aud$_prev_quarter;

insert into system.aud$_prev_quarter

( select * from sys.aud$ au

where au.timestamp# < trunc(sysdate,'Q'));

delete from sys.aud$ where timestamp# < trunc(sysdate,'Q') ;

commit;

end quarterly_rotation;

Page 103: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

103/115 2012/2/27

审计数据维护-循环处理

♠ 审计数据处理PL/SQL程序

♠ 用dbms_system.kdswrt() 进行日志,如:

delete from sys.aud$ where timestamp# < trunc(sysdate,'Q') ;

commit;

sys.dbms_system.ksdwrt(3,'ORA-AUDIT TRAIL: Quarterly

rotation COMPLETE');

sys.dbms_system.ksdwrt(3,'ORA-AUDIT TRAIL: This message

brought to you by sys.manage_aud$');

end quarterly_rotation ;

Page 104: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

104/115 2012/2/27

审计数据维护-定时清除方法

♠ 计算审计数据大小和清除审计数据

♠ 可用下面方法计算审计数据大小:

-- 以manage_aud :

Procedure keep_size_in_check

is

rowCount number;

begin

select count(*) into rowCount from sys.aud$ ;

if rowCount > 50000

then

commit;

set transaction use rollback segment rbs_bulk;

insert into system.aud$_bu (select * from sys.aud$);

delete from sys.aud$ ;

commit;

sys.dbms_system.ksdwrt (3,'ORA-AUDIT TRAIL: POSSIBLE DOS

ATTACK!!!! AUD$ rows moved to AUD$_BU');

end if;

end keep_size_in_check;

Page 105: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

105/115 2012/2/27

审计数据维护-定时清除方法

♠ 计算审计数据大小和清除审计数据

♠ 以作业定时清除:

-- 以manage_aud :

declare

myjob number;

begin

dbms_job.submit(myjob,

what => ‘manage_aud$.keep_size_in_check;’,

interval => ‘trunc(sysdate)+1/96’);

End;

/

Page 106: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

106/115 2012/2/27

审计-数据字典与视图

♠ 审计有关数据字典 ♠ STMT_AUDIT_OPTION_MAP -- 审计选项类型代码

♠ AUDIT_ACTIONS -- action代码

♠ ALL_DEF_AUDIT_OPTS -- 对象创建时默认的对象审计选项

♠ DBA_STMT_AUDIT_OPTS -- 当前数据库系统审计选项

♠ DBA_PRIV_AUDIT_OPTS -- 权限审计选项

♠ DBA_OBJ_AUDIT_OPTS -- 对象审计选项

♠ DBA_AUDIT_TRAIL -- 审计记录

♠ DBA_AUDIT_OBJECT -- 审计对象列表

♠ DBA_AUDIT_SESSION -- session审计

♠ DBA_AUDIT_STATEMENT -- 语句审计

♠ DBA_AUDIT_EXISTS -- 使用BY AUDIT NOT EXISTS选项的审计

♠ DBA_AUDIT_POLICIES -- 审计POLICIES

♠ DBA_COMMON_AUDIT_TRAIL -- 标准审计+精细审计

Page 107: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

107/115 2012/2/27

数据库安全与审计问题

♠ Oracle 10g 版本的审计

♠ 即使是精细审计也不能保证数据的安全

♠ 数据的安全注意问题是放在内部人员,特别是DBA

用户

♠ 目前10g版本没有太好的方法

♠ Oracle 11g 版本的审计

♠ 提供更安全的数据保证

♠ 即使是DBA也不能随便查询所有数据

♠ 详细参考:审计保险箱(Audit Vault)

Page 108: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

108/115 2012/2/27

数据库审计与性能问题

♠ Oracle 审计与性能

♠ Oracle 审计的启用不但影响占用表空间的空间,同时对整个系统性能产生影响

♠ 特别精细审计Oracle的性能影响较大

♠ DBA用户要谨慎使用审计

♠ Oracle 审计建议:

♠ 非常必要的审计才指定

♠ 不要轻易使用查询的审计

Page 109: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

109/115 2012/2/27

数据库审计与性能问题

♠ Oracle 审计与性能

♠ Oracle 审计的启用影响系统性能测试表

Page 110: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

110/115 2012/2/27

审计案例

♠ Oracle 系统审计:

♠ 1.审计设置

--以sysdba登录

select value from v$parameter where name='audit_trail';

-- if not defined: $ORACLE_HOME/rdbms/audit/

select value from v$parameter where name='audit_file_dest';

alter system set audit_trail=db_extended scope=spfile;

ALTER SYSTEM SET audit_trail = xml,extended SCOPE=SPFILE ;

--

audit session ;

AUDIT SESSION BY hr;

AUDIT select table BY hr BY SESSION;

AUDIT DELETE ANY TABLE BY hr WHENEVER NOT SUCCESSFUL;

AUDIT UPDATE ANY TABLE;

AUDIT SELECT,INSERT,UPDATE,DELETE ON employees BY ACCESS WHENEVER

SUCCESSFUL;

AUDIT ALL PRIVILEGES;

/* turn audit off */

NOAUDIT select table BY hr;

NOAUDIT ALL; /* turns off all statement auditing */

NOAUDIT ALL PRIVILEGES; /* turns off all privilege auditing */

NOAUDIT ALL ON DEFAULT; /* turns off all object auditing */

ORDER BY USERNAME;

Page 111: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

111/115 2012/2/27

审计案例

♠ Oracle 系统审计:

♠ 2.浏览审计信息

--以sysdba登录

-- obtain info on audit

select * from DBA_STMT_AUDIT_OPTS;

select OS_USERNAME, USERNAME, USERHOST, ACTION_NAME,

to_char(LOGOFF_TIME,'dd-mm-yy hh24:mi:ss') LOGOFF, SESSION_CPU

from DBA_AUDIT_SESSION;

select USERNAME, USERHOST, ACTION_NAME, OBJ_NAME from

DBA_AUDIT_OBJECT ORDER BY USERNAME;

Page 112: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

112/115 2012/2/27

审计案例

♠ Oracle 系统审计:

♠ 3.清除审计信息

--以sysdba登录

--

CONN / AS SYSDBA

DELETE FROM SYS.AUD$;

Page 113: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

113/115 2012/2/27

参考资源

♠ Oracle 公司

♠ 《保障信息安全是实现合规性的第一步》

♠ Oracle Sleuth: Who Did It?- Session id: 36652

♠ Pete Finnigan

♠ Does VPD, FGA or audit really causeperformance

issues

Page 114: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

114/115 2012/2/27

参考资源-安全警告

♠ http://otn.oracle.com/deploy/security/index2.h

tm?Info&alerts.htm

♠ Oracle审计脚本

♠ http://www.softpanorama.org/DB/Oracle/oracle_a

udit_scripts.shtml

Page 115: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

115/115 2012/2/27

参考资源-文章

♠ Sample Audit Programs

♠ UCR Audit Program

♠ Checklist

♠ Checklist

♠ www.auditnet.org

Page 116: 4.Oracle 98/10g/11g 数据库审计与管理 (115 页)+

116/115 2012/2/27

参考资源-Web Sites

♠ http://otn.oracle.com/docs/deploy/security/

content.html

♠ www.auditnet.org

♠ www.oracle.com/database/index.html