Oracle审计功能详解.docx

上传人:b****7 文档编号:10021526 上传时间:2023-02-08 格式:DOCX 页数:28 大小:30.75KB
下载 相关 举报
Oracle审计功能详解.docx_第1页
第1页 / 共28页
Oracle审计功能详解.docx_第2页
第2页 / 共28页
Oracle审计功能详解.docx_第3页
第3页 / 共28页
Oracle审计功能详解.docx_第4页
第4页 / 共28页
Oracle审计功能详解.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

Oracle审计功能详解.docx

《Oracle审计功能详解.docx》由会员分享,可在线阅读,更多相关《Oracle审计功能详解.docx(28页珍藏版)》请在冰豆网上搜索。

Oracle审计功能详解.docx

Oracle审计功能详解

Oracle审计功能详解

一、审计分类:

Oracle中审计总体上可分为“标准审计”和“细粒度审计”后者也称为“基于政策的审计”,在Oracle10G之后功能得到很大增强。

其中标准审计可分为用户级审计和系统级审计。

用户级审计是任何Oracle用户可设置的审计,主要是用户针对自己创建的数据库表或视图进行审计,记录所有用户对这些表或视图的一切成功和(或)不成功的访问要求以及各种类型的SQL操作。

系统级审计只能由DBA设置,用以监测成功或失败的登录要求、监测GRANT和REVOKE操作以及其他数据库级权限下的操作。

二、标准审计:

2.1分类:

在ORACLE中分别支持以下三种标准审计类型:

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

◆         特权审计,对执行相应动作的系统特权的使用审计。

◆         对象审计,对一特殊模式对象上的指定语句的审计。

这三种标准审计类型分别对如下3方面进行审计:

◆         审计语句的成功执行、不成功执行,或者其两者。

◆         对每一用户会话审计语句执行一次或者对语句每次执行审计一次。

◆         对全部用户或指定用户的活动的审计。

当数据库的审计功能打开后,在语句执行阶段产生审计记录。

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

审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。

数据库审计记录是在SYS模式的AUD$表中。

2.2和审计相关的两个主要参数

Audit_sys_operations:

默认为false,当设置为true时,所有sys用户(包括以sysdba,sysoper身份登录的用户)的操作都会被记录,audittrail不会写在aud$表中,这个很好理解,假如数据库还未启动aud$不可用,那么像conn/assysdba这样的连接信息,只能记录在其它地方。

假如是windows平台,audtitrail会记录在windows的事件管理中,假如是linux/unix平台则会记录在audit_file_dest参数指定的文件中。

Audit_trail:

None:

是默认值,不做审计;

DB:

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

DB,Extended:

与DB一样,但是审计结果里面除了连接信息还包含了当时执行的SQL_TEXT和SQL_BIND;

OS:

将audittrail记录在操作系统文件中,文件名由audit_file_dest参数指定;

XML:

10g里新增,将audittrail以XML格式记录在操作系统文件中;

XML,Extended:

与XML一样,但是审计结果里面除了连接信息还包含了当时执行的SQL_TEXT和SQL_BIND

注:

这两个参数是static参数,需要重新启动数据库才能生效。

2.3审计级别

当开启审计功能后,可在三个级别对数据库进行审计:

Statement(语句)、Privilege(权限)、object(对象)。

Statement:

按语句来审计,比如audittable会审计数据库中所有的createtable,droptable,truncatetable语句,altersessionbycmy会审计cmy用户所有的数据库连接。

用法:

AUDITsql_statement_clauseBY{SESSION|ACCESS}WHENEVER[NOT]SUCCESSFUL;

表1列出了可以审计的语句类型,并且在每个类别中包含了相关语句的简要描述。

如果指定all,则审计该列表中的任何语句。

然而,表2中的语句类型在启用审计时不属于all类别;必须在audit命令中显式地指定它们。

表1包括在ALL类别中的可审计语句

语句选项

SQL操作

ALTERSYSTEM

所有ALTERSYSTEM选项,例如,动态改变实例参数,切换到下一个日志文件组,以及终止用户会话

CLUSTER

CREATE、ALTER、DROP或TRUNCATE集群

CONTEXT

CREATECONTEXT或DROPCONTEXT

DATABASELINK

CREATE或DROP数据库链接

DIMENSION

CREATE、ALTER或DROP维数

DIRECTORY

CREATE或DROP目录

INDEX

CREATE、ALTER或DROP索引

MATERIALIZEDVIEW

CREATE、ALTER或DROP物化视图

