Oracle审计功能详解.docx
- 文档编号:25161232
- 上传时间:2023-06-05
- 格式:DOCX
- 页数:28
- 大小:29.13KB
Oracle审计功能详解.docx
《Oracle审计功能详解.docx》由会员分享,可在线阅读,更多相关《Oracle审计功能详解.docx(28页珍藏版)》请在冰豆网上搜索。
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
如果使用服务器参数文件使用altersystemset
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;--指定用户
审计权限(使用该权限才能执行的操作):
AUDITDELETEANYTABLEBYACCESSWHENE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 审计 功能 详解
![提示](https://static.bdocx.com/images/bang_tan.gif)