Skip to main content

Command Palette

Search for a command to run...

SQL Server'da DDL Trigger ile Değişiklik Takibi: Güçlü mü, Yeterli mi?

Published
3 min read
S

I’m a passionate software engineer specializing in SQL change management, database security, and DevOps automation. With over 17 years of experience in the banking sector, I focus on building tools and processes that make database deployments safer, more auditable, and automated.

As the creator of SQL Change Guard, I develop solutions that use risk scoring and AI-powered code analysis to detect dangerous SQL scripts before they reach production. I’m dedicated to helping teams minimize downtime and data loss through smarter change governance.

When I’m not coding, I enjoy sharing insights about secure development practices, WPF desktop applications, and integrating modern CI/CD pipelines.

Feel free to connect or reach out at info@sqlchangeguard.com

DDL Trigger, SQL Server'da şema değişikliklerini yakalamak için en hızlı kurulabilen yöntemlerden biri. Ama pratikte ne kadar güvenilir? Nerede işe yarıyor, nerede yetersiz kalıyor?


DDL Trigger Nedir?

DDL Trigger, CREATE, ALTER, DROP gibi veri tanımlama dili işlemlerini yakalamak için kullanılan bir SQL Server mekanizması. Bir tablo oluşturulduğunda, bir stored procedure değiştirildiğinde ya da bir index düşürüldüğünde tetiklenir.

Basit bir örnek:

sql

CREATE TRIGGER trg_DDL_Log
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
BEGIN
    INSERT INTO DDL_Log (EventType, ObjectName, LoginName, EventDate, EventData)
    SELECT
        EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]', 'NVARCHAR(100)'),
        EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]', 'NVARCHAR(100)'),
        SYSTEM_USER,
        GETDATE(),
        EVENTDATA()
END

Bu trigger, database üzerindeki her DDL işlemini bir log tablosuna yazar. Kim yaptı, ne zaman, hangi nesne üzerinde — temel bilgiler kayıt altına alınır.


Güçlü Olduğu Yerler

Hızlı kurulum: Yukarıdaki gibi birkaç satır kod yeterli. Ek araç, lisans veya altyapı gerektirmiyor.

Anlık kayıt: Değişiklik anında loglanır. Sonradan bakılmak yerine o an yazılır.

EVENTDATA() zenginliği: Tetikleyici oturum, IP adresi, çalıştırılan SQL metninin tamamı dahil pek çok bilgiyi XML formatında döndürür.

Ücretsiz: SQL Server'ın yerel bir özelliği, ek maliyet yok.


Yetersiz Kaldığı Yerler

Devre dışı bırakılabilir: Sysadmin yetkisine sahip biri trigger'ı kolayca disable edebilir. Sonra istediği değişikliği yapar, trigger'ı tekrar açar. Bu temel bir güvenlik açığı.

sql

DISABLE TRIGGER trg_DDL_Log ON DATABASE
-- istediğini yap
ENABLE TRIGGER trg_DDL_Log ON DATABASE

Onay süreci yok: Trigger değişikliği yakalar ama öncesinde bir onay mekanizması kurmuyor. Önce yapılıyor, sonra kaydediliyor.

Bildirim yok: Log tablosuna yazar ama kimseye haber vermez. Birisi gece 02:00'de ALTER TABLE yaparsa sabah manuel olarak bakmazsanız haberiniz olmaz.

DML değişikliklerini kapsamaz: DDL Trigger yalnızca şema değişikliklerini yakalar. Veri değişikliklerini (INSERT, UPDATE, DELETE) izlemek için Change Data Capture veya DML Trigger ayrıca kurulması gerekir.

Performans etkisi: Yoğun DDL işlemlerinin olduğu ortamlarda trigger'ın her seferinde tetiklenmesi performansı etkileyebilir.


DDL Trigger Ne Zaman Yeterlidir?

Küçük ekipler için, compliance gereksinimi olmayan ortamlarda, "hiç yoktan iyidir" mantığıyla DDL Trigger makul bir başlangıç noktası.

Ancak şu soruların yanıtı "evet" ise DDL Trigger tek başına yetmez:

  • Değişiklikler onay sürecinden geçmeli mi?

  • Yetkisiz değişiklik anında bildirilmeli mi?

  • KVKK veya ISO 27001 denetimine hazır rapor sunulmalı mı?

  • Sysadmin'in log'u silememesi ya da devre dışı bırakamaması gerekiyor mu?

Bu sorulardan biri bile "evet" ise daha kapsamlı bir yaklaşım gerekiyor.


Sonuç

DDL Trigger iyi bir araç ama eksik bir çözüm. Kurumsal ortamlarda tek başına yeterli değil. Onay akışı, bildirim mekanizması ve manipüle edilemeyen audit trail için ek katmanlar gerekiyor.

Detaylı bilgi için: sqlchangeguard.com

More from this blog

S

SQL Change Guard

81 posts