Oracle基于系统级触发器的审计功能_第1页
Oracle基于系统级触发器的审计功能_第2页
Oracle基于系统级触发器的审计功能_第3页
Oracle基于系统级触发器的审计功能_第4页
Oracle基于系统级触发器的审计功能_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、基于系统级触发器的审计功能从Oracle8i开始,Oracle引入了特殊的触发器,这些触发器并不是和特殊的DML事件相关联的(DML事件,如,INSERT,UPDATE和DELETE)。这些系统级别的触发器包括:l         数据库启动/关闭触发器l         DDL触发器l         最终用户登陆/注销触发器l  &#

2、160;      系统错误触发器l         DDL触发器使用这些触发器,可以对数据库发生的一些重要事件进行审计。当触发事件发生的时候,可以启动触发器。在触发器中,可以通过DML操作将审计操作记录在日志表中,或者通过抛出一个EXCEPTION来制止某种操作。在触发器中,可以通过使用系统事件函数(Event Attribute Functions)来获取一些信息。以下是系统事件函数的详细情况:系统事件函数函数名称类型描述备注ora_client_ip_addr

3、ess VARCHAR2 客户端的IP地址 ora_database_name VARCHAR2(50) 数据库名称 ora_dict_obj_name VARCHAR2(30) DDL发生的对象名称 ora_dict_obj_owner VARCHAR2(30) DDL发生对象的宿主 ora_dict_obj_type VARCHAR2(20) 对象类别 ora_is_alter_column(column_name INVARCHAR2) BOOLEAN 当某列被修改的时候返回真,否则返回假 ora_is_drop_column(

4、column_name INVARCHAR2) BOOLEAN 当某列被删除的时候返回真,否则返回假 ora_login_user VARCHAR2(30) 登录的用户名 ora_sysevent VARCHAR2(20) 系统事件的名称 is_servererror(error_num in integer)BOLEAN返回系统是否产生某个错误 ORACLE 8I开始,提供了一个新的函数“SYS_CONTEXT”。通过使用SYS_CONTEXT函数可以获得一些和用户相关的信息,比如:SELECT sys_context('USERENV'

5、;,'TERMINAL') FROM DUAL;用户环境的取值包括:l         TERMINAL:客户端操作系统终端的名称     l         LANGUAGE:NLS_LANG的值  l         LANG  :ISO字符集的名称.  l 

6、        SESSIONID:SESSION的IDl         INSTANCE:实例的IDl         ISDBA:是否具有DBA权限l         CLIENT_INFO:64字节的用户信息,可以用DBMS_APPLICATION_INFO设置的值:l 

7、        NLS_TERRITORY :当前SESSION的 territoryl         NLS_CURRENCY:当前SESSION的货币符l         NLS_CALENDAR:当前SESSION的历法l         NLS_DATE_FORMAT:当前SES

8、SION的日期格式l         NLS_DATE_LANGUAGE :显示日期的语言l         NLS_SORT:排序方式(BINARY 或者linguistic)l         CURRENT_USER:当前SESSION拥有权限的用户的名称(比如说当前SESSION是SYS,但是正在执行system.myproc,那么current_u

9、ser就是system)l         CURRENT_USERID :当前SESSION拥有的权限的用户的IDl         SESSION_USER:session所属的用户名l         SESSION_USERID:当前SESSION所属的用户idl       &#

10、160; CURRENT_SCHEMA:当前SESSION缺省的SCHEMA名称,可以用SESSION SET CURRENT_SCHEMA 语句修改.  l         CURRENT_SCHEMAID :当前SESSION缺省的SCHEMA的IDl         PROXY_USER:打开当前SESSION的用户的名称l        

11、PROXY_USERID:打开当前SESSION的用户的IDl         DB_DOMAIN:当前数据库的DOMAINl         DB_NAME:当前数据库的名称l         HOST:客户端的主机名称l         OS_USER:客户端的操作系统用户名

12、l         EXTERNAL_NAME:用户的外部名称。对于SSL用户,使用v.503协议,返回的值是证书中的DNl         IP_ADDRESS:客户端的IP地址l         NETWORK_PROTOCOL:连接串中的PROTOCOL=protocol指明的网络协议l     

13、60;   BG_JOB_ID :如果当前的SESSION是由ORACLE后台进程启动的,那么返回JOB_ID,否则返回空值l         FG_JOB_ID:如果当前SESSION是由ORACLE客户端进程启动的一个JOB,那么返回JOB_ID,否则返回空值  l         AUTHENTICATION_TYPE:返回数据库鉴权的方法,返回值包括:l    

14、;     DATABASE: 使用数据库的用户名口令l         OS:使用操作系统外部用户鉴权l         NETWORK:网络鉴权l         PROXY:OCI的代理连接鉴权  l         AUT

15、HENTICATION_DATA:使用X.503证书鉴权的时候,返回HEX2的证书   oracle 8i新增的数据库事件触发器从ORALCE 8i开始,用户可以通过常见系统级触发器来追踪一些系统事件。通过这些触发器,用户可以进行一些操作,包括审计、把一些对象PIN入共享池、进行一些维护操作等。以下是一些系统级触发器的类型: 触发器触发时间触发条件LogonAfter用户登录成功后LogoffBefore用户退出登录前StartupAfter数据库启动后ShutdownBefore数据库关闭前ServererrorAfter系统发生故障后Logon/Logoff触

16、发器可以用来记录用户等入和退出的时间。数据库启动和关闭触发器可以用来进行一些数据库启动后和关闭前的前处理和后处理。比如在数据库启动的时候把一些PL/SQL对象固定倒内存中。Servererror触发器可以用于记录某些重要的错误信息,以便于跟踪系统,发现故障。在使用系统级触发器前,首先要确认系统参数_system_trig_enabled是否设置为TRUE。   DDL触发器概述通过DDL触发器可以记录特定的DDL操作。DDL触发器是从ORACLE 8i开始具有的触发器类型。在ORACLE 9i中,DDL触发器得到了加强。DDL触发器的触发事件括:l  &

17、#160;      BEFORE / AFTER ALTERl         BEFORE / AFTER CREATEl         BEFORE / AFTER DROPl         BEFORE / AFTER RENAMEl     &#

18、160;   BEFORE / AFTER ANALYZEl         BEFORE / AFTER ASSOCIATE STATISTICSl         BEFORE / AFTER DISASSOCIATE STATISTICSl         BEFORE / AFTER AUDITl   

19、;      BEFORE / AFTER NOAUDITl         BEFORE / AFTER COMMENTl         BEFORE / AFTER DDLl         BEFORE / AFTER GRANTl      

20、;   BEFORE / AFTER REVOKEl         BEFORE / AFTER TRUNCATEl         AFTER SUSPEND要创建DDL触发器,需要一定的系统权限,这些权限包括:l         create triggerl      &

21、#160;  create any triggerl         administer database triggerl         alter any triggerl         drop any triggerDDL触发器可以用于细化的DDL操作审计。一般的做法是设计一张日志表,当DDL触发器激活后,通过系统相关的系统事件函数获

22、取锁需要的信息,然后把数据插入日志表中。这样,就可以记录系统中需要审计的DDL操作。DDL触发器可以针对Database级或者SCHEMA级要注意的是,DDL触发器仅对以下的对象有效:cluster, function, index, package, procedure, role, sequence,  synonym, table, tablespace, trigger, type, view,  user。 使用系统级触发器审计用户登录情况    本节的例子介绍了使用系统的LOGON/LOGOFF触发器来审计用户登录的情况。对于需要掌

23、握用户在线时间的系统中十分有用。首先要创建一张表,该表保存用户登录的信息。然后创建三个触发器,分别对LOGON/LOGOFF和相关的SERVERERROR进行审计。创建审计记录表:CREATE TABLE log_audit (login_date DATE, logoff_date date,username VARCHAR2(20),user_ip  varchar2(20),error_code varchar2(15); 创建记录登录错误的触发器:CREATE OR REPLACE TRIGGER log_errors AFTER SERVERERROR ON DATABAS

24、E BEGIN  IF (IS_SERVERERROR (1017) THEN   insert into system.log_audit (login_date,error_code) values(sysdate,'ORA-1017');  END IF; END;  创建登录审计触发器:CREATE OR REPLACE TRIGGER logon_audit AFTER LOGON ON DATABASE BEGIN  insert into system.log_audit(login_date,username,u

25、ser_ip) values(sysdate,user,ora_client_ip_address); END;  创建退出审计触发器:CREATE OR REPLACE TRIGGER logoff_audit BEFORE LOGOFF ON DATABASE BEGIN  insert into system.log_audit (logoff_date,username,user_ip) values(sysdate,user,ora_client_ip_address); END; /    本例子可以对数据库的登录和退出记录日志。当

26、触发器发生故障的时候(比如log_audit表所在的表空间满的时候,会导致用户登录失败。此时,需要使用具有ADMINISTER DATABASE TRIGGER权限的帐号登录,然后将审计所使用的触发器disabale,或者修正触发器的错误。因此在使用系统事件触发器的时候要十分谨慎。  使用系统级触发器禁用DDL语句对于一个上线运行的系统,使用DDL操作是十分谨慎的。为了防止不必要的误操作,可以通过DDL触发器对某些表禁用DDL操作。可以在需要禁止的操作类型上使用raise_application_error函数来禁止操作,比如:CREATE OR REPLACE TRIGGER DD

27、L_FB before  ALTER OR DROP  OR RENAME on schema  BEGIN  Raise_application_error(-20030,此系统已经运行,不允许对表进行DDL维护);end;对于设置了这类触发器的用户,如果需要修改表结构,那么需要首先把这个触发器关掉。 使用系统级触发器审计重要帐号的DDL语句如果要审计数据库中的DDL操作,那么可以通过DDL触发器来实现,本节介绍一个例子,把数据库中的所有DDL操作都记录下来。本例子可以在oracle 8i或更高的版本中使用。第一步,创建表空间和相关的日志表:creat

28、e tablespace statlog datafile '/oradata/statlog.dbf' size 200m; create table stat$log_ddl( ddl_date date, user_name varchar2(30), ip_addr VARCHAR2(30),obj_name VARCHAR2(50), ddl_type      VARCHAR2(30), object_type   VARCHAR2(18), owner         VARCHAR2(30), SQL_TEXT      VARCHAR2(1000) TABLESPACE STATLOG;第二步,创建数据库级的DDL触发器,把所有的DDL操作都记录下来 CREATE OR REPLACE TRI

温馨提示

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

最新文档

评论

0/150

提交评论