NOTEXISTS

由于不存在的引用对象而造成的SQL语句的失败

PROCEDURE

CREATE或DROPFUNCTION、LIBRARY、PACKAGE、PACKAGEBODY或PROCEDURE

PROFILE

CREATE、ALTER或DROP配置文件

PUBLICDATABASELINK

CREATE或DROP公有数据库链接

PUBLICSYNONYM

CREATE或DROP公有同义词

ROLE

CREATE、ALTER、DROP或SET角色

ROLLBACKSEGMENT

CREATE、ALTER或DROP回滚段

SEQUENCE

CREATE或DROP序列

SESSION

登录和退出

SYNONYM

CREATE或DROP同义词

SYSTEMAUDIT

系统权限的AUDIT或NOAUDIT

SYSTEMGRANT

GRANT或REVOKE系统权限和角色

TABLE

CREATE、DROP或TRUNCATE表

TABLESPACE

CREATE、ALTER或DROP表空间

TRIGGER

CREATE、ALTER(启用/禁用)、DROP触发器;具有ENABLEALLTRIGGERS或DISABLEALLTRIGGERS的ALTERTABLE

TYPE

CREATE、ALTER和DROP类型以及类型主体

USER

CREATE、ALTER或DROP用户

VIEW

CREATE或DROP视图

表2显式指定的语句类型

语句选项

SQL操作

ALTERSEQUENCE

任何ALTERSEQUENCE命令

ALTERTABLE

任何ALTERTABLE命令

COMMENTTABLE

添加注释到表、视图、物化视图或它们中的任何列

DELETETABLE

删除表或视图中的行

EXECUTEPROCEDURE

执行程序包中的过程、函数或任何变量或游标

GRANTDIRECTORY

GRANT或REVOKEDIRECTORY对象上的权限

GRANTPROCEDURE

GRANT或REVOKE过程、函数或程序包上的权限

GRANTSEQUENCE

GRANT或REVOKE序列上的权限

GRANTTABLE

GRANT或REVOKE表、视图或物化视图上的权限

GRANTTYPE

GRANT或REVOKETYPE上的权限

INSERTTABLE

INSERTINTO表或视图

LOCKTABLE

表或视图上的LOCKTABLE命令

SELECTSEQUENCE

引用序列的CURRVAL或NEXTVAL的任何命令

SELECTTABLE

SELECTFROM表、视图或物化视图

UPDATETABLE

在表或视图上执行UPDATE

 

Privilege:

按权限来审计,当用户使用了该权限则被审计,如执行grantselectanytabletoa,当执行了auditselectanytable语句后,当用户a访问了用户b的表时(如select*fromb.t)会用到selectanytable权限,故会被审计。

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

用法:

审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause中,而不是在语句中,指定系统权限

Object:

按对象审计,只审计on要害字指定对象的相关操作,如aduitalter,delete,drop,insertoncmy.tbyscott;这里会对cmy用户的t表进行审计,但同时使用了by子句,所以只会对scott用户发起的操作进行审计。

注重Oracle没有提供对schema中所有对象的审计功能,只能一个一个对象审计,对于后面创建的对象,Oracle则提供ondefault子句来实现自动审计,比如执行auditdropondefaultbyaccess;后,对于随后创建的对象的drop操作都会审计。

但这个default会对之后创建的所有数据库对象有效,似乎没办法指定只对某个用户创建的对象有效,想比trigger可以对schema的DDL进行“审计”,这个功能稍显不足。

用法:

AUDITschema_object_clauseBY{SESSION|ACCESS}WHENEVER[NOT]SUCCESSFUL;

schema_object_clause指定对象访问的类型以及访问的对象。

可以审计特定对象上14种不同的操作类型,下表中列出了这些操作。

对象选项

说   明

ALTER

改变表、序列或物化视图

AUDIT

审计任何对象上的命令

COMMENT

添加注释到表、视图或物化视图

DELETE

从表、视图或物化视图中删除行

EXECUTE

执行过程、函数或程序包

FLASHBACK

执行表或视图上的闪回操作

GRANT

授予任何类型对象上的权限

INDEX

创建表或物化视图上的索引

INSERT

将行插入表、视图或物化视图中

LOCK

锁定表、视图或物化视图

READ

对DIRECTORY对象的内容执行读操作

RENAME

重命名表、视图或过程

SELECT

从表、视图、序列或物化视图中选择行

UPDATE

更新表、视图或物化视图

2.4审计的一些其他选项

