Oracle’ da Audit Mekanizması - Kamil TÜRKYILMAZ | Oracle BlogKamil TÜRKYILMAZ | Oracle Blog
Peki Auditing nedir ? Özetle, seçilen bazı userların (veya hepsinin) database içerisinde yapmış olduğu aktivitelerin monitör edilmesi ve sonra kayıt altına alınarak saklanması işlemine auditing diyebiliriz. Bu monitöring ve kayıt altına alma işlemi, kullanıcı adı, işlemin yapıldığı an, hangi uygulama kullanılarak yapıldığı, hangi makine üzerinden sisteme giriş yapıldığı gibi bilgileri kapsar. Bir işlemin auditlenmesi için mutlaka başarılı olması gerekmemektedir, başarısız olan tüm işlemlerde izlenebilmektedir. (başarız olan işlemler kimi zaman başarılı olanlardan daha fazla önem taşırlar. Sürekli olarak birinin, sistemde yer alan bir kullanıcı adı ile sisteme giriş yapmayı denemesi şüphelenmek ve araştırmak için yeterli bir nedendir.)
Neden Aduting yapılmaya ihtiyaç duyulur ? Bunun nedenleri ana hatlarıyla ;
Yapılan İşlemlere Ait Sorumluları Tespit Etmek İçin;
Davetsiz Misafirleri Caydırmak İçin ,
Şüpheli İşlemleri Araştırmak için,
Yetkisiz Kullanıcıya Ait İşlemleri Tespit Etmek ve Denetime Bildirmek İçin,
Özel bir database işlemi ile ilgili istatistik toplama ve monitor etmek için,
Yetki ve Erişim Kontolleri ile Problemleri Tespit Etmek İçin.
Neden auditing yapacağımıza karar verdikden sonra, karar verilmesi gereken 2 konu karşımıza çıkmaktadır. Bunlardan birincisi, nelerin audit edileceğine ikincisi ise audit kayıtlarının nerede saklanacağına karar vermekteir. Database’ deki her oturumu her işlemi auditlememelisiniz, sonuçta bu kayıtların tutulması için de bir kaynak kullanılması gerekmektedir ki, audit kayıtları yanlış bir konfigurasyonla çok hızlı büyüyebilir ve sizi olmadık bir anda zor durumda bırakabilir. Sorun sadece kaynak problemi değildir aslında, yapılan auditing işleminin sisteme getirdiği ek bir performans kaybı olmaktadır. Dolayısıyla herşeyi auditlemek kimi zaman çözüm olmakdan uzak bir hal almaktadır. Bir diğer neden ne kadar çok auditin işlemi yaparsanız o kadar çok incelemeniz, denetlemeniz gereken kayıt ortaya çıkacaktır.
Audit işlemleri ile ilgili olarak nasıl yapılacağı konusu aslında ne tarz bir auditing metodu uygulayacağınızla birebir ilişkilidir. Audit yöntemlerinden bahsedelim biraz;
1. Genel Aktivitilerin Standart Auditing ile Auditlenmesi ;
Satndart auditing, SQL statamentlerın, yetkilerin, schema objelerinin ve networkdeki aktivitilerin auditlenmesidir. Standart auditing AUDIT komutu ile başlatılır, NOAUDIT komutu ile sonlandırılır. Bu auditing işlemi AUDIT ANY yetkisi ile AUDIT SYSTEM yetkisine sahip herhangi bir kullanıcı yapabilir.
Audit kayıtları, güvenlik işinden sorumlu adminin database seviyesinde auditingi enable etmesiyle başlar. Auditing enable edilmesiyle , database çalışan SQL statementının çalışmasından sonra bir audit kaydı üretir. Üretilen bu audit kaydı kullanıcının transactionı commit etmesinden bağımsızdır. Aynı şekilde başlatılan bir rollback işlemide yine yeni bir audit kaydı oluşturur.
Burada AUDIT_TRAIL parametresi önemlidir, database tarafından tespit edilen audit kayıtlarının nerede ve nasıl saklanacağının belirlendiği parametredir. Bu parametrenin şu anki değerini görmek için ;
Şu an bu değer NONE olduğundan dolayı auditing özelliği bu database’ de disable anlamına gelmektedir. AUDIT_TRAIL parametresi statik bir parametre olduğundan dolayı yapılan değişikliğin geçerli olması için database’ in restart olması gerekmektedir. Değişikliği yapmak içinse;
Variable Size 96473000 bytes
Komutlarından faydalanılabilir. Buarada audit_trail parametresini “db” olarak set ettik. Bunun anlamı ve diğer alternatiflerini şöyle özetleyebiliriz ;
DB ; Audit kayıtlarının database’ de tutulması anlamına gelir. Bu kayıtlar database’ de sys.aud$ tablosunda saklanır. (sys userına ait audit kayıtları hariç, sys userına ait audit kayıtlar OS’ ye yazılır) Audit_trail parametresi DB olarak set edili iken database’ i read only modda açmak isterseniz, database size aşağıdaki gibi hata dönecektir. Bunun nedeni, audit_trail db olarak set edili iken database’ i read only olarak açmak istiyorsanız önce audit_trail parametresini ya OS yada NONE olarak set etmeniz gerektiğidir (read only modda iken audit kayıtlarını database’ e write edemeyeceğinden dolayı).
Variable Size 100667304 bytes
OS ; Audit kayıtları operating sistemde belirtilen bir path’ de saklanır. Buraya file bazında çıkan dosyalar .aud uzantılı olur. Burada iki farklı parametre daha var set etmemiz gereken, AUDIT_FILE_DEST parametresi audit kayıtlarının nerede tutulacağının set edildiği parametredir. Aşağıdaki şekilde set edilebilir;
alter system set AUDIT_FILE_DEST =’d:\oracle11gR2\audit’ scope=spfile;
Diğer parametre SYS userının auditlenip auditlenmemesi ile ilgili, eğer SYS userının sessionlarıda auditlenecekse AUDIT_SYS_OPERATIONS parametresi TRUE olarak set edilmelidir.
10g’ de olmayan, 11g ile yeni gelen bir parametremiz daha var; AUDIT_SYSLOG_LEVEL parametresi. Bu parametre sadece Unix ortamlarda kullanılmaktadır. Bu parametre manuel olarak initSID.ora dosyasına eklenilerek set edilebilir. İki farklı değer alabilir;
Facility; İşletim sistemi’ nin, mesajı loglayan bölümünü ifade eder. Kabul ettiği değerler; user, local0–local7, syslog, daemon, kern, mail, auth, lpr, news, uucp ve cron.
Local0 – local7 arasındaki değerler, syslog mesajlarını kategorize etmemize olanak sağlayan önceden tanımlanmış etiketlerdir. Bu kategoriler, syslog aracının ulaşabileceği log dosyaları veya diğer dizinler olabilir. Bu etiket tipler ile ilgili ayrıntılı bilgi için, syslog aracının MAN sayfasına bakabilirsiniz.
Priority ; Mesajın öncelik derecesini belirler. Kabul ettiği değerler, notice, info, debug, warning, err, crit, alert ve emerg’ dir.
Bu parametreyi database’ e set etmek için ;
DB, EXTENTED ; Audit kayıtları sys.aud$ tablosuna kaydedilir aynı zamanda Sqlbind değerleri ile sqltext’ deki Clob bilgileride bu tabloda tutulur.
Aşağıdaki gibi 2 farklı şekilde set edilebilir.
ALTER SYSTEM SET AUDIT_TRAIL=’DB’,’EXTENDED’ SCOPE=SPFILE;
Aşağıdaki gibi bu iki kriteri tek tırnak içerisinde kullanılmamalıdır;
ALTER SYSTEM SET AUDIT_TRAIL=’DB, EXTENDED’ SCOPE=SPFILE;
XML ; Auditing kayıtları operating system de xml dosyası olarak saklanır. XML formatındaki audit kayıtlarının default lokasyonu windows’ da dahil olmak üzere tüm platformlarda; $ORACLE_HOME/admin/$ORACLE_SID/adump lokasyonudur.
Sys ve zorunlu audit dosyalarını operating sisteme XML fromatında yazmak için ; Audit_trail = XML or XML,ExTENDED, AUDIT_SYS_OPERATIONS=TRUE fakat AUDIT_SYSLOG_LEVEL parametresi set edilmemiş olmalıdır.
Sys ve zorunlu audit kayıtlarını syslog Audit file’ lerine, Standart Audit kayıtlarını XML Audit file’ lerine yazmak için; Audit_trail = XML or XML,ExTENDED, AUDIT_SYS_OPERATIONS=TRUE ve AUDIT_SYSLOG_LEVEL parametreside set edilmiş olmalıdır.
ALTER SYSTEM SET AUDIT_TRAIL=XML SCOPE=SPFILE;
XML, EXTENTED ; Auditing kayıtları operating system de xml dosyası olarak saklanır aynı zamanda Sqlbind değerleri ile sqltext’ deki Clob bilgileride burada saklanır.
Bu parametreyi set etmek içinde aşağıdaki iki komuttan biri kullanılabilir.
ALTER SYSTEM SET AUDIT_TRAIL=’XML’,’EXTENDED’ SCOPE=SPFILE;
Aşağıdaki gibi çalıştırılmamalıdır;
ALTER SYSTEM SET AUDIT_TRAIL=’XML, EXTENDED’ SCOPE=SPFILE;
NONE ; Auditing disable anlamına gelir.
Audit_trail parametresini DB olarak set ettiğimizde belirlediğimiz audit kriterlerine uygun sessionlar geldikçe bu tabloda dolmaya başlayacaktır.
select sessionid, userid, userhost, terminal, action# from sys.aud$
SESSIONID USERID USERHOST TERMINAL ACTION#
14708 KAMIL WORKGROUP\KHOME KHOME 101
Burada action alanı çalıştırılan sql komutunun kodunu ifade etmektedir. Hangi kodun hangi komuta denk geldiğini aşağıdaki sorgu ile çekebilirsiniz.
Select * from AUDIT_ACTIONS ;
Biraz da AUDIT ve NOAUDIT komutlarının nasıl çalıştığından bahsedelim.
Audit veya Noaudit komutları sisteme gönderilirken komut sonlarında yer alan aşağıdaki 3 parametre önemlidir;
WHENEVER SUCCESSFUL cümlesi; herhangi bir audit veya noaudit komutunun sonunda bu cümle yer alıyorsa, çalıştırılan komut başarılı olmak kaydıyla auditleneceği veya auditlenmeyeceği anlamına gelir. Yani başarısız olan komut üzerinde işlem yapılmaz.
WHENEVER NOT SUCCESSFUL cümlesi; Eğer komutun sonunda bu cümle yer alıyorsa, başarısız olan komutların auditleneceği veya auditlenmeyeceği anlamına gelir. Başarılı olan komut üzerinde işlem yapılmayacak demektir.
Her İkiside kullanılmazsa; Çalıştırılan Audit/Noaudit komutu içerisinde yukarıda belirtilen kısımlar kullanılmaz ise, hem başarılı hemde başarız tüm işlemlerin auditleneceği/auditlenmeyeceği anlamına gelir.
AUDIT CREATE TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;
Bu script ile create table scriptini çalıştıran tüm userlar içerisinde sadece başarız olanlar (çalıştırdığı komutu hata verenler) auditlenecek demektir.
Oracle audit komutlarında BY ACCSESS cümleciğini kullanmayı önerir. Oracle 11gR2 ile birlikte audit komutunun sonunda by accsess cümleciği kullanılmasa bile defaultunda yer aldığı için kullanılacaktır. Bu komutu kullanmanın bir takım avantajları vardır. Bu avantajları özetleyecek olursak ;
BY ACCSESS komutu kullanıldığında, elde edilen audit kayısında daha fazla bilgi yer alacaktır. Örneğin, execution status (return code), execution zamanı vetarihi, kullanılan privilege, sql text’ i ve bind variable değerleri gibi . Ek olarak BY ACCSESS kullanımı ile yapılan işleme ait SCN ‘ ıda kaydettiğinden geri dönüş gibi bir aksiyon alınması gerektiğinde bu bilgi ile Flashback komutları kullanılarak çok rahat eski veriye ulaşım sağlanabilecektir.
Oracle database’ i çalışan her bir sql statement’ını, kullanılan bir privilege ‘ ı ve auditlenen her nesneye erişimi kaydeder. Bu kayıtlar neticesinde bu işlemin kaç defa yapıldığını bulmanıza da yardımcı olur.
BY ACCSESS audit kayıtlarında oturum açma ve kapatma kayıtlarını fine-grained zamanları ile birlikte tutar.
BY ACCSESS kullanımına örnek olarak ;
AUDIT SELECT TABLE BY ACCESS;
Spesifik bir Usera ait işlemlerin Auditlenmesi ;
Örneğin, Kamil ve Hakan userının çalıştırmış olduğu tüm selectler ile Updateleri auditlenmesini istersek;
AUDIT SELECT TABLE, UPDATE TABLE BY KAMIL,HAKAN BY ACCESS;
Başlıklar altında örnek scriptler başlangıçda az gibi algılanabilir.
NOAUDIT Komutunun Çalıştırılması ;
Audit edilen bir nesne , system privilege, veya bir kullanıcının audit edilmesini n kaldırılması, iptal edilmesini sağlar. NOAUDIT komutunda WHENEVER SUCCESSFUL ve WHENEVER NOT SUCCESSFUL kullanımına dikkat edilmelidir, burada da AUDIT’ dekine benzer bir kullanım sözkonusudur, bu cümle NOAUDIT komutunun sonunda kullanılmazsa başarılı/başarısız tüm işlemler audit kapsamı dışına çıkarılmış olur.
Audit işlemlerleri ile ilgili olarak konu içerisinde vermiş olduğum örnekler ileride konular detaylandıkça artacağından şu aşamada konunun anlaşılması için yeterli olacağını düşünüyorum.
SQL Cümlelerinin Auditlenmesi ;
Database de yapılan tüm selectleri ayırt etmeksizin auditlemek istersek ;
Eğer tüm SQL komutlarını auditlemek istiyorsanız, user connectionlarını veya var olmayan nesnelere ait referanslar için aşağıdaki adımları izleyebilirsiniz;
Userların tüm SQL Statement’ larının Auditlenmesi ; ALL STATEMENTS cümleciği ile sadece top-level SQL sorguları auditlenebilir. Bu audit seçeneği diğer audit seçeneklerinden farklıdır. Eğer sql statement’ ı pl/sql proceduru içerisinden çalıştırılıyorsa, All Statement opsiyonu bunları auditlemeyecektir. Bu audit opsiyonu diğer set edilmiş olan audit opsiyonlarından etkilemez.
Kullanımı ile örnek ;
AUDIT ALL STATEMENTS BY KAMIL BY ACCESS WHENEVER SUCCESSFUL;
Userlar tarafından çalıştırılan tüm Sql Statement’ larının (Komutların Kısayolları İl e) Auditlenmesi ;
Burada ifade edilmek istenen İndex, Procedure, Database Link vs. gibi bazı komutların kısayolları ile bu komutlar ile yapılan tüm işlemleri auditleyebilirsiniz. Oracle’ da çok fazla sayıda komut olduğundan dolayı komutlara ait kısayolları buraya yazmaktansa merak edenler aşağıdaki linkden bunlara ulaşabilirler;
Bu konuyla ilgili örnek olarak;
AUDIT ALL BY KAMIL BY ACCESS;
Kullanıcı Ayıt Etmeksizin Geçerli Oturumdaki Tüm SQL Statementlarının Auditlenmesi ; All Statement audit seçeneği için IN SESSION CURRENT cümleciği ile top-level sql statementlarını session sonlanmadığı sürece audit edebilirsiniz. Bu auditi NOAUDIT ile sonlandıramazsınız fakat user sessionı discconect olduğunda zaten auditte sonlamış olacaktır.
Örneğin, mevcut bir sessinındaki tüm işlemleri auditlemek için ;
AUDIT ALL STATEMENTS IN SESSION CURRENT BY ACCESS WHENEVER NOT SUCCESSFUL;
Login ve logout’ ların Audilenmesi ; İsterseni z AUDIT_SESSION komutu ile tüm login ve logooutları auditleyebilirsiniz.
AUDIT SESSION BY ACCESS;
Sadece belli bir kullanıcının login ve logoutlarını auditlemek isterseniz,
AUDIT SESSION BY kamil BY ACCESS;
Object doesn’ t exist hatasıyla fail olan sql statementlarının Auditlenmesi ; NOT EXIST cümleciği ile object doesn’ t exist hatasıyla fail olan sorguları auditleyebilirsiniz.
AUDIT NOT EXIST ;
SQL Stamentları ile İlgili Audintingleri Sonlandırmak İçin;
NOAUDIT komutu ile SQL statementları üzerindeki auditingleri sonlandırabiliriz. Bu komutu çalıştırmadan önce mutlaka çalıştıracak olan kullanıcının AUDIT SYSTEM yetkisine sahip olmalıdır. Audit All Statements seçeneği ile set edilmiş olan autiler, Noaudit Audit Statements ile kaldırıldığında, bu işlemden diğer audit konfigurasyonları etkilenmeyecektir. Daha öncede belirttiğimiz üzere In Session Current cümleciği ile set edilmiş olan auditler Noaudit ile geri alınmazlar, bu auditing işlemi session sonlandığında bitecektir.
Noaudit ile ilgili örnek olarak aşağıdaki komutları verebiliriz ;
NOAUDIT session BY kamil;
NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE ;
Privilege ile İlgili Audit Seçeneklerinin Configure Edilmesi ;
Haklar ile ilgili audit seçenekleri, ilgili ayrıcalığın ismine karşılık gelen sistem hakları ile aynıdır. Örneğin, Delete any table komutunun auditlenmesi ;
Bu auditler üzerindeki auditing işleminin kaldırılması ise, yine benzer bir mantıkla ;
NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTE PROCEDURE;
Schema Objelerinin Auditlenmesi ;
Konuyu biraz daha spesifiklendirebiliriz, yani tüm select komutlarını auditlemek istemiyde sadece x userının altındaki bir tabloyu auditlemek isteyebiliriz.
AUDIT SELECT ON owner.tablename BY ACCESS;
AUDIT SELECT ON owner.viewname BY ACCESS;
AUDIT DELETE ON laurel.emp BY ACCESS;
AUDIT SELECT, INSERT, DELETE ON hr.dept BY ACCESS WHENEVER SUCCESSFUL;
AUDIT SELECT ON DEFAULT BY ACCESS WHENEVER NOT SUCCESSFUL;
AUDIT EXECUTE ON procedure_name BY ACCESS;
AUDIT INSERT TABLE BY ACCESS;
Schema Objelerinin Auditlerinin Kaldırılması ;
Schema nesneleri üzerindeki auditingi kaldırmak için yine Noaudit komutundan faydalanabiliriz ;
NOAUDIT DELETE ON emp;
NOAUDIT SELECT, INSERT, DELETE ON hr.dept;
NOAUDIT ALL ON emp;
Bu rada ON DEFAULT cümleciğinden bahsetmek gerekebilir. Aşağıdaki örnek üzerinden açıklamaya çalışalım.
AUDIT ALL ON DEFAULT BY ACCESS;
Bu komut ile aşağıdaki komutların hepsi etkilenecektir.
Alter , Execute, İnsert, Select , Audit, Grant, lock, Update, Comment, Flashback, Read, Delete, Index, Rename .
On default yerine spesifik olarak neleri auditleyeceğinizi siz belirlemek isterseniz, örneğin ;
AUDIT ALTER, DELETE ON DEFAULT BY ACCESS;
Directory’ lerin Auditlenmesi ;
Directoryler içerisindeki nesneleri auditleyebilirsiniz. Örneğin, bir directory içerisine create ettiğiniz bir programı, kimin çalıştırdığını auditleyebilirsiniz. Bunu yaparken aşağıdaki komuttan faydalanabiliriz ;
AUDIT EXECUTE ON DIRECTORY my_directory BY ACCESS;
Audit işlemini iptal etmek içinse ;
NOAUDIT EXECUTE ON DIRECTORY my_directory;
Tüm Function, Procedure, Package ve Trigger’ ları Audit Etmek İçin;
User bazında bu işlemi yapmak istersek ;
AUDIT EXECUTE PROCEDURE BY psmith BY ACCESS;
Schema İçerisinden Procedure veya Function Execute Edildiğinde Auditlemek İçin ;
AUDIT EXECUTE ON HR.check_work BY ACCESS WHENEVER SUCCESSFUL;
Function, Procedure , Packages ve Trigger’ lar Üzerindeki Auditingi Kaldırmak İçin ;
Noaudit komutu ile kaldırılabilir.
NOAUDIT EXECUTE PROCEDURE;
NOAUDIT EXECUTE PROCEDURE BY kamil;
NOAUDIT EXECUTE ON sales_data.checkwork;
Networkü Auditlemek İçin ;
Network üzerinden yapılan işlemleri auditlemek istiyorsak ;
Bu auditingi kaldırmak içinse ;
2. Güvenlik ile İlgili SQL Komutlarının ve Yetkilerin Varsayılan Olarak Auditlenmesi ;
Çok kullanılan bir yöntem olmamakla beraber , bu konuya da açıklık getirmekte fayda var. Dbca ile database’ i create ederken, oracle database’i auditi çok sık kullanılan güvenlikle ilgili sql statementlarını ve haklarını auditleyecek şekilde set eder.
Oracle database default olarak aşağıdaki yetkileri auditler.
ALTER ANY TABLE CREATE ANY PROCEDURE DROP PROFILE
ALTER DATABASE CREATE ANY TABLE DROP USER
ALTER PROFILE CREATE EXTERNAL JOB EXEMPT ACCESS POLICY
ALTER SYSTEM CREATE PUBLIC DATABASE LINK GRANT ANY OBJECT PRIVILEGE
ALTER USER CREATE SESSION GRANT ANY PRIVILEGE
AUDIT SYSTEM CREATE USER GRANT ANY ROLE
CREATE ANY JOB DROP ANY PROCEDURE
3. Spesifik Olarak Fine-grained Activitilerinin Auditlenmesi ;
Fine-grained auditing i kullanmak için, istenilen durumları içeren policiler oluşturup sonrasında bu policy’ leri auditleyebilirsiniz. FGA aslında audit işleminin yapılan aktivitiye göre özelleştirilmesidir şeklinde tanımlayabiliriz.
FGA insert, update ve delete gibi operasyonları ile ilgili sql query’ lerinin auditlenmesine de olanak sağlar.
FGA aduting log kayıtları sys.fga_log$ tablosuna kaydedilir. Bu kayıtlar DBA_FGA_AUDIT_TRAIL view’ inden select edilebilir. DBA_COMMON_AUDIT_TRAIL viewi standart ve fga kayıtlarını combine eder. Ayrıca audit_trail kayıtları XML file’ lere yazılacak şekilde set edilmişse V$XML_AUDIT_TRAIL view’ i kullanılarak select edilebilir.
Fga sadece bizim istemiş olduğumuz spesifik alanlar üzerinde yapılan işlemleri auditlememizi sağlar. Böylelikle bizim için daha anlamlı sonuçlar oluşturur. Durum böyle olduğunda gereksiz audit kayıtlarının oluşmasını n önüne geçilmiş olunur. FG auditingi kullanabilmek için sys’ nin şemalarından DBMS_FGA package’ ına execute yetkisinin olması yeterlidir.
FG audit policy manage etmek için dbms_fga package’ ından faydalanabiliriz. Bu package ile tek policy ile tüm kombinasyonları (select, insert, update, delete) komutlarının audit edilmesini enable edebiliriz. Burada önemli bir nokta policy’ i create ettikden sonra modify edemiyoruz onun yerine drop – cerate ederek yenisini oluşturuyoruz. DBMS_FGA’ ın tüm değişkenleri ile birlikte kullanımı aşağıdaki gibi,
audit_trail BINARY_INTEGER IN DEFAULT,
Kullanımına geçmden önce burada sık kullanılan değişkenler üzerinde biraz bahsedebiliriz;
Object_schema ; Hangi şemasnın altındaki object auditlenecekse, bu şemanın belirlendiği parametre,
Object_name ; Auditlenecek olan object’ in isminin belirlendiği parametre,
Policy_name ; oluşturulan bu policy’ e istenirse ismin verildiği parametre, unigue bir alandır, kullanılan bir isim bir daha kullanılamaz.
Audit_condition ; Auditlenecek olan sql statementlarında where condition’ı içerisinde geçecek olan alanı ifade eder. Null olarak set edilirse ve bu parametre kullanılmaz ise tüm aktivitelerin auditleneceği anlamına gelir.
Audit_column ; spesifik bir kolon auditlenecek ise bunun set edildiği parametre,
Enables ; TRUE ise policy enable demektir, default değeride TRUE’ dur,
Statements Types ; Hangi sql statementının audit edileceğini belirten parametredir (sadece select, insert, update, delete’ i içerir. Bu ğer null gönderilirse default değeri SELECT olduğundan buna göre policy’ i set edilecektir. )
Audit_trail ; fg audit kayıtları için destination DB veya XML set edilebilir, (default değeri db+extented ‘ dır)
Tüm parametreleri ile package’ ı aşağıdaki şekilde kullanabiliriz ;
policy_name => ‘mypolicy1′,
audit_condition => ‘sal < 100′,
audit_column => ‘comm,sal’,
statement_types => ‘INSERT, UPDATE’,
audit_trail => DBMS_FGA.XML + DBMS_FGA.EXTENDED,
Create edilmiş olan policy dolayısıyla auditi disable etmek için aşağıdaki sytax kullanılabilir, bunlarla ilgili örnekleri aşağıda bulabilirsiniz;
policy_name VARCHAR2 );
Package içerisinde object_schema parametresini göndermeniz, database otomatik olarak sisteme connect olmuş olan userı dikkate alacaktır.
Var olan bir policy drop etmek içinse ;
systax’ dan faydalanabiliriz.
Bir örnekle yaptıklarımızı açıklamaya çalışalım. Scott scheması altındaki emp tablosunda yapılan işlemleri scott_emp_policy adı ile bir policy oluşturup auditmeleye çalışalım.
policy_name => ‘scott_emp_policy’);
Dikkat ederseniz statement_type parametresi kullanmadım, dolayısıyla audit policy’ imiz sadece bu tabloya yapılan selectleri auditleyecektir.
Şu anda disable olan bir policy’ i tekrar aktive etmek içinse ;
komutundan faydalanabiliriz. Örneğin.
Daha anlaşılması için örnekleri biraz daha detaylandıralım;
policy_name => ‘chk_hr_employees’,
policy_owner => ‘SEC_MGR’,
statement_types => ‘INSERT, UPDATE, SELECT, DELETE’,
audit_trail => DBMS_FGA.DB);
Tukarıdaki şekilde policy’ i oluşturdukdan sonra aşağıdaki gibi sql’ ler auditleniyor olacaktır.
SELECT COUNT(*) FROM HR.EMPLOYEES WHERE COMMISSION_PCT = 20 AND SALARY > 4500;
DELETE FROM HR.EMPLOYEES WHERE SALARY > 1000000;
Spesifik bir schema altında yer alan bir tablodaki özel bir (yada birden fazla) kolunu, istediğimiz bir kondition gerçekleştiğinde auditlemek istiyorsak create policy package’ ına aşağıdaki kısımlarıda aeklememiz gerekir;
audit_condition => ‘DEPARTMENT_ID = 50′,
audit_column => ‘SALARY,COMMISSION_PCT,’
Fine – Grating yöntemi oluşan audit kayıtlarını UTL_MAIL package’ ını kullarak sonuçları istenilen kullanıcılara mail attırabiliriz. Bunun için oracle documentation’ dan UTL_MAIL package’ ının kullanımı ile ilgili ayrıntılı bilgi alabilirsiniz.
Bir başka örnek olarak ;
DBMS_FGA.ADD_POLICY(OBJECT_SCHEMA => ‘OE’,
OBJECT_NAME => ‘ORDERS’,
POLICY_NAME => ‘ORDERS_FGA_POL’,
AUDIT_CONDITION => ‘SYS_CONTEXT(”USERENV”, ”CLIENT_IDENTIFIER”) = ”Robert”’,
STATEMENT_TYPES => ‘INSERT,UPDATE,DELETE,SELECT’,
4. Admin Userlarının (SYS) Auditlenmesi ;
Sys userını veya sistemde sysdba veya sysoper yetkisine sahip olan tüm kullanıcıları auditleyebilirsiniz. Sys userının auditlenmesi ile ilgili olarak bir takım faklılıklar mevcut, örneğin sys’ yi auditliyorsanız audit_trail parametreniz ne olarak set edilmiş olursa olsun (None, Db, Xml, EXTENDE) sys userı auditlenir ve bu audit kayıtları operating sisteme file olarak yazar. Sys userının audit kayıtlarını operating sisteme yazması, sys.aud$ tablosuna yazmasından çok daha güvenlidir, sys userı zaten sysdba yetkisine sahip olduğundan dolayı tabloya müdahale edebilir yani burdaki bir takım audit kayıtlarını delete edebilir, bu yöntem ile bu tarz kötü davranışların önüne geçilmesi planlanmıştır.
Sys userının auditlenmesi ile ilgili özel bir parametrenin ( AUDIT_SYS_OPERATIONS) tanımlanması gerekmektedir. Yapılacak değişiklik aşağıdaki gibidir;
Audit_trail parametresi zaten set edilmiş olmalı ;
Son olarak database’ i restart ediyoruz. Sonrasında sys userına ait tüm işlmler artık auditleniyor olacaktır.
Buraya kadar 4 tane audit yöntemi üzerinde konuştuk. Her yöntemde audit kayıtları DB olarak seçilirse, bu kayıtlar SYSTEM tablespace’ inde tutulur. Bizim için SYSTEM tablepace’ i kritik önem taşıdığından dolayı bu tarz verilerin system tablespace’ i dışında farklı bir yerde tutulmasını isteriz. Bu tarz bir işlemi gerçekleştirmek isterseniz aşağıdaki adımları kullanarak yapabilirsiniz ;
Öncelikle audit kayıtlarımızın tutulduğu tablespace’ lerin hangi tablespace’ de olduğunu kontrol etmekle başlayalım ;
WHERE table_name IN (‘AUD$’, ‘FGA_LOG$’)
Gördüğünüz gibi SYSTEM tablespace’ i içerisinde yer alıyorlar. Şimdi yeni oluşturacağımız bir tablepace ‘ e taşıyalım.
Yeni bir tablespace create edelim;
Create tablespace only_audit datafile ‘c:\oracle11gR2\audit\’ size 10M ;
Aşağıdaki pl/sql ile taşıma işlemi yapıyoruz.
audit_trail_location_value => ‘ONLY_AUDIT’);
Son durumu kontol edelim.
ve taşıma tamamlanmış oldu.
Oracle da özellikle 11gR2 ile gelen yeni değişikliklerden de bahsederek audit kavramını açıklamaya çalıştım. Umarım faydalı olmuştur.
This entry was tagged How to audit oracle database, oracle audit. Bookmark the permalink.
← Kullanıcı Hesabını Package Yardımı İle Açma – Kapatma
Sisteme Connect Olan Kullanıcıları Tespit Etme →