天天看點

Oracle11g安全審計--重要帳号的DDL語句操作記錄

Oracle11g安全審計--重要帳号的DDL語句操作記錄

如果要審計資料庫中的DDL操作,那麼可以通過DDL觸發器來實作,把資料庫中的所有DDL操作都記錄下來。本例子适用于oracle 9i或更高的版本。操作方法如下:

第一步,建立表空間和相關的日志表:

create tablespace STAT_LOG

LOGGING  

datafile   

'/apps/oracle/oradata/statlog.dbf' size 2048m AUTOEXTEND ON NEXT 128M  MAXSIZE 8G  

EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO;  

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 STAT_LOG;  

第二步,建立資料庫級的DDL觸發器,把所有的DDL操作都記錄下來

CREATE OR REPLACE TRIGGER DDL_audit AFTER CREATE OR ALTER OR DROP OR TRUNCATE OR 

GRANT OR REVOKE OR RENAME   

on DATABASE   

declare 

ipaddr varchar2(20);  

STEXT VARCHAR2(1000);  

BEGIN 

begin 

select sys_context('USERENV', 'IP_ADDRESS') into ipaddr FROM dual;   

exception when others then 

ipaddr:='-';   

end;  

select SQL_TEXT INTO STEXT FROM v$open_cursor WHERE UPPER(sql_text) LIKE 'ALTER%'  OR  UPPER(sql_text)  LIKE 'RENAME%' OR  UPPER(sql_text)  LIKE 'DROP%' OR UPPER(sql_text)  LIKE 'TRUNCATE%' ;   

STEXT:='-';   

insert into sys.stat$log_DDL values   

(sysdate,  

user,  

nvl (ipaddr,'-'),  

NVL(ora_dict_obj_name,'-'),  

NVL(ORA_SYSEVENT,'-'),  

NVL(ora_dict_obj_type,'-'),  

NVL(ora_dict_obj_owner,'-'),  

STEXT  

);  

null;  

END;  

DDL操作記錄審計效果如下:

select ddl_date,user_name,ip_addr,obj_name,ddl_type,sql_text from stat$log_ddl;  

SQL> /  

DDL_DATE            USER_NAME  IP_ADDR              OBJ_NAME   DDL_TYPE   SQL_TEXT  

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

2012-10-25 23:31:40 DBA_USER   -                    T1         CREATE     -  

2012-10-25 23:32:32 DBA_USER   -                    N_TEST     DROP       -  

2012-10-25 23:36:04 DBA_USER   172.18.130.114       T1         DROP       -  

2012-10-25 23:42:49 DBA_USER   172.18.130.114       TEST       ALTER      alter table test drop(name)  

2012-10-25 23:43:08 DBA_USER   172.18.130.114       TEST       ALTER      alter table test add(name varchar2(20))  

2012-10-25 23:44:10 DBA_USER   172.18.130.114       TEST       ALTER      alter table test rename to test01  

2012-10-25 23:44:44 DBA_USER   172.18.130.114       TEST01     RENAME     -  

2012-10-25 23:51:31 DBA_USER   172.18.130.114       TEST       ALTER      alter table test add(addr varchar2(10))  

2012-10-25 23:52:12 DBA_USER   172.18.130.114       TEST       ALTER      alter table test rename column addr to ipaddr  

2012-10-26 00:22:10 DBA_USER   172.18.130.114       BYTE_TEST  TRUNCATE   -  

10 rows selected. 

     本文轉自vcdog 51CTO部落格,原文連結:http://blog.51cto.com/255361/1037143,如需轉載請自行聯系原作者