Site icon IT Tutorial

Oracle Database Auditing

Merhaba Arkadaşlar,

Bu yazımda sizlere Oracle Veritabanlarında Auditing i anlatacağım. Audit dilimize denetleme diye geçsede ben çok türkçesini kullanma taraftarı değilim.  Oracle tarafında Audit denince akla yapılan tüm işlemlerin izlenip kaydedilmesi ve bunun raporlanması şeklindedir.

 

Database auditing denince akla bir veritabani üzerinde gerçekleştirilen işlemlerin izlenmesi (monitoring) kaydedilmesi ve bunun internal tablolardan raporlanması işlemidir. Auditing ile veritabanı kullanıcılarının Veritabanında ne işlem yaptıklarını ve kimin ne zaman yaptığını görebiliriz.

Şirketlerde genel olarak aşağıdaki durumlarda audite ihtiyaç duyulur.

 

Örneğin; Maaş tablosunda en son insert, delete işlemini kim yaptı ?

Müşteri tablosu aniden drop oldu kim drop etti bunu ?

Hesap tablosuna truncate basılmış bunu kim yaptı acaba ?

Canlı veritabanının önemli tablolarına yüklü update insert gelmiş bunu kim hangi saatte yaptı ?

Tipindeki soruların tamamının karşılığını Auditte bulabilirsiniz.

Oracle database inde aşağıdaki gibi 2 tip Auditleme vardır.

 

Standart auditing; SQL cümleciklerinin, yetkilerin, şemalar, nesneler ve network’lerin auditlemeleri için kullanılabilir.

Fine Grained Auditing ; Veritabanı tabloları üzerindeki aksiyonlar veya bu aktivitelerin oluştuğu zaman gibi faktörlere bağlı spesifik veritabanı aktiviteleri monitor etmek için kullanılabilir.

 

Database Standard Auditing tüm veritabanı sürümlerinde varsayılan olarak kullanılabilir bir özelliktir.

Auditing’ i kullanmak için önce auditing’ i etkinleştiriyoruz ve sonra nelerin denetleyeceğini tanımlıyoruz. Denetlenen eylemler sys.aud$ tablosunda veya işletim sistemi dosyasında kaydedilir.

 

AUDIT_TRAIL parametresini NONE ‘den farklı bir değere ( “DB”, “DB,EXTENDED”, “OS”, “XML”, “XML,EXTENDED” )  set ederek ardından database restart ederek auditing aktifleştirilir.

   
NONE Kapalı durumda.
DB Audit açılır ve kayıtlar SYS.AUD$ tablosuna kaydedilir.
DB,EXTENDED DB optionı gibidir extra olarak SQL_TEXT ve SQL_BIND kolonlarıda dolu olarak gelir.
OS Audit açık fakat audit kayıtları AUDIT_FILE_DEST parametresindeki pathlere yani sunucu üstüne yazılır.
XML Audit açık fakat audit kayıtları AUDIT_FILE_DEST parametresindeki pathlere yani sunucu üstüne XML formatinda yazılır.
XML,EXTENDED XML optionı gibidir extra olarak SQL_TEXT ve SQL_BIND kolonlarıda dolu olarak gelir.

 

Standard auditing, SQL ifadelerin, yetkilerin, şema objelerinin ve networkdeki aktivitilerin auditlenmesidir dedik. Standart auditing AUDIT komutu ile başlatılır ve NOAUDIT komutu ile iptal edilir. Auditing işlemini AUDIT ANY yetkisi veya AUDIT SYSTEM yetkisine sahip herhangi bir kullanıcı yapabilir.

AUDIT_TRAIL parametresi, database tarafından tespit edilen audit kayıtlarının nasıl ve nerede saklanacağını belirlenen parametredir.

Audit_trail parametresinin durumunu aşağıdaki gibi kontrol ediyorum

 

SQL> show parameter audit_trail;

NAME                                 TYPE        VALUE

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

audit_trail                          string      NONE


