Oracle审计功能详解_第1页
Oracle审计功能详解_第2页
Oracle审计功能详解_第3页
Oracle审计功能详解_第4页
Oracle审计功能详解_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

**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/un谢谢阅读ix平台则会记录在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一样,但是审计结果里面除了连接信息还包含了当时执行的S谢谢阅读QL_TEXT和SQL_BIND注:这两个参数是static参数,需要重新启动数据库才能生效。精品文档放心下载2.3审计级别当开启审计功能后,可在三个级别对数据库进行审计:Statement(语句)、Privilege(权感谢阅读限)、object(对象)。Statement:**按语句来审计,比如audittable会审计数据库中所有的createtable,droptable,tru精品文档放心下载ncatetable语句,altersessionbycmy会审计cmy用户所有的数据库连接。感谢阅读用法:AUDITsql_statement_clauseBY{SESSION|ACCESS}WHENEVER[NOT]SUCCESSFU谢谢阅读L;表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索引谢谢阅读MATERIALIZED CREATE、ALTER或DROP物化视图精品文档放心下载VIEWNOTEXISTS 由于不存在的引用对象而造成的SQL语句的失败精品文档放心下载**PROCEDUREPROFILEPUBLICDATABASE

CREATE或DROPFUNCTION、LIBRARY、PACKAGE、PACKAGE精品文档放心下载BODY或PROCEDURECREATE、ALTER或DROP配置文件CREATE或DROP公有数据库链接LINKPUBLICSYNONYMROLEROLLBACK

CREATE或DROP公有同义词CREATE、ALTER、DROP或SET角色精品文档放心下载CREATE、ALTER或DROP回滚段SEGMENTSEQUENCESESSIONSYNONYMSYSTEMAUDITSYSTEMGRANTTABLETABLESPACETRIGGERTYPE

CREATE或DROP序列登录和退出CREATE或DROP同义词系统权限的AUDIT或NOAUDITGRANT或REVOKE系统权限和角色CREATE、DROP或TRUNCATE表CREATE、ALTER或DROP表空间CREATE、ALTER(启用/禁用)、DROP触发器;具有ENABLEALL感谢阅读TRIGGERS或DISABLEALLTRIGGERS的ALTERTABLE精品文档放心下载CREATE、ALTER和DROP类型以及类型主体感谢阅读**USERVIEW

CREATE、ALTER或DROP用户CREATE或DROP视图表2

显式指定的语句类型语句选项ALTERSEQUENCEALTERTABLECOMMENTTABLEDELETETABLEEXECUTEPROCEDUREGRANTDIRECTORYGRANTPROCEDUREGRANTSEQUENCEGRANTTABLEGRANTTYPEINSERTTABLELOCKTABLESELECTSEQUENCESELECTTABLEUPDATETABLE谢谢阅读