byaccess/bysession:

byaccess每一个被审计的操作都会生成一条audittrail。

bysession一个会话里面同类型的操作只会生成一条audittrail,默认为bysession。

whenever[not]successful:

wheneversuccessful操作成功(dba_audit_trail中returncode字段为0)才审计,

whenevernotsuccessful反之。

省略该子句的话,不管操作成功与否都会审计。

2.5和审计相关的视图

dba_audit_trail:

保存所有的audittrail,实际上它只是一个基于aud$的视图。

其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。

dba_stmt_audit_opts:

可以用来查看statement审计级别的auditoptions,即数据库设置过哪些statement级别的审计。

dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似

all_def_audit_opts:

用来查看数据库用ondefault子句设置了哪些默认对象审计。

1.SYS.AUD$

审计功能的底层视图,如果需要对数据进行删除,只需要对aud$视图进行删除既可,其他视图里的数据都是由aud$所得.

2.DBA_AUDIT_EXISTS

列出auditnotexists和auditexists产生的审计跟踪,我们默认的都是auditexists.

3.DBA_AUDIT_TRAIL

可以在里面查处所有审计所跟踪的信息,保存所有的audittrail,实际上它只是一个基于aud$的视图。

其它的视图dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一个子集。

4.DBA_AUDIT_OBJECT

可以查询所有对象跟踪信息.(例如,对grant,revoke等不记录),信息完全包含于dba_audit_trail

5.DBA_AUDIT_SESSION

所得到的数据都是有关logon或者logoff的信息.

6.DBA_AUDIT_STATEMENT

列出grant,revoke,audit,noaudit,altersystem语句的审计跟踪信息.

7.DBA_PRIV_AUDIT_OPTS

通过系统和由用户审计的当前系统特权

8.DBA_OBJ_AUDIT_OPTS

可以查询到所有用户所有对象的审计选项

9.DB_STMT_AUDIT_OPTS

可以用来查看statement审计级别的auditoptions,即数据库设置过哪些statement级别的审计。

dba_obj_audit_opts,dba_priv_audit_opts视图功能与之类似

10.ALL_DEF_AUDIT_OPTS

用来查看数据库用ondefault子句设置了哪些默认对象审计

11.AUDIT_ACTIONS

可以查询出在aud$等视图中actions列的含义

12.SYSTEM_PRIVILEGE_MAP

可以查询出aud$等视图中priv$used列的含义(注意前面加'-')

13.STMT_AUDIT_OPTION_MAP

审计选项类型代码

14.DBA_AUDIT_POLICIES

审计POLICIES

15.DBA_COMMON_AUDIT_TRAIL

标准审计+细粒度审计合并视图

16.DBA_FGA_AUDIT_TRAIL

细粒度审计策略的审计跟踪条目

2.6取消审计

将对应审计语句的audit改为noaudit即可,如auditsessionwheneversuccessful对应的取消审计语句为noauditsessionwheneversuccessful;

 

2.7设置ORACLE标准审计:

下列步骤可以设置ORACLE的标准审计功能:

1.修改初始化参数文件(init.ora)

如果使用服务器参数文件使用altersystemset=scope=spfile|both,详情参照1.1节中关于参数文件的介绍),设置AUDIT_TRAIL参数,并且重启数据库。

AUDIT_TRAIL的取值如下:

● DB/TRUE:

启动审计功能,并且把审计结果存放在数据库的SYS.AUD$表中

●DB_EXTENDED:

具有DB/TRUE的功能,另外记录AUD$的SQLBIND和SQLTEXT字段

● OS:

启动审计功能,并把审计结果存放在操作系统的审计信息中

●  XML:

启动审计功能,并且把审计结果以XML格式存放在操作系统的审计信息中

●  XML_EXTENDED:

具有XML的功能,另外会记录SQLBIND和SQLTEXT信息

● NONE/FALSE:

关闭审计功能

2.设置AUDIT_TRAIL参数:

如果设置AUDIT_TRAIL=OS,还需要修改参数AUDIT_FILE_DEST。

如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE_DEST所指定的目录下,并且文件名包含进程的PID。

3.确认审计相关的表是否已经安装

SQLPLUS>connect/ASSYSDBA

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

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

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

SQLPLUS>connect/assysdba

SQLPLUS>@$ORACLE_HOME/rdbms/admin/cataudit.sql

审计表安装在SYSTEM表空间。

所以要确保SYSTEM表空间又足够的空间存放审计信息。

4.关闭并重启数据库

