Masters Of SQL

SQL Server ile ilgili bilgiler, hayata dair paylaşımlar ve birazda eğlence tabii...
Deadlock’sız, Blocking’siz, Contention’sız günler diliyoruz :)
Sysadmin sizinle olsun

Nedir Bu SQL Server AUDIT? (Bölüm 1)

Merhaba güzel insanlar, görüşmeyeli nasılsınız? Bugün bir Audit yazısıyla karşınızdayız. Aradığınızı bulmanızı, bulamadığınızı sormanızı temenni eder, iyi okumalar dilerim :)

Gelelim Audite :)

SQL Server dünyasına 2008’de giren Audits özelliği, security anlamında DBA’lere güzel avantajlar sağlayan bir özelliktir. Örneğin; server üzerinde kim database oluşturmuş, kim database silmiş, kim bir değişiklik yapmış, yeni oluşturulan bir login bilgisi, incelemek istediğimiz bir tabloya kim kayıt eklemiş, kim kayıt silmiş tarzında sorularımıza cevap bulabileceğimiz, veri tabanımızda belirlediğimiz çerçevede güvenliğimizi sağlayabilmemize olanak sağlayan, 2012 de filter seçeneği ile filtreleme de yapabildiğimiz ekstra yeni özelliklerle hayatımıza dahil olan, incelenmesi gereken bir özelliktir.

Ne dersiniz? Beraber yapalım mı basit bir Audit örneği :)

Security’nin altındaki Audits’e tıklarak “New Audit” diyoruz.


Karşımıza Create Audit ekranı çıkıyor.


Bu ekranda,
Audit name kutucuğunda, oluşturacağımız Audit’e isim vermemiz gerekiyor.
Queue delay kutucuğu default değeri 1000 ms olarak geliyor. Bunun anlamı, biriktirilen verilerin, kayıt yerindeki dosyamıza her bir saniyede bir yazılacağını ifade etmektedir. Bu değer’i 0 yaparsak, eş zamanlı yazılacağı anlamına gelir.
On Audit Log Failure seçeneğinde seçeneğinde Audit’imizin fail olması durumunda ne olacağını seçmemizi istiyor. “Shut Down Server” a dikkat etmenizi tavsiye ederim. Kaş yaparken göz çıkarmayalım :P
Audit Destination’da Audit’imizin nereye yazılacağını seçmemiz gerekiyor. 

Seçeneklerimiz File, Security Log ve Application Log. Ben, D’nin altında açtığım Audit klasörünün altına yazmasını istediğim için file’ı seçiyorum.


Audit File Maximum Limit kutucuğunda ulaşabileceği maximum file sayısını belirleme imkanı sunuyor bize sevgili SQL Server.
Filter seçeneği, aslında bizim yazdığımız query’lerdeki where kısmı. Buraya nasıl bir filtreleme yapmak istiyorsak, o şekilde yazabiliyoruz. Örneğin; ben içinde truncate geçen statementları loglamamasını istedim. 



İster OK’a basarak, Audit’imizi oluşturabilir, istersek Sol üst köşedeki Script’e tıklayarak, penceremizde açılan scripti çalıştırarak Audit’imizi oluşturabiliriz.

    
USE [master]
GO

CREATE SERVER AUDIT [Audit_DDL]
TO FILE 
(	FILEPATH = N'D:\Audit'
	,MAXSIZE = 0 MB
	,MAX_ROLLOVER_FILES = 2147483647
	,RESERVE_DISK_SPACE = OFF
)
WITH
(	QUEUE_DELAY = 1000
	,ON_FAILURE = CONTINUE
)

WHERE statement not like '%truncate%'
   
Auditimizi oluşturduk. Fakat defaultta oluşturduğumuz Audit disable gelir. Bu sebeple Auditimizin üzerine sağ tıklayarak enable duruma getiriyoruz.


Auditimizi oluşturmuş olsak da halen hedefimize ulaşmış sayılmayız. Şimdiki adımımızda, Server bazlı obje değişikliklerini, yeni oluşturulan loginlerin loglamasını hedeflediğimiz bir server bazlı Audit oluşturarak, bu Auditimizi kullanmasını sağlamalıyız. Bunun için, Server Audit Specifications’a sağ tıklayarak New Server Audit Specification… a tıklıyoruz.

Karşımıza çıkan pencerede, neleri loglamasını istiyorsak seçiyoruz. Ben yeni oluşturulan veya silinen bir database i loglaması için Database Change Group, server düzeyinde obje değişikliklerini yakalaması için Schema Object Change Group u ve Login create- drop larını yakalayabilmek için Server Principal Change Group u seçiyorum. Siz isterseniz, kendi ihtiyaçlarınıza göre farklı kombinasyonlar yapabilirsiniz.


Aynı şekilde, pencereden Ok a basarak veya sol üst köşeden aldığımız Script ile Server Bazlı Auditimizi oluştururuz.
USE [master]
GO

CREATE SERVER AUDIT SPECIFICATION [Server_DDL]
FOR SERVER AUDIT [Audit_DDL]
ADD (DATABASE_CHANGE_GROUP),
ADD (SCHEMA_OBJECT_CHANGE_GROUP),
ADD (SERVER_PRINCIPAL_CHANGE_GROUP)
   
Yine, enable etmek gerekiyor tabi :) Audit oluşturma işlememiz tamamlandı. Auditimizin kontrolleri bir sonraki bölümümüzde :) Bakalım Auditimiz olmuş mu? 

Auditimizi DMV ve function ile nasıl incelendiğimizi anlattığımız 2.bölüm için: Nedir Bu SQL Server AUDIT?(Bölüm 2)