Tag Archives: sql server
SQL Server Dynamic Data Masking – Veri Maskeleme
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 |
SQL Server Row-Level Security (RLS)
SQL Server 2016 ile duyurulmuş olan satır seviyesinde güvenlik uygulaması kullanıcıların sadece yetkileri oldukları satırlara erişmesini sağlar.
Birçok kullanıcının aynı veri tabanını kullandığı ortamlarda kullanıcılar tablolarda sadece kendilerine ait bilgileri filtreleyerek eriştirmemizi sağlar.
Önemli bir uygulama olan RLS veri tabanı katmanında çalışır. Herhangi bir uygulamadan veriye erişim sağlanmak istendiğinde erişim kısıtlamaları uygulanır. Böylelikle daha iyi bir güvenlik katmanı sağlanır.
RLS Uygulaması:
Veri tabanıma ürün satışları ile ilgili bir tablo oluşturuyorum.
1 2 3 4 5 6 |
CREATE TABLE UrunSatis ( ID INT IDENTITY(1,1) PRIMARY KEY, Kisi NVARCHAR(10), Ulke NVARCHAR(10), SatisMiktari DECIMAL(10, 2) ); |
Satış tabloma satışlardan sorumlu personelin adı, satışın yapıldığı ülke ve miktarı giriyorum.
1 2 3 4 5 6 7 |
INSERT INTO UrunSatis (Kisi, Ulke, SatisMiktari) VALUES ('User1', 'Türkiye', 680), ('User3', 'USA', 1200), ('User2', 'Germany', 2300), ('User1', 'Türkiye', 750), ('User3', 'USA', 1100), ('User2', 'Germany', 790); |
SQL Server da Tüm Oturum Hesaplarını Devre Dışı Bırakırsanız Ne Olur?
MS SQL sunucuda yanlışlıkla tüm oturum (login) hesaplarını silerseniz ya da devre dışı bırakırsanız SQL sunucunuza bağlantı da kuramazsınız. SA hesabını da güvenlik nedeni ile daha önceden devre dışı bıraktıysanız zor durumda kalabilirsiniz.
Veri tabanlarını farklı SQL sunucuya taşıyıp çalıştırma seçeneği zahmetli de olsa mümkündür. Tabi veri tabanı bazında şifreleme yapmıyorsanız.
SQL Server size bu durum için alternatif bir çözüm yolu sunmaktadır.
Microsoft SQL Server, sunucuda “Local Administrators” grubunda yer alan bir kullanıcıya bu durumu düzeltmesi için imkan sağlar.
İlk adımda SQL de login hesaplarında olmayan bir kullanıcıyı yerel yönetici hesabına ekliyoruz ve SQL sunucuda bu hesap ile oturum açıyoruz.
SQL Server Sorguları İle Active Directory den Veri Çekme
Microsoft SQL Server’ın Linked Server özelliği ile Active Directory yapınıza bağlanabilir ve group, bilgisayar, kullanıcı gibi nesnelerin bilgilerini sorgular ile çekebilirsiniz.
Linked Server olarak active directory yapınıza bağlanmak için aşağıdaki sorguyu çalıştırın.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
-- Ortaç Demirel -- USE [master] GO EXEC master.dbo.sp_addlinkedserver @server = N'ADSI', @srvproduct=N'Active Directory Service Interfaces', @provider=N'ADSDSOObject', @datasrc=N'adsdatasource' EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'ADSI',@useself=N'False',@locallogin=NULL,@rmtuser=N'ortacdemirel\administrator',@rmtpassword=’1234qqqQ’ GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'collation compatible', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'data access', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'dist', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'pub', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'rpc', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'rpc out', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'sub', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'connect timeout', @optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'collation name', @optvalue=null GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'lazy schema validation', @optvalue=N'false' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'query timeout', @optvalue=N'0' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'use remote collation', @optvalue=N'true' GO EXEC master.dbo.sp_serveroption @server=N'ADSI', @optname=N'remote proc transaction promotion', @optvalue=N'true' GO |
Oracle Veri Tabanından MS SQL Server a Veri Aktarımı
Oracle veri tabanında yer alan verilerinizi MS SQL Server a aktarmak istiyorsanız eğer bunu birçok yöntem ve araç ile yapabilirsiniz. Bu araçlardan biride MS SQL Server Migration Assistant dır. Aracın nasıl kullanıldığını aşağıdaki makale de yer almaktadır.
https://ortacdemirel.com/oracle-veritabanindan-ms-sql-servera-gecis-migration/
Bu araç dışında SQL Server ile birlikte gelen “Import and Export Data” aracını da kullanabilirsiniz.
İki araç arasındaki temel fark migration assistant da ek bir yazılım yüklemenize gerek yoktur. Import and Export data aracında ise Oracle client yazılımı yüklenmelidir.
Bu makalemde Import ve Export Data aracının kullanımına değineceğim.
İlk olarak oracle ın sayfasından “Oracle Database 11g Release 2 Client (11.2.0.1.0) for Microsoft Windows (x64)” yazılımını çekiyorum. Ben 11g den veri aktaracağım için bu sürümü kullanıyorum. Yaklaşık 600 MB lık büyük bir dosyadır. İndirmek için üye olmanız gerekmektedir. Ücretsiz üye olaibilirsiniz.
Yazılımı MS SQL Server yüklü olan makineye kurmamız gerekmektedir çünkü veri aktarma aracı bu sunucumuzda yer almaktadır.
Setup.exe ile kurulumu başlatıyoruz.