SQL操作任何ALTERSEQUENCE命令任何ALTERTABLE命令添加注释到表、视图、物化视图或它们中的任何列删除表或视图中的行执行程序包中的过程、函数或任何变量或游标GRANT或REVOKEDIRECTORY对象上的权限感谢阅读GRANT或REVOKE过程、函数或程序包上的权限谢谢阅读GRANT或REVOKE序列上的权限GRANT或REVOKE表、视图或物化视图上的权限谢谢阅读GRANT或REVOKETYPE上的权限INSERTINTO表或视图表或视图上的LOCKTABLE命令引用序列的CURRVAL或NEXTVAL的任何命令精品文档放心下载SELECTFROM表、视图或物化视图在表或视图上执行UPDATE**Privilege:按权限来审计,当用户使用了该权限则被审计,如执行grantselectanytabletoa,谢谢阅读当执行了auditselectanytable语句后,当用户a访问了用户b的表时(如select感谢阅读fromb.t)会用到selectanytable权限,故会被审计。注重用户是自己表的所有者,所以用户访问自己的表不会被审计。感谢阅读用法:审计系统权限具有与语句审计相同的基本语法,但审计系统权限是在sql_statement_clause中,而不是在语句中,指定系统权限精品文档放心下载Object:按对象审计,只审计on要害字指定对象的相关操作,如aduitalter,delete,drop,inser感谢阅读oncmy.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_t感谢阅读rail的一个子集。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产生的审计跟踪,我们默认的都是auditexi谢谢阅读sts.**3. DBA_AUDIT_TRAIL可以在里面查处所有审计所跟踪的信息,保存所有的audittrail,实际上它只是一精品文档放心下载个基于aud$的视图。其它的视图dba_audit_session,dba_audit_object,dba_audi精品文档放心下载t_statement都只是dba_audit_trail的一个子集。谢谢阅读4. DBA_AUDIT_OBJECT可以查询所有对象跟踪信息.(例如,对grant,revoke等不记录),信息完全包含于dba_精品文档放心下载audit_trail5. DBA_AUDIT_SESSION所得到的数据都是有关logon或者logoff的信息.精品文档放心下载6. DBA_AUDIT_STATEMENT列出grant,revoke,audit,noaudit,altersystem语句的审计跟踪信息.感谢阅读DBA_PRIV_AUDIT_OPTS通过系统和由用户审计的当前系统特权DBA_OBJ_AUDIT_OPTS可以查询到所有用户所有对象的审计选项DB_STMT_AUDIT_OPTS可以用来查看statement审计级别的auditoptions,即数据库设置过哪些statem谢谢阅读ent级别的审计。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列的含义(注意前面加'-')精品文档放心下载STMT_AUDIT_OPTION_MAP审计选项类型代码精品文档放心下载DBA_AUDIT_POLICIES审计POLICIES谢谢阅读DBA_COMMON_AUDIT_TRAIL标准审计+细粒度审计合并视图感谢阅读DBA_FGA_AUDIT_TRAIL细粒度审计策略的审计跟踪条目2.6取消审计将对应审计语句的audit改为noaudit即可,如auditsessionwheneversucces谢谢阅读sful对应的取消审计语句为noauditsessionwheneversuccessful;感谢阅读2.7设置ORACLE标准审计:下列步骤可以设置ORACLE的标准审计功能:修改初始化参数文件(init<sid>.ora)如果使用服务器参数文件使用altersystemset<parameter>=<value>scope=s感谢阅读pfile|both,详情参照1.1节中关于参数文件的介绍),设置AUDIT_TRAIL参数,并精品文档放心下载且重启数据库。AUDIT_TRAIL的取值如下:DB/TRUE:启动审计功能,并且把审计结果存放在数据库的SYS.AUD$表中感谢阅读**DB_EXTENDED:具有DB/TRUE的功能,另外记录AUD$的SQLBIND和SQ感谢阅读LTEXT字段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。确认审计相关的表是否已经安装SQLPLUS>connect/ASSYSDBA感谢阅读SQLPLUS>select*fromsys.aud$;--没有记录返回SQLPLUS>select*fromdba_audit_trail;--没有记录返回感谢阅读如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。精品文档放心下载SQLPLUS>connect/assysdba谢谢阅读SQLPLUS>@$ORACLE_HOME/rdbms/admin/cataudit.sql谢谢阅读**审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计谢谢阅读信息。关闭并重启数据库设置所需要的审计信息下面是一个例子SQL>connectsystem/manager精品文档放心下载SQL>grantauditsystemtoscott;谢谢阅读SQL>connectscott/tigerSQL>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-BR1017100SCOTTWPRATA-BR1017100SCOTTWPRATA-BRORA-1017的含义为错误的用户名口令。通过查看AUD$表可以清楚地看到精品文档放心下载WPRATA-BR尝试破译SCOTT的口令。可以通过下面一个存储过程来分析AUD$表,找出感谢阅读可疑的信息:createorreplaceprocedureAuditLogin(SinceVarchar2,TimesPLS_Integer)谢谢阅读isUSER_IDVARCHAR2(20);cursorc1isselectuserid,count(*)fromsys.aud$wherereturncode='1017'and感谢阅读timestamp#>=to_date(Since,'yyyy-mm-dd')谢谢阅读groupbyuserid;**cursorC2ISSelectuserhost,精品文档放心下载terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')谢谢阅读fromsys.aud$WHEREreturncode='1017'and谢谢阅读timestamp#>=to_date(Since,'yyyy-mm-dd')ANDUSERID=USER_ID;谢谢阅读ctPLS_INTEGER;V_USERHOSTVARCHAR2(40);V_TERMINALVARCHAR(40);V_DATEVARCHAR2(40);BEGINOPENC1;dbms_output.enable(1024000);精品文档放心下载LOOPFETCHC1INTOUSER_ID,CT;EXITWHENC1%NOTFOUND;IF(CT>=TIMES)THENDBMS_OUTPUT.PUT_LINE('USERBROKENALARM:'||USER_ID);感谢阅读OPENC2;LOOPFETCHC2INTOV_USERhOST,V_TERMINAL,V_DATE;感谢阅读DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',T精品文档放心下载IME:'||V_DATE);**EXITWHENC2%NOTFOUND;ENDLOOP;closec2;ENDIF;ENDLOOP;closec1;END;/一下是执行结果:SQL>setserveroutputon;SQL>executeauditlogin('2004-01-01',2);感谢阅读USERBROKENALARM:SYSHOST:,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<newtablespace>;谢谢阅读SQL>alterindexI_aud1rebuildonlinetablespace<newtablespace>;谢谢阅读SQL>altertableaudit$movetablespace<newtablespace>;谢谢阅读SQL>alterindexi_auditrebuildonlinetablespace<newtablespace>;精品文档放心下载SQL>altertableaudit_actionsmovetablespace<newtablespace>;谢谢阅读SQL>alterindexi_audit_actionsrebuildonlinetablespace<newtablespace>;精品文档放心下载2.10审计语句样例多层环境下的审计:appserve-应用服务器,jackson-clientAUDITSELECTTABLEBYappserveONBEHALFOFjackson;感谢阅读审计连接或断开连接:AUDITSESSION;AUDITSESSIONBYjeff,lori; --指定用户精品文档放心下载审计权限(使用该权限才能执行的操作):AUDITDELETEANYTABLEBYACCESSWHENEVERNOTSUCCESSFUL;AUDITDELETEANYTABLE;感谢阅读AUDITSELECTTABLE,INSERTTABLE,DELETETABLE,EXECUTEPROCEDUREBYACCESSWHENEVERNOTSUCCESSFUL;谢谢阅读**对象审计:AUDITDELETEONjeff.emp;AUDITSELECT,INSERT,DELETEONjward.deptBYACCESSWHENEVERSUCCESSFUL;感谢阅读取消审计:NOAUDITsession;NOAUDITsessionBYjeff,lori;谢谢阅读NOAUDITDELETEANYTABLE;NOAUDITSELECTTABLE,INSERTTABLE,DELETETABLE,EXECUTE精品文档放心下载PROCEDURE;NOAUDITALL; --取消所有statement审计谢谢阅读NOAUDITALLPRIVILEGES; --取消所有权限审计感谢阅读NOAUDITALLONDEFAULT; --取消所有对象审计精品文档放心下载2.11清除审计信息DELETEFROMSYS.AUD$;TRUNCATETABLESYS.AUD$;DELETEFROMSYS.AUD$WHEREobj$name='EMP';谢谢阅读**三、细粒度审计:细粒度审计(FGA)(通过Oracle9i引入)可以理解为“基于政策的审计”。感谢阅读与标准的审计功能相反,FGA可用于指定生成审计记录必需的条件:精品文档放心下载FGA政策通过使用“dbms_fga”程序包以编程方式绑定到对象(表、视图)。类似于用于通过VPD("dbms_rls")进行访问控制的程序包,它允许您创建任何需要的条件,例如:仅当以下条件为真时审计事件:谢谢阅读在早上九点到下午六点之间或在星期六和星期日对某个表进行了访问。谢谢阅读使用了公司网络外部的某个IP地址。选定或更新了特定列。使用了该列的特定值。这将创建更有意义的审计线索,因为无需记录每一个人对表的每一次访问。从Oracle数据库10g开始,FGA支持在一个策略中使用“选择”、“插入”、“更新”和“删除”语句的任意组合。事实上,绑定到表的FGA政策简化了审计政策的管理,因为这将只需在数据库中对其更改一次,不用在每个应用程序中一次次进行。此外。无论用户通过何种方式连接至数据库(通过应用程序、Web接口或通过SQL*Plus),其操作都会记录下来。感谢阅读细粒度审计的程序包DBMS_FGA具有4个过程:精品文档放心下载ADD_POLICY --添加使用谓词和审计列的审计策略感谢阅读DROP_POLICY --删除审计策略DISABLE_POLICY --禁用审计策略,但保留与表或视图关联的策略精品文档放心下载**ENABLE_POLICY --启用策略3.1使用细粒度审计:1、创建测试表:createtableACCOUNT(AACT_NOnumbernotnull,CUST_IDnumbernotnull,BALANCEnumber(15,2));2、添加审计策略:beginDBMS_FGA.ADD_POLICY(object_schema=>'TEST',感谢阅读object_name =>'ACCOUNT',policy_name =>'ACCOUNT_ACCESS');谢谢阅读end;这段代码必须由具有执行程序包dbms_fga权限的用户来执行。建议应该建立一个专门的用户来专门负责添加审计策略。该过程有许多参数,具体含义如下:精品文档放心下载OBJECT_SCHE对其定义了FGA策略的表或视图的所有者MAOBJECT_NAM 表或视图的名称**EPOLICY_NAM策略的名称,由用户自定义—例如,ACCOUNTS_ACCESS感谢阅读E在添加策略时指定的审计条件—例如,BALANCE>=谢谢阅读POLICY_TEXT11000POLICY_COLU审计列—例如,BALANCEMNENABLED 如果启用则为YES,否则为NOPF_SCHEMA 拥有策略处理器模块的模式(如果存在)精品文档放心下载PF_PACKAGE 处理器模块的程序包名称(如果存在)感谢阅读PF_FUNCTIO处理器模块的过程名称(如果存在)N3、在定义了策略以后,当用户以通常的方式对表进行查询时,如下所示:感谢阅读select*frombank.accounts;谢谢阅读审计线索记录此操作。可以使用以下语句查看线索:selecttimestamp,db_user,**os_user,object_schema,object_name,sql_textfromdba_fga_audit_trail;TIMESTAMPDB_USEROS_USEROBJECT_OBJECT_NSQL_TEXT感谢阅读------------------------------------------------------------感谢阅读26-MAR-10TEST ananda TEST ACCOUNTselect*fromaccount感谢阅读注意名为DBA_FGA_AUDIT_TRAIL的新视图,它记录细粒度的访问信息。其中显示了审计事件的时间标记、查询者的数据库用户ID、操作系统用户ID、查询中所使用表的名称和所有者,最后还有确切的查询语句。谢谢阅读3.2审计列和审计条件:默认情况下会对被审计对象的所有列开启审计,当任何一列被访问时都会纪感谢阅读录一条审计信息,这在现实情况下不太常见,因为这样会使审计信息表增长过快精品文档放心下载造成存储空间的压力,因此通常都会设置审计条件,当条件触发时再发起审计。精品文档放心下载例如我们可以对Account表的Balance列设置审计条件,当访问该列并触发审谢谢阅读计条件时才进行审计。如下所示:begindbms_fga.add_policy(object_schema=>'TEST',object_name=>'ACCOUNT',**policy_name=>'ACCOUNT_ACCESS',感谢阅读audit_column=>'BALANCE',精品文档放心下载audit_condition=>'BALANCE>=11000'谢谢阅读);end;该策略将在访问BALANCE列并且只有访问列值大于等于11000时才发起审计。精品文档放心下载因此根据该条件户有如下不同审计状态:SQL语句