Şuan bu değer NONE olduğu için auditing aktif değildir. Yukarıdaki tabloda gösterildiği gibi bu parameter farklı değerler alabiliyor. Biz deneme amaçlı DB olarak set edeceğiz. audit_trail statik bir parametre olduğu için set ettikten sonra db’yi kapatık açmamız gerekmektedir.

[oracle@deveci ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.4.0 Production on Sun Mar 1 17:09:48 2015

 

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

 

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

 

SQL> alter system set audit_trail=DB scope=spfile;

 

System altered.

SQL> shu immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

 

Total System Global Area  939495424 bytes

Fixed Size                  2258840 bytes

Variable Size             637536360 bytes

Database Buffers          293601280 bytes

Redo Buffers                6098944 bytes

Database mounted.

Database opened.

SQL> show parameter audit_trail;

 

NAME                                 TYPE        VALUE

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

audit_trail                          string      DB

 

DB; audit kayıtları database’te sys.aud$ tablosunda tutulur. Bu durumda Database’i read only mod’ta audit kayıtlarının database’ a write edeceğinden dolayı açmayız. Açmaya çalıştığımızda aşağıdaki gibi hata alınıyor.

ORA-16006: audit_trail destination incompatible with database open mode.

audit_trail parametresini DB olarak set etmek için izlenmesi gereken adımlar:


DB, EXTENDED : audit kayıtları yine sys.aud$ tablosunda kaydedilir. Ayrıca sqlbind değerleri ve sqltext’in Clob bilgileri de sys.aud$ tablosunda tutulur.

audit_trail parametresini DB,EXTENDE olarak set etmek için izlenmesi gereken adımlar:

 

OS: audit kayıtları işletim sisteminde belirlenecek bir path’te saklanır. Dosya bazına çıkan dosyalr .aud uzantılı olur. OS olarak set ettiğimizde iki parametre daha; AUDIT_FILE_DEST parametresi audit kayıtların nerede tutulması için ve AUDIT_SYS_OPERATIONS parametresi SYS userin auditlenip auditlenmemesi için set etmemiz gerekmektedir.

audit_trail parametresini OS olarak set etmek için izlenmesi gereken adımlar:

 

XML: auding kayıtları işletim sisteminde xml dosyası olarak saklanır. Xml dosyaların yeri tüm platformlarda; ‘$ORACLE_HOME/admin/$ORACLE_SID/adump’ dir.

audit_trail parametresini XML olarak set etmek için izlenmesi gereken adımlar:

 

XML,EXTENDED: auding kayıtları işletim sisteminde xml dosyası olarak saklanır. Ayrıca sqlbind değerleri ve sqltext Clob bilgileri de burada saklanır. Xml dosyaların yeri tüm platformlarda; ‘$ORACLE_HOME/admin/$ORACLE_SID/adump’ dir.

audit_trail parametresini XML,EXTENDED olarak set etmek için izlenmesi gereken adımlar:

 

AUDIT ve NOAUDIT komutları :

 

Bu komutlar sisteme gönderirken komutun sonunda yer alan 3 önemli statement:

 

  1. WHENEVER SUCCESSFUL, herhangi audit veya noaudit komutunun sonunda bu yazılırsa, çalıştırılan komut success olursa auditlenir/auditlenmez.
  2. WHENEVER NOT SUCCESSFUL, herhangi audit veya noaudit komutunun sonunda bu yazılırsa, çalıştırılan komut başarısız olursa auditlenir/auditlenmez.
  3. Her ikisi de kullanılmazsa hem başarılı hem başarısız durumunda auditlenir/auditlenmez.

 

Mesela aşağıdaki cümlecikle herhangi bir user bir tabloyu drop edipte bu işlemde başarısız olursa bu işlemler sys.aud$ tablosuna kaydedilecektir ve bunu görebiliyor olacağız.

SQL> AUDIT DROP TABLE BY ACCESS WHENEVER SUCCESSFUL;

Yada aşağıdaki gibi DEVECI kullanıcısı herhangi bir tabloya select attığı zaman bu işlem auditlenir.

audit select table by DEVECI by access;

--- DML ler için
audit update table, delete table,insert table by DEVECI by access;

Yada DEVECI kullanıcısının hiçbir işlemini auditlemek istemiyorsanız aşağıdaki gibi kapatılır.

NOAUDIT session BY DEVECI;


Aşağıdaki gibi bir kullanıcıya ait yetkilerin ve işlemlerin auditlenmesini sağlayabilirsiniz.

audit select any table by DEVECI by access;
audit update any  table by DEVECI by access;
audit delete any table by DEVECI by access;
audit insert any table by DEVECI by access;
audit grant table by DEVECI by access;
audit grant procedure by DEVECI by access;
audit alter any table by DEVECI by access;
audit alter database by DEVECI by access;
audit alter system by DEVECI by access;
audit GRANT DIRECTORY by DEVECI by access;
audit CREATE DATABASE LINK by DEVECI by access;
audit CREATE any DIRECTORY by DEVECI by access;
audit DROP any DIRECTORY by DEVECI by access;
audit CREATE any INDEX by DEVECI by access;
audit ALTER any INDEX by DEVECI by access;
audit DROP any INDEX by DEVECI by access;
audit CREATE any PROCEDURE by DEVECI by access;
audit DROP any PROCEDURE by DEVECI by access;
audit ALTER any TRIGGER  by DEVECI by access;
audit EXECUTE PROCEDURE by DEVECI by access;

Bu script ile drop table scriptini çalıştırılan tüm user’lerden sadece başarılı olan auditlenir.

 

Audit açıldıktan sonra aşağıdaki view ile auditlere bakılabilir.

 

select * from dba_audit_trail order by timestamp desc;

Veritabanında oluşturulan object ve sistem bazlı Audit opsiyonlarını aşağıdaki view ile görebilirsiniz.

select * from dba_audit_object;

select * from DBA_OBJ_AUDIT_OPTS;

select * from DBA_PRIV_AUDIT_OPTS;

select * from sys.dba_stmt_audit_opts;

 

Böylece bir yazımın daha sonuna gelmiş bulunmaktayım bir sonraki yazıda buluşmak dileğiyle esen kalın…

 

 

Oracle Exadata SQL Server Goldengate Weblogic EBS ve Linux konusunda aşağıdaki konularda 7×24 Uzman Danışmanlara yada Eğitimlere mi İhtiyacınız var mehmet.deveci@gridgroup.com.tr adresine mail atarak Bizimle iletişime geçebilirsiniz.

– Oracle Veritabanı Danışmanlığı
– Oracle Veritabanı Bakım ve Destek
– Exadata Danışmanlığı
– Exadata Bakım ve Destek
– SQL Server Veritabanı Danışmanlığı
– SQL Server Veritabanı Bakım ve Destek
– Goldengate Danışmanlığı
– Goldengate Bakım ve Destek
– Linux Danışmanlığı
– Linux Bakım ve Destek
– Oracle EBS Danışmanlığı
– Oracle EBS Bakım ve Destek
– Weblogic Danışmanlığı
– Weblogic Bakım ve Destek
– Oracle Veritabanı Eğitimleri
– Oracle VM Server Danışmanlığı
– Oracle VM Server Bakım ve Destek
– Oracle EPPM Danışmanlığı
– Oracle EPPM Bakım ve Destek
– Oracle Primavera Danışmanlığı
– Oracle Primavera Bakım ve Destek
– Oracle Eğitimleri
– SQL Server Eğitimleri
– Goldengate Eğitimleri
– Exadata Eğitimleri
– Linux Eğitimleri
– Oracle EBS Eğitimleri
– Oracle VM Server Eğitimleri
– Weblogic Eğitimleri
– Oracle EPPM Eğitimleri
– Oracle Primavera Eğitimleri

Exit mobile version