4.oracle 系统审计管理 (75 页)+

75
Oracle 9i/10g/11g Oracle 系统审计管理 赵元杰 北京群环域科技有限公司 2012.2

Upload: wasecurity

Post on 17-Jun-2015

1.012 views

Category:

Technology


9 download

TRANSCRIPT

Page 1: 4.oracle 系统审计管理 (75 页)+

Oracle 9i/10g/11g

Oracle系统审计管理

赵元杰

北京群环域科技有限公司

2012.2

Page 2: 4.oracle 系统审计管理 (75 页)+

2012/2/18 2/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 3: 4.oracle 系统审计管理 (75 页)+

2012/2/18 3/73

审计概念

♠数据库审计 :

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

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

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

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

Page 4: 4.oracle 系统审计管理 (75 页)+

2012/2/18 4/73

审计概念

♠启用Oracle数据库审计 :

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

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

♠启用审计 目的:

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

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

Page 5: 4.oracle 系统审计管理 (75 页)+

2012/2/18 5/73

审计概念

♠Oracle系统的审计 :

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

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

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

Page 6: 4.oracle 系统审计管理 (75 页)+

2012/2/18 6/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 7: 4.oracle 系统审计管理 (75 页)+

2012/2/18 7/73

审计设置

♠审计表的安装:

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

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

♠检查审计表是否安装:

SQL> connect / AS SYSDBA

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

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

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

SQL> connect / AS SYSDBA

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

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

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

Page 8: 4.oracle 系统审计管理 (75 页)+

2012/2/18 8/73

审计设置

♠审计表的安装:

♠要以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.

. . .

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 系统审计管理 (75 页)+

2012/2/18 9/73

审计设置

♠审计表的移动:

♠审计表存储在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>;

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 10: 4.oracle 系统审计管理 (75 页)+

2012/2/18 10/73

用EM配置审计

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

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

Page 11: 4.oracle 系统审计管理 (75 页)+

2012/2/18 11/73

审计设置

♠审计配置-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 12: 4.oracle 系统审计管理 (75 页)+

2012/2/18 12/73

审计设置

♠审计配置- Audit_trail 参数: ♠None:是默认值,Oracle系统不启用审计;

♠DB:将audit trail 记录在数据库的审计相关表中,如aud$,审计的结果只有连接信息;

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

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

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

♠XML:10g/11g版本支持。

Page 13: 4.oracle 系统审计管理 (75 页)+

2012/2/18 13/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 14: 4.oracle 系统审计管理 (75 页)+

2012/2/18 14/73

审计激活-审计级别

♠语句审计: ♠对某种类型的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 15: 4.oracle 系统审计管理 (75 页)+

2012/2/18 15/73

审计激活-语句级审计

♠语句级审计

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

AUDIT sql_statement_clause BY {SESSION |

ACCESS}WHENEVER [NOT] SUCCESSFUL;

Page 16: 4.oracle 系统审计管理 (75 页)+

2012/2/18 16/73

审计激活-语句级审计

♠语句级审计-例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 kshelton;

Noaudit succeeded.

Page 17: 4.oracle 系统审计管理 (75 页)+

2012/2/18 17/73

审计激活-语句级审计

♠语句级审计-例2

♠对登录进行审计:

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

SQL>audit session;

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

SQL>audit session whenever seccessfull;

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

SQL>audit session whenever not seccessfull;

. . . . . .

Page 18: 4.oracle 系统审计管理 (75 页)+

2012/2/18 18/73

审计激活-语句级审计

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

♠进行过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 19: 4.oracle 系统审计管理 (75 页)+

2012/2/18 19/73

审计激活-语句级审计

♠权限审计-例1

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

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

SQL> audit alter tablespace by access whenever successful;

Audit succeeded.

Page 20: 4.oracle 系统审计管理 (75 页)+

2012/2/18 20/73

审计激活-对象审计

♠对象审计:

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

♠审计的语句如下:

[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 21: 4.oracle 系统审计管理 (75 页)+

2012/2/18 21/73

审计激活-对象审计

♠对象级审计-例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;

Page 22: 4.oracle 系统审计管理 (75 页)+

2012/2/18 22/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 23: 4.oracle 系统审计管理 (75 页)+

2012/2/18 23/73

审计信息查询-简单查询

♠审计信息在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 24: 4.oracle 系统审计管理 (75 页)+

2012/2/18 24/73

审计信息查询-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 25: 4.oracle 系统审计管理 (75 页)+

2012/2/18 25/73

审计信息查询- 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 26: 4.oracle 系统审计管理 (75 页)+

2012/2/18 26/73

审计信息查询- 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 27: 4.oracle 系统审计管理 (75 页)+

2012/2/18 27/73

审计信息查询- IP地址

♠识别 ora-XXXX,登录失败

♠一般returncodes: ♠0 – successful

♠1017 – invalid username/password

♠1005 – null password given

♠1035 – RESTRICTED SESSION enabled

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

Page 28: 4.oracle 系统审计管理 (75 页)+

2012/2/18 28/73

审计信息查询- IP地址

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

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

♠根据创建一个VPN终端连接表 (如140.247.10/11.0/255), 查询其他非VPN的终端和用户

Page 29: 4.oracle 系统审计管理 (75 页)+

2012/2/18 29/73

审计信息查询- 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 30: 4.oracle 系统审计管理 (75 页)+

2012/2/18 30/73

审计信息查询- 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 31: 4.oracle 系统审计管理 (75 页)+

2012/2/18 31/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 32: 4.oracle 系统审计管理 (75 页)+

2012/2/18 32/73

审计的管理

♠审计带来的问题:

♠问题: AUD$ 在 SYSTEM 表空间

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

将 SYSTEM 灌满就导致系统停机

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

♠解决: 监控 AUD$大小

Page 33: 4.oracle 系统审计管理 (75 页)+

2012/2/18 33/73

审计的管理

♠创建审计数据归档表

♠创建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 34: 4.oracle 系统审计管理 (75 页)+

2012/2/18 34/73

审计的管理

♠创建审计数据归档表

♠创建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 35: 4.oracle 系统审计管理 (75 页)+

2012/2/18 35/73

审计的管理

♠使用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 36: 4.oracle 系统审计管理 (75 页)+

2012/2/18 36/73

审计的管理

♠检查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 37: 4.oracle 系统审计管理 (75 页)+

2012/2/18 37/73

审计的管理

♠检查AUD$的大小

♠定时进行检查:

declare

myjob number;

begin

dbms_job.submit(myjob,

what => ‘manage_aud$.keep_size_in_check;’,

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

End;

Page 38: 4.oracle 系统审计管理 (75 页)+

2012/2/18 38/73

审计的管理

♠限制审计数据增长

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

♠占用很多SYSTEM表空间

♠经常清除审计信息 :

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

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

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

Page 39: 4.oracle 系统审计管理 (75 页)+

2012/2/18 39/73

审计的管理

♠限制审计数据增长

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

♠再用TRUNCATE清除审计数据 :

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

--以sys登录到sql>;

SQL>connect as sysdba

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

SQL>TRUNCATE TABLE sys.aud$;

Page 40: 4.oracle 系统审计管理 (75 页)+

2012/2/18 40/73

审计的管理

♠取消某些审计:

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

♠取消审计的语句是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 41: 4.oracle 系统审计管理 (75 页)+

2012/2/18 41/73

审计的管理

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

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

审计时可取消审计;

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

--以sysdba关闭审计

SQL> conn /as sysdba

SQL> show parameter audit

SQL> alter system set audit_trail=none;

Page 42: 4.oracle 系统审计管理 (75 页)+

2012/2/18 42/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 43: 4.oracle 系统审计管理 (75 页)+

2012/2/18 43/73

SYS帐户的审计

♠特殊的SYS帐户:

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

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

♠设置AUDIT_TRAIL=OS ;

♠设置AUDIT_SYS_OPERATIONS = TRUE ;

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

Page 44: 4.oracle 系统审计管理 (75 页)+

2012/2/18 44/73

对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.

--设置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 45: 4.oracle 系统审计管理 (75 页)+

2012/2/18 45/73

对SYS审计的设置

♠设置审计SYS用户步骤:

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

--关闭数据库实例

SQL> connect sys/ORACLE@ora10 as sysdba

Connected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

--关闭数据库实例

SQL> connect sys/ORACLE@ora10 as sysdba

Connected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

Page 46: 4.oracle 系统审计管理 (75 页)+

2012/2/18 46/73

对SYS审计的设置

♠设置审计SYS用户步骤:

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

--启动数据库实例

SQL> startup

--设置审计

SQL> audit all privileges;

Audit succeeded.

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

SQL> alter user scott identified by scott;

User altered.

--启动数据库实例

SQL> startup

--设置审计

SQL> audit all privileges;

Audit succeeded.

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

SQL> alter user scott identified by scott;

User altered.

Page 47: 4.oracle 系统审计管理 (75 页)+

2012/2/18 47/73

对SYS审计信息的查看

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

♠4.点“我的电脑”=>选择“文件”=>点“控制

面板”=>“管理工具”=>“事件查看器”

Page 48: 4.oracle 系统审计管理 (75 页)+

2012/2/18 48/73

对SYS审计信息的查看

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

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

图:

Page 49: 4.oracle 系统审计管理 (75 页)+

2012/2/18 49/73

对SYS审计信息的查看

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

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

Page 50: 4.oracle 系统审计管理 (75 页)+

2012/2/18 50/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 51: 4.oracle 系统审计管理 (75 页)+

2012/2/18 51/73

Oracle 10g R2审计

♠Oracle 10g R2 审计:

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

♠要设置下面两个参数:

audit_file_dest = '/auditfs'

audit_trail = xml

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

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

Page 52: 4.oracle 系统审计管理 (75 页)+

2012/2/18 52/73

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;

系统已更改。

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 53: 4.oracle 系统审计管理 (75 页)+

2012/2/18 53/73

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

SQL>

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

SQL>

Page 54: 4.oracle 系统审计管理 (75 页)+

2012/2/18 54/73

Oracle 10g R2审计

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

♠3.设置审计:

SQL> audit alter user;

审计已成功。

SQL> conn system/zhaoabc

已连接。

SQL> alter user scott identified by zhaoabc;

用户已更改。

SQL>

SQL> audit alter user;

审计已成功。

SQL> conn system/zhaoabc

已连接。

SQL> alter user scott identified by zhaoabc;

用户已更改。

SQL>

Page 55: 4.oracle 系统审计管理 (75 页)+

2012/2/18 55/73

审计内容

♠审计概念

♠审计设置

♠审计的激活

♠审计数据的浏览

♠审计管理

♠SYS审计

♠10g审计新功能

♠精细审计*

Page 56: 4.oracle 系统审计管理 (75 页)+

2012/2/18 56/73

精细的审计

♠标准的审计

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

知道访问了哪些行或列

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

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

♠从Oracle9i开始引入细粒度的对象审计(简称FGA),

审计变得更为关注某个方面和更为精确

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

Page 57: 4.oracle 系统审计管理 (75 页)+

2012/2/18 57/73

精细的审计

♠DBMS_FGA包有4个过程:

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

程序 功能

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

DROP_POLICY 删除审计策略

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

ENABLE_POLICY 启用策略

Page 58: 4.oracle 系统审计管理 (75 页)+

2012/2/18 58/73

精细的审计

♠FGA 数据字典与视图:

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

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

♠一般用户可直接查询DBA_FGA_AUDIT_TRAIL视图即可

♠DBA_AUDIT_POLICIES 记录审计策略

Page 59: 4.oracle 系统审计管理 (75 页)+

2012/2/18 59/73

精细的审计

♠FGA 数据字典与视图:

♠DBA_FGA_AUDIT_TRAIL视图关键列

列名称 存储内容

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

识符不同

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

DB_USER 发出查询的数据库用户

OS_USER 操作系统用户

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

CLIENT_ID 客户标识符(如果由对打包过程

dbms_session.set_identifier 的调用所设置)

Page 60: 4.oracle 系统审计管理 (75 页)+

2012/2/18 60/73

精细的审计

♠FGA 数据字典与视图:

♠DBA_FGA_AUDIT_TRAIL视图关键列(续)

列名称 存储内容

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

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

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

POLICY_NAME 触发审计的策略名称(如果对表定义了多个策略,则每个

策略将插入一条记录。在此情况下,该列显示哪些行是由

哪个策略插入的)

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

SQL_TEXT 由用户提交的 SQL 语句

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

Page 61: 4.oracle 系统审计管理 (75 页)+

2012/2/18 61/73

精细的审计

♠FGA 数据字典与视图:

♠DBA_AUDIT_POLICIES-审计策略关键列

列名称 存储内容

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

OBJECT_NAME 表或视图的名称

POLICY_NAME 策略的名称 — 例如,ACCOUNTS_ACCESS

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

POLICY_COLUMN 审计列 — 例如,BALANCE

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

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

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

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

Page 62: 4.oracle 系统审计管理 (75 页)+

2012/2/18 62/73

精细的审计

♠精细审计-例子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 63: 4.oracle 系统审计管理 (75 页)+

2012/2/18 63/73

精细的审计

♠精细审计-例子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 64: 4.oracle 系统审计管理 (75 页)+

2012/2/18 64/73

精细的审计

♠精细审计-例子1

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

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

CONN audit_test/password

SELECT sal FROM emp WHERE ename = 'Tim';

SELECT sal FROM emp WHERE ename = 'Larry';

Page 65: 4.oracle 系统审计管理 (75 页)+

2012/2/18 65/73

精细的审计

♠精细审计-例子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 66: 4.oracle 系统审计管理 (75 页)+

2012/2/18 66/73

精细的审计

♠精细审计-例子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 67: 4.oracle 系统审计管理 (75 页)+

2012/2/18 67/73

精细的审计

♠清除精细审计数据

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

♠可用下面方法清除:

-- 以sysdba连接:

CONN sys/password AS SYSDBA

TRUNCATE TABLE fga_log$;

--

SELECT sql_text FROM dba_fga_audit_trail;

no rows selected.

Page 68: 4.oracle 系统审计管理 (75 页)+

2012/2/18 68/73

审计有关数据字典与视图

♠审计有关数据字典 ♠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 69: 4.oracle 系统审计管理 (75 页)+

2012/2/18 69/73

数据库安全与审计问题

♠Oracle 10g 版本的审计

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

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

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

♠Oracle 11g 版本的审计

♠提供更安全的数据保证

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

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

Page 70: 4.oracle 系统审计管理 (75 页)+

2012/2/18 70/73

数据库审计与性能问题

♠Oracle 审计与性能

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

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

♠DBA用户要谨慎使用审计

♠Oracle 审计建议:

♠非常必要的审计才指定

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

Page 71: 4.oracle 系统审计管理 (75 页)+

2012/2/18 71/73

数据库审计与性能问题

♠Oracle 审计与性能

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

Page 72: 4.oracle 系统审计管理 (75 页)+

2012/2/18 72/73

参考资源

♠Oracle 公司

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

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

36652

♠Pete Finnigan

♠Does VPD, FGA or audit really

causeperformance issues

Page 73: 4.oracle 系统审计管理 (75 页)+

2012/2/18 73/73

参考资源-安全警告

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

ndex2.htm?Info&alerts.htm

♠Oracle审计脚本

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

racle_audit_scripts.shtml

Page 74: 4.oracle 系统审计管理 (75 页)+

2012/2/18 74/73

参考资源-文章

♠Sample Audit Programs

♠UCR Audit Program

♠Checklist

♠Checklist

♠www.auditnet.org

Page 75: 4.oracle 系统审计管理 (75 页)+

2012/2/18 75/73

Web Sites

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

urity/content.html

♠www.auditnet.org

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