5.设置所需要的审计信息

下面是一个例子

SQL>connectsystem/manager

SQL>grantauditsystemtoscott;

SQL>connectscott/tiger

SQL>auditsession;

停止审计:

SQL>noauditsession;

通常设置了标准审计后都是通过Audit语句开启审计,使用noaudit语句收回审计。

如下所示:

对修改SC表结构或数据的操作进行审计可使用如下语句:

AUDIEALTER,UPDATEONSC;

取消对SC表的一切审计可使用如下语句:

NOAUDITALLONSC;

2.8设置审计的实例(对试图尝试口令的访问的审计):

以下是一个审计的实例,用于记录尝试通过野蛮尝试法破译ORACLE帐号口令的例子:

1.修改审计相关参数(参照上面介绍的方法)

2.重启数据库

3.设置审计信息

SQL>AUDITALLBYACCESSWHENEVERNOTSUCCESSFUL

4.查询AUD$

SQL>selectreturncode,action#,userid,userhost,terminal,timestamp

fromaud$

RETURNCODEACTION#USERIDUSERHOSTTERMINAL

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

1017100SCOTTWPRATA-BR

1017100SCOTTWPRATA-BR

1017100SCOTTWPRATA-BR

ORA-1017的含义为错误的用户名口令。

通过查看AUD$表可以清楚地看到WPRATA-BR尝试破译SCOTT的口令。

可以通过下面一个存储过程来分析AUD$表,找出可疑的信息:

createorreplaceprocedureAuditLogin(SinceVarchar2,TimesPLS_Integer)

is

USER_IDVARCHAR2(20);

cursorc1isselectuserid,count(*)fromsys.aud$wherereturncode='1017'andtimestamp#>=to_date(Since,'yyyy-mm-dd')

groupbyuserid;

cursorC2ISSelectuserhost,terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:

HH24:

MI:

SS')

fromsys.aud$WHEREreturncode='1017'andtimestamp#>=to_date(Since,'yyyy-mm-dd')ANDUSERID=USER_ID;

ctPLS_INTEGER;

V_USERHOSTVARCHAR2(40);

V_TERMINALVARCHAR(40);

V_DATEVARCHAR2(40);

BEGIN

OPENC1;

dbms_output.enable(1024000);

LOOP

FETCHC1INTOUSER_ID,CT;

EXITWHENC1%NOTFOUND;

IF(CT>=TIMES)THEN

DBMS_OUTPUT.PUT_LINE('USERBROKENALARM:

'||USER_ID);

OPENC2;

LOOP

FETCHC2INTOV_USERhOST,V_TERMINAL,V_DATE;

DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:

'||V_USERHOST||',TERM:

'||V_TERMINAL||',TIME:

'||V_DATE);

EXITWHENC2%NOTFOUND;

ENDLOOP;

closec2;

ENDIF;

ENDLOOP;

closec1;

END;

/

一下是执行结果:

SQL>setserveroutputon;

SQL>executeauditlogin('2004-01-01',2);

USERBROKENALARM:

SYS

HOST:

TERM:

XUJI,TIME:

2004-09-22:

11:

08:

00

HOST:

TERM:

XUJI,TIME:

2004-09-22:

11:

08:

01

HOST:

TERM:

XUJI,TIME:

2004-09-22:

11:

09:

29

HOST:

TERM:

XUJI,TIME:

2004-09-22:

11:

09:

29

PL/SQL过程已成功完成。

2.9将审计相关的表移动到其他表空间:

由于AUD$表等审计相关的表存放在SYSTEM表空间,因此为了不影响系统的性能,保护SYSTEM表空间,最好把AUD$移动到其他的表空间上。

可以使用下面的语句来进行移动:

SQL>connect/assysdba;

SQL>altertableaud$movetablespace;

SQL>alterindexI_aud1rebuildonlinetablespace;

SQL>altertableaudit$movetablespace;

SQL>alterindexi_auditrebuildonlinetablespace;

SQL>altertableaudit_actionsmovetablespace;

SQL>alterindexi_audit_actionsrebuildonlinetablespace;

2.10审计语句样例

多层环境下的审计:

appserve-应用服务器,jackson-client

AUDITSELECTTABLEBYappserveONBEHALFOFjackson;

审计连接或断开连接:

AUDITSESSION;

AUDITSESSIONBYjeff,lori;--指定用户

审计权限(使用该权限才能执行的操作):

AUDITDELETEANYTABLEBYACCESSWHEN

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1