Denetim izleri yapılan konfigürasyona göre veritabanında tablo olarak veya işletim sisteminde dosya olarak tutulmaktadır. Bu denetim izlerini silmek veya başka ortamlara taşımak için farklı yöntemler kullanılabilir. Fakar Oracle 11g ile beraber denetim izlerinin yönetilmesi için DBMS_AUDIT_MGMT paketi kullanılmaya başlanmıştır. Böylece değişik ortamlarda tutulan denetim izleri tek bir paket ile yönetilebilir hale gelmiştir. DBMS_AUDIT_MGMT paketi denetim izleri üzerinde taşıma silme işlemi yaparken veritabanındaki sessionları bekler duruma getirmez ve kullanıcılar çalışmalarına kesintisiz devam ederler. Bu nedenle değişik yöntemler ile denetim izlerini yönetebilmemize rağmen(Örneğin tabloda ise DELETE komutu, işletim sisteminde ise rm komutu kullanabiliriz) DBMS_AUDIT_MGMTpaketini kullanmak daha doğrudur.

Veritabanında Saklanılan Denetim İzlerinin Farklı Tablespacelere Taşınması

Veritabanında tutulan standart denetim izleri SYS.AUD$ tablosunda, ayrıntılı denetim izleride(Fine Grained Auditing-log mekanizması diyebiliriz) FGA_LOG$ tablolarında tutulur. Veritabanı ilk yaratıldığında bu tablolar varsayılan olarak SYSTEM tablespace’inde tutulur. Ama tabloların büyümesi ve denetleme politikası nedeniyle SYSTEM tablespace üzerinde baskı oluşabilir. Bu nedenle sık sık silinmesi ve sürekli ekleme yapılan tabloları ayrı bir tablespace’e taşımak isteriz.

Bu işlem DBMS_AUDIT_MGMT.set_audit_trail_location veritabanı paketi ile yapılır. Bu paket 2 tane parametre alır. Bir tanesi taşımak istediğiniz tablo türünü gösteren parametre, diğeri ise tabloların taşınacağı tablespace adıdır.

Tablo türünü gösteren parametre aşağıdaki 3 değerden birini alır.

  • DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD: Standard denetim izi (AUD$).
  • DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD: Ayrıntılı enetim izi (FGA_LOG$).
  • DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD : Standart ve Ayrıntılı denetim izi için.
SELECT table_name, tablespace_name
FROM dba_tables
WHERE table_name IN ('AUD$', 'FGA_LOG$')
ORDER BY table_name;
TABLE_NAME   TABLESPACE_NAME
------------------------------ ------------------------------
AUD$            SYSTEM
FGA_LOG$        SYSTEM

CREATE TABLESPACE AUDIT_TS
DATAFILE
'/u01/app/oracle/oradata/ORCL/AUDIT_TS' SIZE 104857600 AUTOEXTEND ON NEXT 10485760 MAXSIZE UNLIMITED;


BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type = DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
audit_trail_location_value = 'AUDIT_TS');
END;
/


SELECT table_name, tablespace_name
FROM dba_tables
WHERE table_name IN ('AUD$', 'FGA_LOG$')
ORDER BY table_name;
TABLE_NAME   TABLESPACE_NAME
------------------------------ ------------------------------
AUD$           AUDIT_TS
FGA_LOG$       SYSTEM


BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type = DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
audit_trail_location_value = 'AUDIT_TS');
END;
/


SELECT table_name, tablespace_name
FROM dba_tables
WHERE table_name IN ('AUD$', 'FGA_LOG$')
ORDER BY table_name;

TABLE_NAME  TABLESPACE_NAME
------------------------------ ------------------------------
AUD$         AUDIT_TS
FGA_LOG$     AUDIT_TS

NOT : Denetim izleri üzerinde işlem yaparken birçok  parametre kullancağız. Bu parametrelerin sorgulanması için dba_audit_mgmt_config_params görüntüsünü kullancağız.

Dosya Olarak Tutulan Denetim İzlerinin Yönetilmesi

Denetim izleri, veitabanında XML formatında veya text dosyası olarak tutulurlar. Bu dosyaların işletim sisteminde sayısını iki ayrı parametre ile yönetiriz.