审计状态selectbalancefromaccount;精品文档放心下载

进行审计。用户选择了在添加策略时所指定的审计列BALANCE。谢谢阅读select*fromaccount;

进行审计。即使用户没有明确指定列BALANCE,*也隐含地选择了它。感谢阅读selectcust_idfromaccountwherebalance<10000;精品文档放心下载

进行审计。即使用户没有明确指定列BALANCE,where子句也隐含地选择了它。谢谢阅读selectcust_idfromaccount;感谢阅读

不进行审计。用户没有选择列BALANCE。selectcount(*)fromaccount;谢谢阅读

不进行审计。用户没有明确或隐含地选择列BALANCE。精品文档放心下载更详细的设置策略如下:DBMS_FGA.ADD_POLICY(**object_schemaVARCHAR2,--schema的名字,表或视图的拥有者object_nameVARCHAR2,--对象名,表或视图的名字感谢阅读policy_nameVARCHAR2,--审计策略名字,它和数据库中其他对象一样,需要有一个不重复,唯一的名字谢谢阅读audit_conditionVARCHAR2,--筛选条件比如可以选择哪些符合条件的操作被记录感谢阅读audit_columnVARCHAR2,--表中的某一列,可以只记录对表中某一列的操作.如果不指定表示审计所有的列感谢阅读handler_schemaVARCHAR2,--是下面的handler_module的拥有者,其实也只能是创建policy的用户,而上面的object_schema可以是任意用户感谢阅读handler_moduleVARCHAR2,--可以是一个一个存储过程或函数,但监测到任何一条符合条件的操作时执行它.谢谢阅读enableBOOLEAN,--true或false表示policy是开启或关闭状态,如果是false表示不进行审计谢谢阅读statement_typesVARCHAR2,--表示哪些操作将被审计,可以填上select,insert,update,delete中的一个或几个感谢阅读audit_trailBINARY_INTEGERINDEFAULT,--有参数db,xml表示审计到的信息保存到数据库中或是以xml文件形式保存到磁盘上谢谢阅读audit_column_optsBINARY_INTEGERINDEFAULT);--这个选项其实只有在audt_column中指定了某列时才起作用.它有any_columns,all_columns两个选项假如表中有eno,ename两列,并在audit_column中指定了这两列,那么选any_columns表示只要操作其中的任意一列都将被记录,而这里指定精品文档放心下载**all_columns的话是说只有一个sql语句同时操作了这两列才被记录精品文档放心下载3.3优化器模式:FGA需要基于成本的优化(CBO),以便正确地工作。在基于规则的优化时,只要用户从表中进行选择,无论是否选择了相关的列,都始终生成审计线索,增加了误导项目出现的可能性。为使FGA正确地工作,除了在实例级启用CBO之外,在SQL语句中应该没有规则暗示(hint),并且必须至少使用评估选项对查询中的所有表进行分析。感谢阅读3.4管理FGA策略:要删除策略,您可以使用以下语句:begindbms_fga.drop_policy(object_schema=>'TEST',object_name=>'ACCOUNT',policy_name=>'ACCOUNT_ACCESS'谢谢阅读);end;对于更改策略而言,没有随取随用的解决方案。要更改策略中的任何参数,必须感谢阅读删除策略,再使用更改后的参数添加策略。但是可以暂时禁用已有策略,如下所感谢阅读示:**begindbms_fga.enable_policy(object_schema=>'TEST',object_name=>'ACCOUNT',policy_name=>'ACCOUNT_ACCESS',谢谢阅读enable=>FALSE);end;若要重新启用它,可使用同一函数,只需将参数enable设置为TRUE。谢谢阅读3.5FGA数据字典视图:FGA策略的定义位于数据字典视图DBA_AUDIT_POLICIES中。该市途中各列含义如下:感谢阅读SESSION_ID 审计会话标识符;与V$SESSION视图中的会话标识符不同谢谢阅读TIMESTAMP 审计记录生成时的时间标记DB_USER 发出查询的数据库用户OS_USER 操作系统用户USERHOST 用户连接的机器的主机名CLIENT_ID 客户标识符(如果由对打包过程dbms_session.set_identifier感谢阅读**EXT_NAME

的调用所设置)外部认证的客户名称,如LDAP用户OBJECT_SCHEMA

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

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

