Merhabalar 🙂
Audit Yazı dizimizin 2.bölümü ile karşınızdayız. Bir önceki bölümde “Audit nedir?”, “Nasıl kurulur?” sorularının cevabını vermeye çalıştık.
Yazımızın 1.bölümüne gitmek için : Nedir Bu SQL Server AUDIT? (Bölüm 1)
Audit Yazı dizimizin 2.bölümü ile karşınızdayız. Bir önceki bölümde “Audit nedir?”, “Nasıl kurulur?” sorularının cevabını vermeye çalıştık.
Yazımızın 1.bölümüne gitmek için : Nedir Bu SQL Server AUDIT? (Bölüm 1)
Bu bölümüzde, Auditi’imizin analizini yapmaya çalışacağız. İlk olarak bakalım bir önceki bölümümüzde kurduğumuz Audit’imizi kurabilmiş miyiz? Bunun için; fn_get_audit_file fonksiyonu, Audit’imizin için en sık kullanacağımız fonksiyon olabilir. Fonksiyona, Audit’imizin Path’ini vererek aşağıdaki gibi çalıştırıyoruz.
1 | select * from fn_get_audit_file ( 'D:\Audit\*.sqlaudit' , default , default ) |
Bu fonksiyon sayesinde Audit’imize düşen logları görebiliriz. Sorguyu kendimize göre düzenleyerek, daha okunabilir bir hale getirebiliriz.
1 2 3 | select event_time, object_name, statement, database_name, class_type, session_server_principal_name, server_principal_name, action_id, succeeded, session_id from fn_get_audit_file ( 'D:\Audit_Deneme\*.sqlaudit' , default , default ) order by 1 desc |
Tablodaki kolonları inceleyecek olursak, yapılan işin ne zaman yapıldığını, hangi statement’ın çalıştığını, kim tarafından yapıldığını, yaptığı işin başarılı olup olmadığı gibi soruların cevabını bulabiliriz.
DMV lerle inceleyecek olursak;
DMV lerle inceleyecek olursak;
1 | select * from sys.dm_audit_class_type_map |
fn_get_audit_file fonksiyonundan dönen class type seçeneklerini inceleyebilmemize olanak sağlayan bir DMV.
1 2 3 | select * from sys.server_audits select * from sys.server_audit_specifications select * from sys.server_audit_specification_details |
DMV leri sayesinde, auditlerimizin detayını görüntüleyebiliyoruz. Şimdi, Auditimizi test etme zamanı:) Bakalım, gerçekten de loglayacak mı?
Çalışma amaçlı bir DB oluşturuyorum.
Çalışma amaçlı bir DB oluşturuyorum.
1 | CREATE DATABASE BAKALIM_OLCAKMI |
Audit’imize bakalım. İstediğimiz şekilde loglamış mı?
1 2 3 | select event_time, object_name, statement, database_name, class_type, session_server_principal_name, server_principal_name, action_id, succeeded, session_id from fn_get_audit_file ( 'D:\Audit_Deneme\*.sqlaudit' , default , default ) order by 1 desc |
Bu seferki denememizde tablo create, alter, drop işlemlerini deniyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | --Tablo create USE [BAKALIM_OLCAKMI] GO CREATE TABLE [dbo].[Audit_Deneme]( [column_1] [ int ] NOT NULL , [column_2] [ int ] NULL ) ON [ PRIMARY ] --Tablo alter(kolon ekleme) ALTER TABLE dbo.Audit_Deneme ADD deneme int NULL --Tablo drop DROP TABLE dbo.Audit_Deneme |
Az evvelki scriptimizi yeniden çalıştırıyoruz. Bakalım loglamış mı?
Şimdi de yeni bir login oluşturup, daha sonrasında drop ederek loglayacak mı bakalım 🙂
1 2 3 4 5 6 7 8 9 10 | --Login create USE [master] GO CREATE LOGIN [AuditDeneme] WITH PASSWORD =N '12345' , DEFAULT_DATABASE=[master], CHECK_EXPIRATION= OFF , CHECK_POLICY= OFF GO --Login drop DROP LOGIN [AuditDeneme] GO |
Aynı şekilde, sizler de SP, function, Index create ederek, alter ya da drop yaparak deneyebilirsiniz. Logladığını göreceksiniz 🙂
Geldik bir yazımızın daha sonuna. Umarım sizlere faydalı olabilmişizdir. Bir sonraki yazı dizimizde görüşmek üzere. Soğuklar da geliyor, kendinize iyi bakın, Yoda’nın tabiriyle “DBA hastalanmaz”. Geçen sene beni nasıl şartladıysa “DBA hastalanmaz” diye kendime telkin ede ede hastalanmadım da gerçekten 😀
Sağlıklı, bol motivasyonlu günleriniz olsun 🙂