MSSQL Server’da Dynamic Data Masking

Sql server dynamic data masking(DDM) herhangi bir kodlama değişikliğiyle temel verilerimize değiştirmeden hassas verilerimizi saklayan bir Microsoft güvenlik özelliğidir. 5 tür veri maskeleme özelliği vardır.

  • Default
  • Email
  • Random
  • Custom String
  • Datetime

İlk başta bir tablomuzu oluşturalım. Daha sonra kolun bazlı kısıtlama işlemlerimiz yapalım.

CREATE TABLE customer
(  
   ID INT IDENTITY (1,1) NOT NULL PRIMARY KEY CLUSTERED,
   TCKimlikNo char(11) NULL,
   Ad VARCHAR(50),
   Soyad VARCHAR(50),
   Email VARCHAR(100) NULL,
   TelNo VARCHAR(50) ,
   CocukSayı INT ,
   DogumTarih DATETIME  NULL,
   Maas MONEY 

)
insert into customer([TCKimlikNo], [Ad], [Soyad], [Email], [TelNo], [CocukSayı], [DogumTarih], [Maas])values
 ('21457898564','yunus','yucel','xyunusyucelx@gmail.com','4038459634',2,'1994-01-06',1000)
 insert into customer([TCKimlikNo], [Ad], [Soyad], [Email], [TelNo], [CocukSayı], [DogumTarih], [Maas])values
 ('34457898863','hasan','ipek','hasanıpek@gmail.com','345698547',5,'1994-02-06',2000)
 insert into customer([TCKimlikNo], [Ad], [Soyad], [Email], [TelNo], [CocukSayı], [DogumTarih], [Maas])values
 ('91234567864','senem','baz','senembaz@gmail.com','8563249634',1,'1994-03-06',3000)

Şimdi test işlemlerimizi gerçekleştirmek için bir login oluşturalım ve select yetkisi verelim.

EXECUTE AS USER ='TEST'
 SELECT*FROM customer
 REVERT

Kullanıcımızı oluşturduk ve datareader yetkisini tanımladık.

Maskeleme yapmadan önce maskeleme kavramlarının ne işe yaradığını açıklayalım örneklerle birlikte. Maskeleme yaptıktan sonra verinin orjinal halinde bir değişiklik olmaz. Yetkisi olmayan kullanıcıya gösterilmez.

Default: Maskelenecek kolunun veri tipine göre bir maskeleme yapmaktadır. Hangi türdeki verileri hangi formata çevirir. Metinsel ifadeleri XXX, Sayısal ifadeleri 000, Tarihsel ifadeleri 01.01.2000 00:00:00:00000, Binary ifadeleri 0 ASCII yapısına dönüştürmektedir.

Alter table customer alter column Maas Money  masked with (function='default()');
EXECUTE AS USER ='TEST'
SELECT*FROM customer
REVERT

Yukarıdaki revert komutuyla çıktıktan sonra tekrar select çektiğimizde tüm veriler şifrelenmemiş bir şekilde karşımıza gelecektir.

SELECT*FROM customer

Birden fazla koluna default kısıtlama yaptım ne tarz şifreleme kullanacağını sql server kendisi karar veriyor. Kolun türüne bakarak.

Oluşturmuş olduğum TEST kullanıcısının verileri şifrelenmemiş şekilde görmesi için bazı kısıtlamalar yapa biliriz. Bu işlemi ilgili veritabanı altında security bölümünden veya script ile de yapılabilir. Login üzerine sağ tıklayıp properties dan ilgili veritabanını seçip gerekli kısıtlamalar yapabiliriz.

use [kolunsifreleme]
GO
GRANT UNMASK TO [TEST_USER]
GO

Şimdi diğer maskeleme yöntemlerini teker teker deneyelim.

E-mail:İlk harfinin şifresiz diğer kalan kısmın şifreli gelmesini sağlar. Dönüştürme biçimi yXXXX@XXX.com şeklinde olmaktadır.

Alter table customer alter column Email  varchar(100) masked with(function='Email()');
EXECUTE AS USER ='TEST'
SELECT*FROM customer
REVERT

İlk başta getirmedi burada yukarda tanımlamış olduğum unmask komutunu revoke komutuyla geri alıyorum TEST kullanıcı üzerinde aldıktan sonra select sorgumuz doğru çalıştı.

DATE:

Alter table customer alter column DogumTarih Date masked with (function='default()');
EXECUTE AS USER ='TEST'
SELECT*FROM customer
REVERT

Random: Belirlenen aralıklarda rastgele bir değer vermektedir.

Alter table customer alter column CocukSayı int masked with (function='random(5,10)');
EXECUTE AS USER ='TEST'
SELECT*FROM customer
REVERT

Custom String: Bu metod ise başlangıç ve bitişteki belirtilen harf kadar şifrelemez diğer harfleri belirlenmiş değerlere göre yapmaktadır.

Alter table customer alter column ad varchar(50) masked with (function='partial(1,'YX',1)');
EXECUTE AS USER ='TEST'
SELECT*FROM customer
REVERT

Diğer kullanıcılarımız tablolarımızın tamamını maskeli bir şekilde görmesini istemiyorsak aşağıdaki komutlarla maskeleme işlemini kaldırabiliriz.

alter table customer alter column Ad  drop masked
alter table customer alter column Email  drop masked
alter table customer alter column DogumTarih  drop masked 
alter table customer alter column CocukSayı  drop masked

Son olarak tablo oluşturacağınız zaman maskeleme ifadeleri başlangıç olarak belirtilebilir.

  CREATE TABLE TABLO6(
  ID INT PRIMARY KEY IDENTITY(1,1),
  AD VARCHAR(50) MASKED WITH(FUNCTION='DEFAULT()') NULL,
  TC BIGINT MASKED WITH(FUNCTION='DEFAULT()') NULL
  )

Mevcut olan tabloya bir kolon ekleneceği zaman ilgili kolon belirtilen filtreleme ifadesi konulabilir.

ALTER TABLE TABLO6 ADD  ADRES NVARCHAR(100)  MASKED WITH(FUNCTION='Email()')

Filtreleme sahibi bir kolona yeni bir filtreleme oluşturmak için aşağıdaki komut kullanılmaktadır.

alter table tablo6 alter column adres add masked with(function='default()')

Not: Maskele oluşturulduktan sonra yetkili bir kullanıcı ile select çekersek verilerimiz şifrelenmemiş bir şekilde gelmektedir.

Başka bir makalede görüşmek dileğiyle..

Sãd. Öğüt ve uyarı dolu o şerefli Kur’an’a yemin olsun ki, tek kurtuluş yolu İslâm yoludur! Sâd -1

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir