Oracle11g安全审计--重要帐号的DDL语句操作记录

 

Oracle11g安全审计--重要帐号的DDL语句操作记录

如果要审计数据库中的DDL操作,那么可以通过DDL触发器来实现,把数据库中的所有DDL操作都记录下来。本例子适用于oracle 9i或更高的版本。操作方法如下:

 

第一步,创建表空间和相关的日志表:

 

 
  
  1. create tablespace STAT_LOG
  2. LOGGING  
  3. datafile   
  4. '/apps/oracle/oradata/statlog.dbf' size 2048m AUTOEXTEND ON NEXT 128M  MAXSIZE 8G  
  5. EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT  AUTO;  
  6.  
  7. create table stat$log_ddl  
  8. (  
  9. ddl_date date,  
  10. user_name varchar2(30),  
  11. ip_addr VARCHAR2(30),  
  12. obj_name VARCHAR2(50),  
  13. ddl_type VARCHAR2(30),  
  14. object_type VARCHAR2(18),  
  15. owner VARCHAR2(30),  
  16. SQL_TEXT VARCHAR2(1000)  
  17. ) TABLESPACE STAT_LOG;  

第二步,创建数据库级的DDL触发器,把所有的DDL操作都记录下来


 

 
  
  1. CREATE OR REPLACE TRIGGER DDL_audit AFTER CREATE OR ALTER OR DROP OR TRUNCATE OR 
  2. GRANT OR REVOKE OR RENAME   
  3. on DATABASE   
  4. declare 
  5. ipaddr varchar2(20);  
  6. STEXT VARCHAR2(1000);  
  7. BEGIN 
  8. begin 
  9. select sys_context('USERENV''IP_ADDRESS'into ipaddr FROM dual;   
  10. exception when others then 
  11. ipaddr:='-';   
  12. end;  
  13. begin 
  14. 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%' ;   
  15. exception when others then 
  16. STEXT:='-';   
  17. end;  
  18. insert into sys.stat$log_DDL values   
  19. (sysdate,  
  20. user,  
  21. nvl (ipaddr,'-'),  
  22. NVL(ora_dict_obj_name,'-'),  
  23. NVL(ORA_SYSEVENT,'-'),  
  24. NVL(ora_dict_obj_type,'-'),  
  25. NVL(ora_dict_obj_owner,'-'),  
  26. STEXT  
  27. );  
  28. exception when others then 
  29. null;  
  30. END;  

 

 

DDL操作记录审计效果如下:

 

 
  
  1. select ddl_date,user_name,ip_addr,obj_name,ddl_type,sql_text from stat$log_ddl;  
  2. SQL> /  
  3.  
  4. DDL_DATE            USER_NAME  IP_ADDR              OBJ_NAME   DDL_TYPE   SQL_TEXT  
  5. ------------------- ---------- -------------------- ---------- ---------- --------------------------------------------------  
  6. 2012-10-25 23:31:40 DBA_USER   -                    T1         CREATE     -  
  7. 2012-10-25 23:32:32 DBA_USER   -                    N_TEST     DROP       -  
  8. 2012-10-25 23:36:04 DBA_USER   172.18.130.114       T1         DROP       -  
  9. 2012-10-25 23:42:49 DBA_USER   172.18.130.114       TEST       ALTER      alter table test drop(name)  
  10. 2012-10-25 23:43:08 DBA_USER   172.18.130.114       TEST       ALTER      alter table test add(name varchar2(20))  
  11. 2012-10-25 23:44:10 DBA_USER   172.18.130.114       TEST       ALTER      alter table test rename to test01  
  12. 2012-10-25 23:44:44 DBA_USER   172.18.130.114       TEST01     RENAME     -  
  13. 2012-10-25 23:51:31 DBA_USER   172.18.130.114       TEST       ALTER      alter table test add(addr varchar2(10))  
  14. 2012-10-25 23:52:12 DBA_USER   172.18.130.114       TEST       ALTER      alter table test rename column addr to ipaddr  
  15. 2012-10-26 00:22:10 DBA_USER   172.18.130.114       BYTE_TEST  TRUNCATE   -  
  16.  
  17. 10 rows selected.