SQL Server 2016 Always Encrypted Kurulumu

Merhabalar arkadaşlar bir önceki makalede Always Encrypted nedir ? Hangi yenilikleri getirdi ? gibi soruların cevaplarını konuştuk.

Bu makalede ise artık Always Encrypted nasıl kurulur ? Dikkat etmemiz gereken noktalar nelerdir gibi konulara değineceğiz. Bir sonraki makalede ise nasıl kaldırılır bunu göreceğiz.

Always Encrypted Demo muza başlamadan önce çalışacağımız ortamdan bahsedeyim. İki farklı sanal makine üzerinden yaptığım demoda NODE1 SQL Server 2016 kurulu sunucumuz, NODE2 ise Client olarak kullanacağım sanal makine olacak.

Şimdi aşağıdaki script ile NODE1 üzerinde bir veritabanı oluşturalım. Ardından veritabanı üzerinde bir tablo oluşturarak içinde veri girişleri yapalım.


USE master
GO
CREATE DATABASE AlwaysEncryptedDemo
GO
USE AlwaysEncryptedDemo
GO
CREATE TABLE [dbo].[AlwaysEncryptedTable](

 [ID] [int] IDENTITY(1,1) NOT NULL,
 [Ad] [nvarchar](50) NOT NULL,
 [Soyad] [nvarchar](50) NOT NULL,
 [Unvan] [nvarchar](50) NOT NULL,
 [Blog] [nvarchar](50) NOT NULL,
 [Maas] INT NOT NULL,

 CONSTRAINT [PK_AlwaysEncryptedTable] PRIMARY KEY CLUSTERED
(
 [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

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

GO

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
(
@ad nvarchar(50),
@soyad nvarchar(50),
@unvan nvarchar(100),
@websitesi nvarchar(50),
@maas INT
)
AS
INSERT INTO AlwaysEncryptedTable
VALUES
(@ad,@soyad,@unvan,@websitesi,@maas)

GO

CREATE PROC GetUserInformation
(
@soyad nvarchar(50)
)
AS
SELECT Ad,Soyad,Unvan,Blog,Maas From AlwaysEncryptedTable
WHERE Soyad=@soyad
GO

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.

SQL-Server-2016-AlwaysEncrypted-1

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 :

    • Avantajları

      • WHERE koşullarında şifreli kolonlar üzerinden sorgulamaya izin verir.
      • JOIN’lerde şifreli kolonlar kullanılabilir.
      • GROUP BY sorgularında şifreli kolonlar kullanılabilir.
    • Dejavantajları

      • 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 :

    • Avantajları

      • 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.
    • Dejavantajları

      • Ş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.

SQL-Server-2016-AlwaysEncrypted-2

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.

SQL-Server-2016-AlwaysEncrypted-3

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.

SQL-Server-2016-AlwaysEncrypted-4

İşlemler bitti. Artık benim verilerim de şifreli 🙂 Şimdi sorgulayarak bir kontrol edelim.

SQL-Server-2016-AlwaysEncrypted-5

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.

SQL-Server-2016-AlwaysEncrypted-9SQL-Server-2016-AlwaysEncrypted-10

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.

SQL-Server-2016-AlwaysEncrypted-11SQL-Server-2016-AlwaysEncrypted-12SQL-Server-2016-AlwaysEncrypted-13

SQL-Server-2016-AlwaysEncrypted-14.jpg

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.

http://dosya.co/alkak84jnw5c/AlwaysEncrypted_APP.rar.html

SQL-Server-2016-AlwaysEncrypted-15.jpg

SQL-Server-2016-AlwaysEncrypted-16SQL-Server-2016-AlwaysEncrypted-17

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.

SQL-Server-2016-AlwaysEncrypted-18

Eski usul yine veriyi getirmedi ama yeni usul sorgulama sertifikasını aldığı gibi verimizi getirdi.

Umarım yararlı olmuştur. Keyifli okumalar.

                                                  Yusuf BOĞATEPE

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 ?

 

Reklamlar

Etiketler:, , , , , , , , , , , ,

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

%d blogcu bunu beğendi: