SQL Server 2016 Always Encrypted Kurulumu | Yusuf Boğatepe
CREATE TABLE [dbo].[AlwaysEncryptedTable](
[Unvan] [nvarchar](50) NOT NULL,
[Blog] [nvarchar](50) NOT NULL,
[Maas] INT NOT NULL,
CONSTRAINT [PK_AlwaysEncryptedTable] PRIMARY KEY CLUSTERED
INSERT INTO [dbo].[AlwaysEncryptedTable] VALUES
('Yusuf' ,'BOĞATEPE' ,'Veritabanı Yöneticisi' ,'www.yusufbogatepe.com' ,10000),
('Şeydanur' ,'SANDIKÇI' ,'İş Zekası Uzmanı' ,'www.seydanursandikci.com' ,10000),
('Gökay' ,'AKBAL' ,'Veritabanı Yöneticisi' ,'www.gokayakbal.com' ,10000),
('Burkan' ,'YILMAZ' ,'İş Zekası Uzmanı' ,'www.burkanylmz.wordpress.com' ,10000)
Şimdi SQL Server üzerinde tüm yetkilerin sahibi olan sysadmin grubuna dahil edeceğimiz bir Login oluşturalım ve sysadmin grubuna dahil edelim.
CREATE LOGIN [TestUser] WITH PASSWORD=N'Password1', DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
ALTER SERVER ROLE [sysadmin] ADD MEMBER [TestUser]
Son olarak verilerimizi sorgulayabileceğimiz ve veri girişi yapabileceğimiz iki farklı basit prosedür oluşturalım. Always Encrypted‘da önemli olan bir diğer nokta sorgularınızı parametrik bir şekilde oluşturmanız gerekiyor.
CREATE PROC InsertEncrypted
INSERT INTO AlwaysEncryptedTable
CREATE PROC GetUserInformation
SELECT Ad,Soyad,Unvan,Blog,Maas From AlwaysEncryptedTable
Son olarak verilerinizi sorgulayıp kontrol edebilirsiniz.
Sıra geldi Encryption işlemine. Burada yapacağımız tüm işlemleri GUI üzerinden yani SQL Server Management Studio üzerinden yapacağım.
Aşağıdaki resimde gördüğünüz adımları izleyerek Encrypt Columns sekmesini seçiyoruz. Ardından ilk gelen kısımda genel bilgilendirme kısmını görüyoruz burayı Next diyerek geçiyoruz.
Bu kısımda şifreleme işlemini gerçekleştireceğimiz kolonları seçerek Şifreleme Çeşidini seçiyoruz. Burada önemli olan kısım 2 farklı şifreleme çeşidinden hangisini seçeceğimiz. İki metodun da birbirine göre avantaj ve dejavantajları var. Kısaca bahsedecek olursak:
Deterministic Encryption :
WHERE koşullarında şifreli kolonlar üzerinden sorgulamaya izin verir.
JOIN’lerde şifreli kolonlar kullanılabilir.
GROUP BY sorgularında şifreli kolonlar kullanılabilir.
Tekrar eden veriler için aynı encryption string’ini kullanır. Örnek olarak; Eğer girilen veri 100 ise ve şifrelenmiş hali 0x001 ise aynı veri başka sayırda tekrar girildiğinde bunun içinde verinin şifrelenmiş hali 0x001 olur. Tahmin edilebilir bir şifreleme oluşturur.
Randomized Encryption :
Tekrar eden veriler için farklı encryption string’ini kullanır. Örnek olarak; Eğer girilen veri 100 ise ve şifrelenmiş hali 0x001 ise aynı veri başka sayırda tekrar girildiğinde bunun için verinin şifrelenmiş hali 0x002 olur. Tahmin edilemez bir şifreleme oluşturur.
Şifreli kolonlar üzerinde WHERE, JOIN veya GROUP BY gibi sorgulamalara izin vermez.
Ben şifreleme metodumu Deterministic olarak seçiyorum. Hemen sağ tarafta ise önceki makalede bahsettiğimiz Encryption Key‘imizin ismini değiştirebilirsiniz yada daha önceden oluşturduğunuz bir Encryption Key kullanabilirsiniz. Ben varsayılan olarak bırakarak devam ediyorum ve yeni bir Encryption Key oluşturuyorum.
Bir sonraki kısımda önceki makalede bahsettiğim Column Master Key(CMK) oluşturuyoruz. Elimde bulunan bir CMK olmadığından otomatik olarak oluşturmasını istiyorum. Bu key nereye yüklensin kısmında ise Lokal bilgisayar üzerindeki Windows Cert. Store seçiyorum. Buraya ilerleyen kısımlarda nasıl erişebileceğimizi göstereceğim. Yada Azure tarafında bir Vault kullanabilirsiniz.
Son kısımda ise bu sertifikayı kullanma çeşidim bulunuyor. Current User seçtiğinizde Windows’a bağlanan kullanıcı üzerinde implemente edilir. Yani sertifikayı import edecek kişi sadece şuanda bağlı olan kullanıcı üzerinden bu sertifikayı kullanabilir demek. Local Machine seçtiğinizde tüm makine üzerinde etkili olan bir sertifika oluşturmuş olursunuz. Yani o makine üzerinden kim bağlanırsa bağlansın bu sertifikayı kullanabilir demek oluyor.
Artık bir sonraki aşamaya geçebiliriz. Bu aşamada şifrelemeyi hemen mi yapalım yoksa bir PowerShell scripti oluşturup sonra mı yapalım ? diye bir soru soruyor. Hemen yapalım deyip son kısımda Finish’e basıyorum. Ve Encryption işlemi başlıyor.
İşlemler bitti. Artık benim verilerim de şifreli 🙂 Şimdi sorgulayarak bir kontrol edelim.
Gördüğünüz gibi veriler şifreli ve Deterministic şifreleme çeşidini kullandığımdan aynı veriler için aynı şifrelemeyi kullanmış.
Şimdi Windows Cert. Store‘a yüklenen Column Master Key’i nasıl export edip farklı makinalarda kullanıyoruz. Adım adım yapalım. İlk olarak Başlat’a Run (Kısayol: WindowsTuşu+R) (Türkçe Windows kullanıyorsanız : Çalıştır) yazarak giriyoruz ve mmc yazarak Enter’a basıyoruz. Daha sonra File kısmından Add/remove snap-in sekmesine tıklıyoruz.
Bu kısımda Sertifikalar bölümünü seçerek boş olan ekranımıza ekleyeceğimizi belirtiyoruz. Ardından bize bir pencere açılıyor ve Cert. Store için hangi kısmı kullanacağımıza dair bir seçenek soruyor. Burada sertifikamızı Local Machine olarak oluşturduğumuzdan Computer Account diyoruz. Bir sonraki sekmede Local Machine seçili olacaktır. Next dedikten sonra sertifika kısmına ulaşmış olacağız.
Sertifikaların ekranı geldiğinde bizi karşılayan bir çok alan olduğunu göreceksiniz. Aşağıdaki resimleri takip ederek Always Encrypted sertifikamıza ulaşabiliriz. Daha sonra sağ tıklayarak All Task > Export kısmını izleyerek sertifikanın başka bir lokasyona taşınması için işlem yapıyorum. Burada önemli olan kısım ilk adımdan sonra Next dediğinizde Private Key kısmında Yes olarak işaretlemeniz ve Private Key ile birlikte çıkarmanız. Yoksa sertifikanız çalışmayabilir. Private Key seçtikten sonra ileri sekmede herhangi bir değişiklik yapmadan bir sonraki sekmeye geçiyoruz. Burada sertifikayı izinsiz import işlemlerine karşı koruma amaçlı bir parola belirliyoruz. Ardından son aşamada sertifikayı hangi lokasyona export edeceğimizi seçiyoruz (Ben masaüstü seçtim) sertifikayı export işlemini yaptık.
Artık bu sertifikayı Client Application tarafında kullanarak Always Encrypted nimetlerinden yararlanabiliriz.
Şimdi NODE2’ye geçerek kendi yazdığım basit yazılım üzerinden nasıl sorgulamalar yapıyorum bunları göreceğiz. Yazılıma alttaki linkten erilebilirsiniz. Yazılımda veri sorgularken kullandığım iki buton var. İkisi de aynı prosedürü çağırıyor fakat Connection String olarak biri eski tür çalışıyor diğeri ise Column Encryption Setting = Enabled parametresiyle çalışıyor. En önemlisi de ikisi de başta oluşturduğum sysadmin yetkilerine sahip sysadmin ile çalışıyor. Şimdi sertifikamız olmadan sysadmin yetkileriyle hem eski usül hem yeni usül Connection String’leri kullanarak sorgulama yapalım.
Güzel güzel aldık hatalarımızı. Demekki neymiş sysadmin herşeye yetmiyormuş. Şimdi sertifikayı buraya import ederek tekrar deneyelim. 🙂 Öncelikle export ettiğim sertifikayı Client olan makinaya taşıdım. Ve çalıştırdım. Burada bize nereye import edeceğini soruyor. Local Machine olarak seçiyorum ve devam ediyorum. Bu sefer de şifreyi sordu ve şifreyi girerek işlemi sonuna kadar devam ettirip bitiriyorum. Artık tekrar deneme yapabilirim. Bu sefer Şeydanur SANDIKÇI‘yı sorgulayalım.
Eski usul yine veriyi getirmedi ama yeni usul sorgulama sertifikasını aldığı gibi verimizi getirdi.
Umarım yararlı olmuştur. Keyifli okumalar.
Bir sonraki makalemde Always Encrypted ile şifrelenen kolonları nasıl eski haline getirebilirizi işleyeceğiz. Makaleye aşağıdaki linkten erişebilirsiniz:
SQL Server 2016 – Always Encrypted Nasıl Kaldırılır ?
Etiketler:Always Encrypted, Always Encrypted Kurulumu, Always Encrypted Setup, Kurulum, sql, SQL Server, SQL Server 2016, SQL Server 2016 Always Encrypted, SQL Server 2016 Always Encrypted Setup, SQL Server 2016 Yenilikleri, SQL Server Always Enrypted Kurulumu, SQL Server New Features, Yenilikler
SQL Server 2016 – Always Encrypted nedir ? | Yusuf Boğatepe - 16 Nisan 2017
SQL Server 2016 Always Encrypted Nasıl Kaldırılır ? | Yusuf Boğatepe - 16 Nisan 2017