SQL Server Always Encrypted

Serdar BAYRAK

Updated on:

Bu makalede hassas ve önemli içeriğe sahip olduğunu düşündüğümüz bir kolon bilgisinin şifrelenme (hash) yöntemi hakkında bilgi vereceğiz. Bir kolonu şifrelemek istediğimizde bu işlemi SQL Server’ın, Always Encrypted özelliği ile yapabiliriz. Buradaki amacımız hassas olan verilerin güvenliğini sağlamak.

Always Encrypted edilen kolonu encrypted edildiğinde metadata değişikliği yapıldığı için o encrpyted için kullanılan Master Key’i silemezsiniz. Data her taşındığında o kolondaki always encrypted özelliğide data ile birlikte gelecektir. Metadata üzerinde yapılan bu değişiklik sizin SELECT sorgularınızda where koşulunda belirteceğiniz LIKE ve benzeri koşullar ile arama imkanınızı engelleyecektir.

Eğer kriptolomak istediğiniz kolonda SELECT sorgularında WHERE koşulunda o kolon üzerinde şartlarınız olacak ise bir başka özellik olan şifreleme işlemini disk üzerinde yapılmasını sağlayan Column Level Encryption özelliğini kullanabilirsiniz. DECRYPTBYKEY fonksiyonu sayesinde şifrelenmiş kolonu convert ederek like ve benzeri şartlarda arama yapma imkanı size sunacaktır.

Tekrar yazımıza dönerek, Always Encrypted özelliğini aktif etmek için aşağıdaki adımları sırasıyla izleyerek sağlayabiliriz.

1-)Encrypted edeceğimiz kolon için o kolonun bulunduğu tablonun veri tabanı altından Security kısmına tıklıyoruz.

2-)Security altında Column Master Keys alanına sağ click ile New Column Master Key diyoruz.

3-) Name kısmına istediğimiz bir isim, key store kısmını Windows Certificate Store- Current User seçeneğini seçtikten sonra Generate edip Ok dedikten sonra Encrypted oluşturuyoruz.

4-)Yeni bir Column Encryption Keys oluşturmak için sağ tıklayıp New Column Encryption Keys diyoruz ve buradan oluşturduğumuz Master Key alanı altında tutacağımız kolonu belirliyoruz.


5-)Crypto’layacağımız kolonun tablosuna gelip sağ click diyerek crypto’lama yapacağız.

6-) Crypto’layacağımız kolonu seçiyoruz. Encryption Type’ını o kolon altındaki verilerin belirli olmasını istersek (bizde anlam kazanmasını) Deterministic eğer belli olmasını istemez ise Randomly yapıyoruz.

7-) Kolon ve Encrypted Column Key seçildikten sonra işlemi sonlandırıyoruz.


😎 Sonucun başarılı olduğunu gördüğümüzde işlemimiz doğru şekilde tamamlanmıştır.

9-)Sql’de Kolonu Crypto’lu görmek istemiyorsak Sql connection bölümümden Options kısmından Additional Connection Paramters ekranına ”Column Encryption Setting= Enabled” yazarak Crypto’lu kolonları kapatabiliriz.

10-)Uygulamlara bunun Önüne geçmek istersek, Connection String’lere (Dotnet üzerinden) ”ConnStrBuilder.ColumnEncryptionSetting = SqlConnecitonColumnEncryptionSetting.Enabled ” crypto’lu kolonu normal okuyabiliriz.

Özelliği aktif etmeden önce ve sonra verilerin görüntüsü aşağıdaki gibi görünecektir.
          

Tüm bu işlemler ilgili database altındaki security kısımında bulunan Always Encrypted Keys özelliği altından eklenerek yapılabilirken. Diğer bir yöntem ile ilgili tabloya sap tıkladıktan sonra Encrypted Columns özelliğini seçip cryptolanması istenilen kolonu randomized seçerek otomatik olarak encrpyted edebiliriz. Aşağıdaki sıra ile bu işlemi gerçekleştirebilirsiniz.





Yorum yapın