SQL veri tabanımızda hassas veriler içeren tablolarda veri maskelemesi uygulayabiliriz.
DDM, bize tablodaki verilerin tamamının ya da bir kısmının yetkisiz kullanıcılara gözükmemesini sağlar.
Örneğin kredi kartı bilgilerinin sadece son hanesinin gözükmesi ya da TC kimlik numarası gibi hassas bilgilerin sadece baştaki ve sondaki belirli karakterlerin gözükmesi gibi.
Veri maskelemede yapıla bilen bazı maskeleme çeşitleri:
- Verinin tamamının gizlenmesi
- Satırda yer alan verinin belirli bir kısmının gizlenmesi. (İlk karakterler, son karakterler ya da ortadaki belirli karakterler).
- Email asresin gizlenmesi
- Verilerin random sayılar ile yer değiştirmesi.
Öncelikle veri maskelemesi yapacağımız bir tablo oluşturmamız gerekiyor. Tablomuz oluşturulurken kolonları da veri maskelemeye uygun halde oluşturmamız gerekiyor.
1 2 3 4 5 6 7 8 9 10 |
CREATE TABLE Kullanici ( ID int IDENTITY PRIMARY KEY, Ad nvarchar(20) NULL, Soyad nvarchar(20) MASKED WITH (FUNCTION = 'default()') NULL, EmailAdresi nvarchar(50) MASKED WITH (FUNCTION = 'email()') NULL, SicilNo int MASKED WITH (FUNCTION = 'random(3000, 5000)') NULL, TCNO varchar(50) MASKED WITH (FUNCTION = 'partial(3,"X",1)') NULL, KrediKarti varchar(50) MASKED WITH (FUNCTION = 'partial(0,"XXXX-XXXX-XXXX-",4)') NULL ); |
Bu örnekte ad kolonunda veriler açıktır, soyadı kolonu tamamen gizlidir (default), email adresi SQL in “email” parametresi ile maskelenir ve ayarlar varsayılan olarak gelir, sicil numarası 3000 ile 5000 arasındaki rastgele sayılan ile değiştirilir, TC kimlik numarasının ilk 3 hanesi ve son 1 hanesi gözükürken ortadaki sayılan gizlenir ve son olarak kredi kartının sadece son 4 rakamı gözükür.
Veri girişi yapıyorum.
1 2 3 4 5 6 |
insert Kullanici values ('Ortaç','Demirel','ortac@ortacdemirel.com','3456','89987654321','012311223344') insert Kullanici values ('Hasan','Toprak','hasan@gmail.com','4576','59787454981','03434454431') insert Kullanici values ('Ahmet','Demir','ahmet@hotmail.com','6744','12387600321','693519947342') insert Kullanici values ('Emel','Can','emel.can@hotmail.com','8971','43987654567','946224590025') insert Kullanici values ('Zeynep','Göl','zeynep.gol@yandex.com','9002','12988740183','128874460146') |
Veriler yetkili kullanıcılara açık şekilde gözükmektedir.
Sadece veri çekmesi için izine sahip bir kullanıcı oluşturup tabloma atıyorum.
1 2 3 4 5 |
create user testuser without login go grant select on Kullanici to testuser |
Bu kullanıcı ile verileri çektiğimizde verilerin maskelenmiş olduğunu görürüz.
1 2 3 |
execute as user ='testuser' select * from Kullanici |