SET_AUDIT_TRAIL_PROPERTY prosedürü, denetim izi olarak tutulan dosyanın maksimum boyutu veya üzerine kaç gün boyunca yazılabileceğini belirlememizi sağlar.

AUDIT FILE MAX SIZE  : Dosyanın maksimum boyutu KB cinsinden

AUDIT FILE MAX AGE : Dosyanın yaşı gün cinsinden

Bir dosya bu iki sınırdan herhangi birine ulaştığında denetim iznini tutmak için otomatik olarak yeni bir dosya yaratılır. Bu parametrelerin varsayılan değerleri;

Oracle Audit Tablespace Move

 

 

 

 

XML dosyasının maksimum 20000 KB boyutunda olmasını istersek, set_auidit_trail_property

prosedürünü şu parametrelerle çağırırız.

BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_property(
audit_trail_type = DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
audit_trail_property  = DBMS_AUDIT_MGMT.OS_FILE_MAX_SIZE,
audit_trail_property_value  = 20000);
END;
/

Oracle Audit Tablespace Change

 

 

 

 

Veya her 10 günde bir işletim sistemi dosyasının değişmesini istersek aşağıdaki gibi çalıştırabiliriz.

BEGIN
DBMS_AUDIT_MGMT.set_audit_trail_property(
audit_trail_type  = DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
audit_trail_property  = DBMS_AUDIT_MGMT.OS_FILE_MAX_AGE,
audit_trail_property_value  = 10);
END;
/

NOT : clear_audit_trail_property prosedürü, tanımlanan dosya kısıtlamalarını kaldırmak için kullanılır. Bu prosedürü çağırırken use_default_values -> TRUE yapılırsa belirtilen kısıtlamalar varsayılan değerine atanır. use_default_values -> FALSE yapılırsa tanımlanan kısıtlamalar kalkmış olur.

BEGIN
DBMS_AUDIT_MGMT.clear_audit_trail_property(
audit_trail_type  = DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
audit_trail_property  = DBMS_AUDIT_MGMT.OS_FILE_MAX_AGE,
use_default_values  = TRUE);
END;
/
BEGIN
DBMS_AUDIT_MGMT.clear_audit_trail_property(
audit_trail_type  = DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
audit_trail_property  = DBMS_AUDIT_MGMT.OS_FILE_MAX_AGE,
use_default_values  = FALSE);
END;
/

Denetim İzlerinin Silinmesi

Güvenlik politikaları gereği, denetim izleri belirli bir süre tutulduktan sonra arşivlenmeli ve silinmelidir. Arşivlenme işlemi her sistem için farklıdır. Örneğim denetim izlerini Oracle veritabanında tablo olarak tutuyorsanız, denetim izleri veritabanı linkleri ile başka bir veritabanına atılabilir veya aynı veritabanı içerisinde başka bir tabloya insert edilip bu tablodan export alınabilir.

Eğer audit vault kullanıyorsak Audit Vault’un denetim izlerinin arşivlenmesi ve silinmesi için sağladığı imkanları kullanmalıyız.

Arşivlenen denetim izlerinin silinmesi konusundaki prosedürler ise DBMS_AUDIT_MGMT paketine eklenmiştir. Parametrelere bakacak olursak.Oracle Audit Data Delete

 

 

 

Yukarıdaki BATCH SIZE parametreleri silme işleminin nasıl yapılacağını göstermektedir. Veritabanında çok fazla sayıda denetim log kaydı varsa bu kayıtların tamamının silinmesi yerine belirli sayıda kaydın silinmesi, veritabanı performansını etkilemez. Bizim örneğimizde topluca silinecek kayıt sayısı 10.000(DB AUDIT CLEAN BATCH SIZE) dir olarak verilmiştir. Aynı şekilde dosyaları silerken tüm dosyaların silinmesi işletim sistemini etkileyebilir. OS FILE CLEAN BATCH SIZE parametresi ise topluca silinebilecek dosya sayısını belirtir.

Örneğin XML dosyasında tutulan denetim izlerinin nasıl silineceği gösterelim. Öncelikle silinecek denetim izleri için bir kerelik yapılacak olan init_cleanup işlemi yapılır. İnit_cleanup prosedüründe denetim izi türü ve izleri silme aralığı(default_cleanup_interval) tanımlanır.  Bu değer saat cinsindendir.

BEGIN
DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type  = DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval  = 24 );
END;
/

Oracle Audit Clean

 

 

 

 

XML denetim izlerini sileceğimiz için, denetim izlerine bakıp hangi kayıtları sileceğimize karar verelim. Örneğin 16/08/2017 14:00:00 tarihinden eski tüm denetim izlerini silelim.

select count(*) from v$xml_audit_trail where to_char(extended_timestamp,'yyyymmddhh24miss') < '20170816140000';

COUNT(*)
----------
6

Dosyaların tutulduğu denetim XML dosyalar aşağıda gösteilmiştir. Bu dosyaların silinmesi ile denetim iznide silinmiş olacaktır.

[oracle@single1 adump]$ ls -l | awk '{print $9}'
ORCL_ora_26145_20170816135821117535216458.xml
ORCL_ora_26156_20170816135825439436041442.xml
ORCL_ora_26204_20170816135851762930978647.xml
ORCL_ora_26480_20170816140129490139568203.xml
ORCL_ora_26484_20170816140132716999488990.xml
ORCL_ora_27496_20170816141649368788261843.xml
ORCL_ora_27506_20170816141653676585884698.xml
ORCL_ora_27537_20170816141704127179546507.xml
ORCL_ora_27572_20170816141719406926027828.xml
ORCL_ora_27582_20170816141722496656792804.xml
ORCL_ora_31170_20170816151515838448143795.aud
ORCL_ora_31170_20170816151517682193143795.aud
ORCL_ora_31212_20170816151517698206143795.aud
ORCL_ora_31221_20170816151522025324143795.aud
ORCL_ora_31312_20170816151613324300143795.aud
ORCL_ora_31318_20170816151616145043143795.aud
ORCL_ora_3132_20170816162309871894143795.aud
ORCL_ora_3132_20170816162311352326143795.aud
ORCL_ora_31610_20170816152115811166143795.aud
ORCL_ora_3171_20170816162311368127194954.xml
ORCL_ora_3209_20170816162315732555595830.xml
ORCL_ora_3555_20170816162621668254293794.xml
ORCL_ora_3557_20170816162623631536296289.xml

Silme işlemine başlamadan önce veritabanına hangi tarihten önceki dosyaları sileceğimizi girmemiz gerekir. Set_last_archive_timestamp prosedürü ile denetim izi türü ve denetim izlerinin hangi tarihten itibaren silineceği bilgileri belirlenir.

BEGIN
DBMS_AUDIT_MGMT.set_last_archive_timestamp (
audit_trail_type  = DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
last_archive_time = to_date('16-08-2017 14:00:00 ','dd-mm-yyyy hh24:mi:ss') );
END;
/

select * from dba_audit_mgmt_last_arch_ts;

Oracle Audit DBMS_AUDIT_MGMT

 

 

Artık arşivlenmeyi clean_audit_trail prosedürü ile başlatabilriz. Burada dikkat edilmesi gereken use_last_arch_timestamp parametresi TRUE olmalıdır. Yoksa silme işlemine izin verilmez.

BEGIN
DBMS_AUDIT_MGMT.clean_audit_trail (
audit_trail_type = DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
use_last_arch_timestamp = TRUE );
END;
/

Denetim izleri artık silinmiştir. İşlemin başarılı olup olmadığını görmek için denetim izi kayıtlarına bakalım. Öncelikle XML denetim izi kayıtlarını gösteren v$xml_audit_trail görüntüsüne bakalım.

select count(*) from v$xml_audit_trail where to_char(extended_timestamp,'yyyymmddhh24miss') '20170816140000';
COUNT(*)
----------
 0

Anıl Akduygu Oracle Veritabanı Güvenliği
https://docs.oracle.com/cd/E11882_01/server.112/e10575/tdpsg_auditing.htm#TDPSG52529
http://www.kamilturkyilmaz.com/2011/01/21/oracle%E2%80%99-da-audit-mekanizmasi/

Yararlı olması Dileğiyle
Yazar : Mustafa Bektaş Tepe

Loading