SQL Server 2016 CTP 2.1 ile Dinamik Data Maskeleme

By | July 15, 2015

Merhabalar,
Sizlere daha önce Windows Azure üzerinde nasıl Dinamik data maskeleme yapabileceğimizi burada anlatmıştım.Şimdi ise sizlere sunucunuzda yer alacak SQL Servere 2016 ile nasıl maskeleme işlemini yapabileceğinizi anlatacağım.
Not : SQL Server 2016 CTP 2.0 ile aktif kullanılabilir olmaya başladı fakat ben size SQL Server 2016’ın şuan için yayınlanmış CTP 2.1 sürümü ile Dinamik Data Maskeleme (DDM) anlatacağım.

SQL Server 2016 CTP 2.1’i bu adresten download edebilirsiniz.
Dinamik Data Maskeleme işlemine başlamadan önce 209 ve 219 numaralı trace flag’leri aktif etmemiz gerekiyor. Aktif etme işleminden önce aktif olan trace flag’lerimizi bir kontrol edelim.
DBCC TRACESTATUS(-1);
Sorgu sonucu ise aşağıdaki gibidir ;

TraceStatus_EnableList - Image1

Kontrol sonucunda Dinamik Data Maskeleme ( DDM ) için gerekli olan Trace Flag’lerin aktif olmadığını gördük. Şimdi ise gerekli olan Trace Flag’leri aktif edelim.
DBCC TRACEON(209,219,-1);
İhtiyacımız olacak olan Flag’leri de aktif ettiğimize göre örneğimize hızlı bir şekilde devam edebiliriz. Örneğimiz içerisinde Personel isimli bir tablomuz ve bu tablo üzerimde firma çalışanların özlük bilgileri ile beraber maaş ve telefon-mail bilgilerinin yer aldığını biliyoruz. Personel tablosunu oluşturulması için gerekli kodlar aşağıdadır.
create table dbo.Personel
(
Id int identity(1,1) primary key,
Ad varchar(20) not null,
Soyad Varchar(20) not null,
DogumTarihi datetime,
Telefon varchar(15),
Mail varchar(50)
)
insert into [dbo].[Personel](Ad, Soyad,Telefon, DogumTarihi, Mail)values (‘Çağlar’,’Özenç’,’05437241428′,”,’caglarozenc@gmail.com’)
insert into [dbo].[Personel](Ad, Soyad,Telefon, DogumTarihi, Mail)values (‘Ali’,’Veli’,’05417221448′,’11/01/1984′,’aliveli@gmail.com’)
insert into [dbo].[Personel](Ad, Soyad,Telefon, DogumTarihi, Mail)values (‘Cem’,’Can’,’05132221421′,’04/04/1990′,’cemcan@gmail.com’)
insert into [dbo].[Personel](Ad, Soyad,Telefon, DogumTarihi, Mail)values (‘Hasan’,’Can’,’05337241222′,’04/11/1960′,’hasancan@gmail.com’)
insert into [dbo].[Personel](Ad, Soyad,Telefon, DogumTarihi, Mail)values (‘Bora’,’Kaş’,’03417221428′,’12/09/1972′,’borakas@gmail.com’)

select from personel - Image2.

Örnek veri kümemizi yukarıdaki şekilde oluşturduk. Şimdi konumuzun en önemli noktasına geldik. 3 Tip maskeleme seçeneği mevcut bunlar ;

  • Default()
    • Metinsel değerler için X değerinin gösterebilmemizi sağlar.
    • Sayısal değerler için 0 değerinin gösterebilmemizi sağlar
    • Tarih değerleri için default datetime göstermemizi sağlar.
  • Email()
    • İlk karakterden sonra xxx@xxx.com değerini koymamızı sağlar
  • Partital()

Detaylı Tip örnekleri için buradan faydalanabilirsiniz.
Yukarıdaki yapıların örneklerini Personel tablosu ile birlikte inceleyelim.

  1. Aşağıdaki Örnekte Personel tablosu üzerinde Ad Kolonu ile ilgili maskeleme işlemi gerçekleştiriliyor. İlk 1 değeri başlangıçtan kaç karakter alınması istendiği,ortakida XXXXX karakterleri ise ne kadarlık gizleme yapılaması istendiğini,sonraki 1 rakamı ise son kaç değerin alınmasının istediği ile ilgilidir.

ALTER TABLE dbo.Personel ALTER COLUMN Ad
ADD MASKED WITH (FUNCTION = ‘partial(1, “XXXXX”, 1)’);

Yukarıdaki Sorgunu Çıktısı ;

Alter table personel Alter Column Ad_1 Image - 3

Maskeleme sorgusunu değiştirip tekrar sonucu bakalım.

ALTER TABLE dbo.Personel ALTER COLUMN Ad
ADD MASKED WITH (FUNCTION = ‘partial(0, “***”, 0)’);

Alter table personel Alter Column Ad_2 Image - 4

2.Aşağıdaki örnekte ise Personel tablosu üzerinde Mail alanına uygulanan maskelemeyi göreceksiniz.

ALTER TABLE dbo.Personel ALTER COLUMN Mail
ADD MASKED WITH (FUNCTION = ’email()’);

Alter table personel Alter Column Mail_1 Image - 5

3. Aşağıdaki örnekte ise Personel tablosu üzerinde DogumTarihi alanına uygulanan maskelemeyi göreceksiniz.

ALTER TABLE dbo.Personel ALTER COLUMN DogumTarihi
ADD MASKED WITH (FUNCTION = ‘default()’);

Alter table personel Alter Column DogumTarihi_1 Image - 6

4. Aşağıdaki örnekte ise Personel tablosu üzerinde Telefon alanına uygulanan maskelemeyi göreceksiniz.

ALTER TABLE dbo.Personel ALTER COLUMN Telefon
ADD MASKED WITH (FUNCTION = ‘partial(3, “xxxxxxx”, 2)’);

Alter table personel Alter Column Telefon Image - 7

Yukarıdaki bütün Dinamik maskeleme işlemlerini yaptınız ve şimdi bunların başarılı olup olmadığını görmek istiyorsunuz. Bunun için bir peon user oluşturalım ve execute as ile peon user seviyesinde sorgumuzu çalıştırıp sonuçları görelim.

Peon user oluşturmak için ; ( Geçici user )

create user cozenc without login;
GRANT SELECT ON dbo.Personel TO cozenc;

Oluşturduğumuz peon user ile işlemi execute edelim ve işlem bitince execute as revert işlemi yapalım ve execute as yetkisinden kurtulmuş olalım.

EXECUTE AS USER = N’cozenc’;
GO
select CURRENT_USER
GO
select * from Personel
GO
REVERT;
go
select SYSTEM_USER
GO
select * from Personel

execute as Final Image - 8
Bir makalenin daha sonuna gelmiş bulunmaktayız. Bir sonraki makale görüşürüz..

Leave a Reply

Your email address will not be published. Required fields are marked *