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

技術小胖子發表於2017-11-07

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. 

 

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


相關文章