触发审计的策略名称(如果对表定义了多个策略,则每个策略谢谢阅读将插入一条记录。在此情况下,该列显示哪些行是由哪个策略谢谢阅读插入的。)记录了审计的Oracle系统更改号由用户提交的SQL语句由SQL语句使用的绑定变量(如果存在)3.6视图和FGA:假定在ACCOUNTS表上定义视图VW_ACCOUNT如下:谢谢阅读createviewvw_accountasselect*fromaccount;感谢阅读现在,如果用户从视图中而不是从表中进行选择:select*fromvw_account;**您将看到以下审计线索:selectobject_name,sql_textfromdba_fga_audit_trail;感谢阅读OBJECT_NAMESQL_TEXT------------------------------------------------------------精品文档放心下载ACCOUNT select*fromvw_account精品文档放心下载注意,是基表名称而不是视图名称出现在OBJECT_NAME列中,因为视图中的选择是从基表中进行选择。但是,SQL_TEXT列记录了用户提交的实际语句。如果只希望审计对视图的查询而不是对表的查询,可以对视图本身建立策谢谢阅读略。通过将视图名称而不是表的名称传递给打包的过程dbms_fga.add_policy中的参数object_name,可以完成这项工作。随后DBA_FGA_AUDIT_TRAIL中的OBJECT_NAME列将显示视图的名称,并且不会出现有关表访问的附加记录。感谢阅读3.7其它用途:除了记录对表的选择访问,FGA还可用于某些其它情况:感谢阅读可以对数据仓库使用FGA,以捕获特定的表、视图或物化视图上发生的所有语句,这有助于计划索引。不需要到V$SQL视图去获取这些信息。即使SQL语句已经超出了V$SQL的期限,在FGA审计线索中将会始终提供它。感谢阅读**由于FGA捕获绑定变量,它可以帮助了解绑定变量值的模式,这有助于设计直方图集合等。感谢阅读可以向审计者或DBA发送警告,这有助于跟踪恶意应用程序。精品文档放心下载由于FGA可以作为SELECT语句的触发器,可以在需要这种功能的任何时候使用它。感谢阅读3.8FGA在10G中的增强:3.8.1对所有DML的审计:在9i中FGA只能对Select语句进行审计,而不能对其他DML语句(Update、谢谢阅读Delete、Insert)进行审计,如果想对其他DML语句进行审计那么只能采取数精品文档放心下载据库处发起的形式来实现。在10G中实现了对所有DML语句的审计,如下所精品文档放心下载示:begindbms_fga.add_policy(object_schema =>'TEST',object_name =>'ACCOUNT',policy_name =>'ACCOUNT_ACCESS',感谢阅读audit_column =>'BALANCE',感谢阅读audit_condition=>'BALANCE>=3000',感谢阅读statement_types=>'INSERT,UPDATE,DELETE,SELECT'谢谢阅读);end;通过statement_types=>'INSERT,UPDATE,DELETE,SELECT'参数制定了新的策略,该谢谢阅读**策略可以对Select之外的所有DML操作进行审计。因此根据新的审计条件和审计策略会精品文档放心下载有如下不同情况:第1种情况之前:BALANCE=1000用户发出:updateaccountsetbalance=1200whereACCOUNT_NO=....精品文档放心下载旧的和新的balance都小于3,000,审计条件不满足;因此这条语句将不会被审计。感谢阅读第2种情况之前:BALANCE=1000用户发出:updateaccountsetbalance=3200whereACCOUNT_NO=....感谢阅读新的balance大于3,000,审计条件满足;因此这条语句将会被审计。精品文档放心下载第3种情况之前:BALANCE=3200用户发出:**updateaccountsetbalance=1200whereACCOUNT_NO=....感谢阅读新的balance小于3,000,但旧的balance大于3,000。因此审计条件满足,这条语句将被审计。谢谢阅读第4种情况用户插入一行,其中有BALANCE<3000。谢谢阅读insertintoaccountvalues(9999,1200,'X');谢谢阅读因为balance1,200不满足审计条件,所以这条语句不被审计。如果balance列大于或等于3,000,它将被审计。精品文档放心下载第5种情况用户插入一行,其中balance的值为空。insertintoaccount(account_no,status)values(9997,'X');谢谢阅读因为balance为空,该列没有任何默认值,所以审计条件不满足(比较NULL>=3000结果为FALSE),这条语句不会被审计。重要注意事项:假设该列有一个大于3,000的默认值时,这条语句仍然不会被审计,即使插入行的谢谢阅读balance列值大于3000。注意对于DML语句的审计是由一个自动事务插入感谢阅读的;即使回滚DML语句的操作,审计记录也将存在不会跟着回滚。感谢阅读3.8.2制定相关的列策略:**在表ACCOUNT上定义的一个策略,如下:begindbms_fga.add_policy(object_schema =>'TEST',object_name =>'ACCOUNT',policy_name =>'ACCOUNT_SEL',感谢阅读audit_column =>'ACCOUNT_NO,BALANCE',感谢阅读audit_condition=>'BALANCE>=3000',精品文档放心下载statement_types=>'SELECT'精品文档放心下载);end;在某些情况下,列的组合可能很重要,而不是某个特定的列。以上策略是在谢谢阅读ACCOUNT_NO和BALANCE上定义的。那么如果用户发出以下语句:谢谢阅读selectbalancefromaccountswhereaccount_no=9995;感谢阅读这条语句将被审计,因为balance列被选中,且余额为3,200,大于3,000,满足审计条件。谢谢阅读如果一个用户想查出在银行的总余额,他发出:selectsum(balance)fromaccount;谢谢阅读**这条查询几乎没什么害处;它不明确指出帐户所有者和帐户余额。因此安全策略可能不会要求审计这条查询。不过,这条查询精品文档放心下载selectbalancefromaccountwhereaccount_no=9995精品文档放心下载必须被审计;因为它明确地指定了一个帐户。默认地,所有语句都被审计(无论使用了什么样的列组合)。这

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论