Dynamic Data Masking: Verilerinizi Görünmez Yapmanın Yolları!
Dijital dünyada veri güvenliği, adeta kaleye giren düşmanlara karşı güçlü bir savunma hattı oluşturmak gibidir. Hassas bilgilerinizin yanlış ellerde ne gibi sorunlara yol açabileceğini bir düşünün. Peki, bu savunma hattını nasıl güçlendirirsiniz? İşte size SQL Server’da Dynamic Data Masking (DDM), Türkçesiyle Dinamik Veri Maskesi ile verilerinizi görünmez bir kalkanla korumanın yolu!

Dynamic Data Masking(DDM) Nedir?
Kısaca DDM, SQL Server’da depolanan hassas bilgilerinizi belirli kullanıcılar için görünmez hale getiren bir koruma kalkanıdır. Veriler veritabanında tam ve doğru bir şekilde durmaya devam eder, ancak yetkisiz kişiler bu verilere erişmek istediğinde, onlar yalnızca maskelenmiş bir sürümünü görebilirler.
Bu maskeleme, verilerinizi gizli tutarken, işleyişin devamlılığını sağlar. Tıpkı bir hırsızın kasayı açmaya çalıştığında sadece sahte kasayla karşılaşması gibi!
DDM Nerelerde Kullanılır?
Dynamic Data Masking, müşteri bilgilerinizin bir kısmını gizli tutmak istediğiniz birçok durumda kullanılabilir. Örneğin, bir müşteri destek ekibinin kredi kartı bilgilerini görmemesi gerekirken, yine de belirli bilgilere erişebilmesi istenebilir.
Bir başka örnekle açıklayalım: Bir restoran yönetiyorsunuz ve müşteri listesinde VIP müşterilerin özel siparişlerini yalnızca belirli çalışanların görebilmesini istiyorsunuz. DDM burada devreye giriyor! Hassas sipariş bilgileri maskelenirken, çalışanlar sadece sipariş detaylarını görebiliyor. İşte, hem verilerinizi korumanın hem de iş akışınızı sürdürmenin etkili bir yolu.
Dinamik Veri Maskesi Türleri
SQL Server, farklı maskeleme türleri sunar. İşte bunların birkaç örneği:
1. Default (Varsayılan) Masking
Bu en basit maskeleme türüdür. Hassas verilerinizi otomatik olarak maskeler.
ALTER TABLE Musteri
ALTER COLUMN Telefon SET MASKED WITH (FUNCTION = 'default()');
Bu komut ile telefon numaraları veya benzeri bilgiler “xxxx” veya sıfırlarla maskelenir.
2. Email Masking (E-posta Maskeleme)
E-posta adreslerini maskelemek isterseniz, SQL Server bu iş için hazır!
ALTER TABLE Musteri
ALTER COLUMN Email SET MASKED WITH (FUNCTION = 'email()');
Sonuç, “john.doe@example.com” yerine “jXXX@XXXX.com” gibi olacaktır.
3. Partial Masking (Kısmi Maskeleme)
Sadece verinin belirli kısımlarını maskelemek istiyorsanız, kısmi maskeleme kullanabilirsiniz. Örneğin, telefon numaralarının ilk ve son iki hanesini göstermek isteyebilirsiniz:
ALTER TABLE Musteri
ALTER COLUMN Telefon SET MASKED WITH (FUNCTION = 'partial(2,"XXXX",2)');
Bu durumda “05361234567” numarası, “05XXXX4567” olarak gösterilir.
4. Custom String Masking (Özel Dize Maskeleme)
Verileriniz için özel bir maskeleme formatı oluşturmak istiyorsanız, bunu da yapabilirsiniz. Bu örnekte, istediğiniz şekilde maskeleme formatı ayarlayabilirsiniz.
Örnekle DDM
Öncelikle DDM, yeni tablolar üzerinde uygulanmasının yanında mevcut tablolar üzerinde de ugulanabilir.
VIPMusteri isminde yeni bir tablo oluşturup, DDM kullanımı nasıl yapılıyor görelim.
Create Table VIPMusteri
(
[MusteriID] [int] IDENTITY(1,1) NOT NULL,
[Adi] [varchar](100) MASKED WITH (FUNCTION = 'default()') NULL,
[Soyadi] [varchar](100) MASKED WITH (FUNCTION = 'partial(1, "XXX", 1)') NULL,
[Email] [varchar](100) MASKED WITH (FUNCTION = 'email()') NULL,
[Yas] [int] MASKED WITH (FUNCTION = 'default()') NULL,
[UyeTarihi] [date] MASKED WITH (FUNCTION = 'default()') NULL,
[AylikGelir] [money] MASKED WITH (FUNCTION = 'random(1000, 2000)') NULL
[Cinsiyet] [varchar](5) NULL
)
Şimdi de tabloya yeni kayıtlar ekleyelim.
insert into VIPMusteri (Adi,Soyadi,Email, Yas, UyeTarihi, AylikGelir,Cinsiyet)
Values ('Ali', 'Turan', 'a.turan@gmailzz.com', 30, '2024-01-12', 25000, 'Erkek')
, ('Sedat', 'Sadık', 'sedatsadik@otmail.com', 52, '2020-04-20', 53000,'Erkek')
, ('Kamil', 'Kaygısız', 'kkaygisiz@ahoo.com', 19, '2022-06-06', 5000,'Erkek')
, ('Fatma', 'Turan', 'fturan@gmailzz.com', 65, '2017-10-01', 38000,'Kadın')
, ('Burak', 'Söylemez', 'soylemezb@andex.com', 41, '2019-02-28', 66500,'Erkek')
Son durumda kayıtlarımız bu şekilde görünecektir.

Hani bu datalar maskeli görünecekti dediğinizi duyar gibiyim. Birazdan bahsedeceğim gibi, sysadmin, dbowner gibi yetkili userlar maskeleme işleminden etkilenmeden verileri görebilirler.
Bu yüzden sadece select yetkisi olan bir kullanıcı oluşturup, dataların nasıl göründüğüne bakalım.
CREATE USER MaskUser WITHOUT LOGIN
GO
GRANT SELECT ON dbo.VIPMusteri TO MaskUser
Böylece MaskUser isminde loginsiz bir user oluşturup, bu user’a tablo üzerinde Select yetkisi vermiş olduk. Şimdi bu user gibi davranarak datayı görmeye çalışalım.
Execute as User ='MaskUser'
GO
select * from dbo.VIPMusteri
Ta daaa… İşte Sedece Select yetkisi olan bir kullanıcının

Yeni bir tablo oluştururken maskeleme işleminin nasıl yapıldığını bu şekilde görmüş olduk.
Şimdi de mevcut tablo üzerinde çalışmaya başlayalım.
Tabloya Müşterinin bulunduğu şehir bilgisini ekleyelim ve bu bilgileri aşağıdaki şekilde güncelleyelim.
ALTER TABLE VIPMusteri
ADD [Sehir] varchar(20) MASKED WITH (FUNCTION = 'default()')
Update VIPMusteri
set Sehir = (case when MusteriID = 1 then 'İstanbul'
when MusteriID = 2 then 'Ankara'
when MusteriID = 3 then 'İzmir'
when MusteriID = 4 then 'Antalya'
when MusteriID = 5 then 'Amasya' end)

Görüldüğü gibi Sehir bilgisi artık default olarak maskeli geliyor. Şimdi de Sehir bilgisini partial olarak güncelleyip çıktısını görelim.
ALTER TABLE VIPMusteri
ALTER COLUMN Sehir ADD MASKED WITH (FUNCTION = 'partial(1, "****", 2)')

Bir kullanıcının gerçekten bu bilgileri görmesi gerekirse ne yapmalıyız?
Kullanıcıya UNMASK yetkisi verip belirli bir süre veriyi görmesini sağlayabiliriz. Data üzerindeki çalışma bittiğinde vermiş olduğumuz yetki geri alınabilir.
-- UNMASK Yetkisi verme
GRANT UNMASK TO MaskUser;
Execute as User ='MaskUser'
GO
select * from dbo.VIPMusteri
-- UNMASK Yetkisini Geri Alma
REVOKE UNMASK TO MaskUser;

Neden Dinamik Veri Maskesi Kullanmalıyız?
Veri güvenliğiniz için bu kadar etkili bir aracı kullanmanın bazı avantajlarına göz atalım:
- Kolay Uygulama: DDM, SQL Server’da birkaç basit komutla uygulanabilir.
- Performans Üzerinde Etkisi Yok: Dinamik veri maskesi, veritabanınızın performansını etkilemeden çalışır. Verilerinizi maskelerken hız kaybetmezsiniz!
- Veri Gizliliğini Sağlar: Yetkisiz kullanıcıların hassas verilere erişimini sınırlar, ancak veri analitiği veya işlemleri için verileri bütün tutar.
Verilerinizi bir kahraman gibi koruyan, ancak son derece hafif bir zırh giyen bu teknoloji, işletmenizin güvenlik altyapısına büyük katkı sağlar.
Dinamik Veri Maskesinin Sınırlamaları
Tabii ki, DDM tam bir güvenlik çözümü değildir. Yönetici (Admin) kullanıcılar maskelenmiş verilere tam erişime sahip olabilir. Ayrıca, yetkilendirme ve rol tabanlı erişim kontrolleriyle desteklenmelidir. Bu nedenle, dinamik veri maskesini veri güvenliğinizi artırmak için kullanırken, ek güvenlik önlemleri almayı da unutmayın.
SQL Server’daki Dynamic Data Masking, hassas verilerinizi korumanın kolay ve etkili bir yoludur. Verilerinizi yetkisiz kişilerden gizlemek için bu güçlü aracı kullanabilir, iş akışınızı kesintiye uğratmadan veri güvenliğini sağlayabilirsiniz.
Siz de verilerinizi maskeyle koruyun ve veri güvenliğinde bir adım önde olun!