1. Ana Sayfa
  2. SQL Server
  3. CONTEXT_INFO ile T-SQL’de İşlemleri Kullanıcıya Göre Sınırlamak

CONTEXT_INFO ile T-SQL’de İşlemleri Kullanıcıya Göre Sınırlamak

Yazdığımız kodların farklı kişilere göre farklı davranması, argo tabirle “adam seçmesi” çoğu zaman ihtiyaç duyulan bir özelliktir. Bunu .net tarafında çoğu zaman yapmışızdır, ancak Sql Server tarafında gerekli olduğu durumlar da olabilir mi ? Mesela bir kullanıcının yapacağı ve veritabanını meşgul edebilecek bir işlemin, diğer kullanıcıların performansını etkilememesini istediğimiz durumlar gibi.

Örnek olarak çok fazla data içeren Test adında bir tablomuz olsun ve burada yapılan kullanıcı işlemlerini log’ladığımız bir de Test_Log tablomuz olsun. Log’lama işlemini de trigger yardımıyla yapalım. Test üzerinde yapılan her işlem, Test_Log tablosuna kaydedilsin. Test tablosunda bir çok kolonu ve bütün satırları içeren yüklü bir update komutu çalıştırmam gerektiğinde, bunun diğer kullanıcıların performansını etkilememesi için Test_Log tablosuna yansımasını istemiyorum. Ancak sistem çalışır halde olduğundan, trigger’ı da disable etmemem gerekiyor. Böyle bir durumda yapmamız gereken CONTEXT_INFO ‘dan faydalanmak. CONTEXT_INFO değerini set etmek oldukça kolay:

SET CONTEXT_INFO 0x1256698456

SELECT CONTEXT_INFO()

Örnekte bahsettiğimiz trigger’a ise şu eklemeyi yapmamız gerekiyor:

CREATE TRIGGER TR_Test ON dbo.Test FOR INSERT,UPDATE,DELETE

AS

DECLARE @Cinfo VARBINARY(128)

SELECT @Cinfo = CONTEXT_INFO()

IF @Cinfo = 0x1256698456

RETURN

PRINT ‘Trigger Çalıştı’

Test tablosu üzerinde işlem yapmadan önce de trigger’da belirttiğimiz CONTEXT_INFO değerini belirlemeliyiz:

SET CONTEXT_INFO 0x1256698456

— UPDATE dbo.TEST …

Böylece trigger tetiklendiği halde Test_Log tablosu üzerinde işlem yapmasına engel olduk.

CONTEXT_INFO değerini, bu tip işlemlerde olduğu gibi aynı tabloyu kullanan farklı uygulamalarda, hangi uygulamanın ne zaman kullandığı gibi detaylı rapor gerektiren durumlar için de kullanabiliriz.

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

Yorum Yap

Yazar Hakkında

Mert Yeter, lisans eğitimini Yıldız Teknik Üniversitesi Gemi İnşaatı Mühendisliği bölümünde, yüksek lisans eğitimini ise Bahçeşehir Üniversitesi Bilgi Teknolojileri bölümünde tamamlamıştır. Yazılım dünyasına üniversitenin ilk yıllarında aldığı QBasic ile başlayan Mert, .NET ve SQL Server gibi Microsoft teknolojileri ile devam etmiş; yüksek lisans tezini ise Linux konusunda yapmıştır. Netaş ve Ziraat Teknoloji gibi sektörün önde gelen firmalarında C#, .NET, SQL Server, Cisco Contact Center ürünleri ve Linux üzerine çalışmış, bir çok firmaya da bu konularda danışmanlık vermiştir. Şu anda da Done'de Cloud Development Manager olarak Azure, .NET Core, SQL Server, Docker vb güncel teknolojiler üzerinde çalışmaktadır.

Yorum Yap