4.oracle 系统审计管理 (75 页)+
Post on 17-Jun-2015
1.012 Views
Preview:
TRANSCRIPT
Oracle 9i/10g/11g
Oracle系统审计管理
赵元杰
北京群环域科技有限公司
2012.2
2012/2/18 2/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
2012/2/18 3/73
审计概念
♠数据库审计 :
♠RDBMS一般都提供审计(Audit)功能,它是用于监视用户所执行的数据库操作
♠Oracle系统审计记录可存在数据字典表(system表空间中的 SYS.AUD$表中,可通过视图dba_audit_trail查看)
♠操作系统审计记录中(默认位置为$ORACLE_BASE/admin/$ORACLE_SID/adump/).
♠默认情况下审计是没有开启的。
2012/2/18 4/73
审计概念
♠启用Oracle数据库审计 :
♠当Oracle系统启用审计后,在语句执行阶段产生审计记录
♠审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息
♠启用审计 目的:
♠审查可疑的活动(如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计)以及对数据库的所有表的成功地或不成功地删除进行审计。
♠监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据
2012/2/18 5/73
审计概念
♠Oracle系统的审计 :
♠Oracle系统对任何用户所作的登录
♠操作数据库对象进行自动登记
♠数据库管理者在事后进行监督和检查
2012/2/18 6/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
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; -- 没有记录返回
--如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。
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.
. . .
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>;
2012/2/18 10/73
用EM配置审计
♠用EM可设置审计与管理审计,过程如下 :
♠启动EM;选择“用户”=>“审计设置”:
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参数指定的文件中。
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版本支持。
2012/2/18 13/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
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用户发起的操作进行审计。
2012/2/18 15/73
审计激活-语句级审计
♠语句级审计
♠所有类型的审计都使用audit命令来打开审计,使用noaudit命令来关闭审计。对于语句审计,audit命令的格式看起来如下所示:
AUDIT sql_statement_clause BY {SESSION |
ACCESS}WHENEVER [NOT] SUCCESSFUL;
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.
2012/2/18 17/73
审计激活-语句级审计
♠语句级审计-例2
♠对登录进行审计:
--每一个与 ORACLE 连结的活动均审计
SQL>audit session;
--每一个与 ORACLE 连结成功的活动均审计 :
SQL>audit session whenever seccessfull;
--每一个与 ORACLE 连结不成功的活动均审计:
SQL>audit session whenever not seccessfull;
. . . . . .
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表示无论成功与否。
2012/2/18 19/73
审计激活-语句级审计
♠权限审计-例1
♠希望将ALTER TABLESPACE权限授予所有的DBA,但希望在发生这种情况时生成审计记录:
♠每次成功使用ALTER TABLESPACE权限时,都会将一行内容添加到SYS.AUD$。
SQL> audit alter tablespace by access whenever successful;
Audit succeeded.
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表示无论成功与否。
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;
2012/2/18 22/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
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---
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)
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;
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
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” 来限制查询条件
2012/2/18 28/73
审计信息查询- IP地址
♠创建一个预期连接的IP地址表
♠对非属于预期的IP地址的企图连接进行告警
♠根据创建一个VPN终端连接表 (如140.247.10/11.0/255), 查询其他非VPN的终端和用户
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
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
2012/2/18 31/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
2012/2/18 32/73
审计的管理
♠审计带来的问题:
♠问题: AUD$ 在 SYSTEM 表空间
♠如果AUDIT SESSION 启用, 简单的工具就是
将 SYSTEM 灌满就导致系统停机
♠忽略 AUD$ 会带来同样问题
♠解决: 监控 AUD$大小
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);
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);
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 ;
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;
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;
2012/2/18 38/73
审计的管理
♠限制审计数据增长
♠自动记录信息到数据字典或OS文件中
♠占用很多SYSTEM表空间
♠经常清除审计信息 :
--定期对审计数据进行维护,如:
--删除对EMP表的审计的数据
delete from sys.aud$ where obj$name='EMP';
2012/2/18 39/73
审计的管理
♠限制审计数据增长
♠如果审计数据过快增长,可用exp备份;
♠再用TRUNCATE清除审计数据 :
--如需保留审计信息,用exp备份或考贝一份;
--以sys登录到sql>;
SQL>connect as sysdba
--用truncate命令删除sys.aud$;
SQL>TRUNCATE TABLE sys.aud$;
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; -- 取消所有对象审计
2012/2/18 41/73
审计的管理
♠取消整个Oracle数据库审计:
♠如果审计带来负面问题过多,且不必要启用
审计时可取消审计;
♠修改审计参数可实现取消审计的启用 :
--以sysdba关闭审计
SQL> conn /as sysdba
SQL> show parameter audit
SQL> alter system set audit_trail=none;
2012/2/18 42/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
2012/2/18 43/73
SYS帐户的审计
♠特殊的SYS帐户:
♠默认的审计对SYS用户不起作用;
♠要对SYS用户审计,要另外设置相关的参数 ;
♠设置AUDIT_TRAIL=OS ;
♠设置AUDIT_SYS_OPERATIONS = TRUE ;
♠系统忽略AUDIT_TRAIL 参数时,对SYS的审计的信息不是写到SYS.AUD$,而是对SYS的审计信息写到操作系统下。
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.
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.
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.
2012/2/18 47/73
对SYS审计信息的查看
♠查看对SYS审计的信息步骤:
♠4.点“我的电脑”=>选择“文件”=>点“控制
面板”=>“管理工具”=>“事件查看器”
2012/2/18 48/73
对SYS审计信息的查看
♠查看对SYS审计的信息步骤:
♠在 “管理工具”中选择“事件查看器”进入如
图:
2012/2/18 49/73
对SYS审计信息的查看
♠查看对SYS审计的信息步骤:
♠“事件查看器”画面后,选择“应用程序”=》选中某行数据=>点右键=>选“属性”进入当前行数据的详细说明,如图 。
2012/2/18 50/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
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目录下。
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;
系统已更改。
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>
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>
2012/2/18 55/73
审计内容
♠审计概念
♠审计设置
♠审计的激活
♠审计数据的浏览
♠审计管理
♠SYS审计
♠10g审计新功能
♠精细审计*
2012/2/18 56/73
精细的审计
♠标准的审计
♠可以轻松发现访问了哪些对象以及由谁访问,但无法
知道访问了哪些行或列
♠精细审计( Fine Grained Auditing =FGA)
♠Fine Grained Auditing 精细的设计或细粒度的审计
♠从Oracle9i开始引入细粒度的对象审计(简称FGA),
审计变得更为关注某个方面和更为精确
♠使用程序包DBMS_FGA来建立特定表上的策略
2012/2/18 57/73
精细的审计
♠DBMS_FGA包有4个过程:
♠可使用DBMS_FGA包来指定表审计设置:
程序 功能
ADD_POLICY 添加使用谓词和审计列的审计策略
DROP_POLICY 删除审计策略
DISABLE_POLICY 禁用审计策略,但保留与表或视图关联的策略
ENABLE_POLICY 启用策略
2012/2/18 58/73
精细的审计
♠FGA 数据字典与视图:
♠精细审计产生的数据存储在 SYS 拥有的表 FGA_LOG$ 中
♠DBA_FGA_AUDIT_TRAIL 是FGA_LOG$表上的一个视图
♠一般用户可直接查询DBA_FGA_AUDIT_TRAIL视图即可
♠DBA_AUDIT_POLICIES 记录审计策略
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 的调用所设置)
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 语句使用的绑定变量(如果存在)
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 处理器模块的过程名称(如果存在)
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;
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;
/
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';
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>
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;
/
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.
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 -- 标准审计+精细审计
2012/2/18 69/73
数据库安全与审计问题
♠Oracle 10g 版本的审计
♠即使是精细审计也不能保证数据的安全
♠数据的安全注意问题是放在内部人员,特别是DBA用
户
♠目前10g版本没有太好的方法
♠Oracle 11g 版本的审计
♠提供更安全的数据保证
♠即使是DBA也不能随便查询所有数据
♠详细参考:审计保险箱(Audit Vault)
2012/2/18 70/73
数据库审计与性能问题
♠Oracle 审计与性能
♠Oracle 审计的启用不但影响占用表空间的空间,同时对整个系统性能产生影响
♠特别精细审计Oracle的性能影响较大
♠DBA用户要谨慎使用审计
♠Oracle 审计建议:
♠非常必要的审计才指定
♠不要轻易使用查询的审计
2012/2/18 71/73
数据库审计与性能问题
♠Oracle 审计与性能
♠Oracle 审计的启用影响系统性能测试表
2012/2/18 72/73
参考资源
♠Oracle 公司
♠《保障信息安全是实现合规性的第一步》
♠Oracle Sleuth: Who Did It?- Session id:
36652
♠Pete Finnigan
♠Does VPD, FGA or audit really
causeperformance issues
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
2012/2/18 74/73
参考资源-文章
♠Sample Audit Programs
♠UCR Audit Program
♠Checklist
♠Checklist
♠www.auditnet.org
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
top related