SQL Server 2016 Always Encrypted nedir ?

Uzun bir aradan sonra tekrardan merhabalar arkadaşlar,

Bugün SQL Server 2016 ile gelen Güvenlik yeniliklerinden Always Encrypted hakkında bilgi sahibi olacağız. Always Encrypted nasıl kurulur, nasıl kullanılır ve nasıl kaldırılır konularını anlatacağım. Eğer sizin de sorularınız olursa ayrıca yorum kısmında da sorularınızı sorabilirsiniz. Yardımcı olmaktan mutluluk duyarım.

SQL_Server_2016_flyer

Konumuza başlayacak olursak SQL Server 2016 ile birçok yenilik ve geliştirme geldi. Artık SQL Server çok daha güvenli, performanslı ve stabil hale geldi. Önceki SQL Server versiyonlarında olan fakat kısıtlar nedeniyle operasyonel tarafta pek de kullanamadığımız özellikler (InMemory, ColumnStore Index  etc.) kısıtlarından kurtularak bizi oldukça mutlu etti.

Güvenlik tarafında ise yeni gelen Always Encrypted bize Kişisel Verilerin Korunması kanununa daha uygun bir sistem yapısı kurmamıza yardımcı olacak bir yenilik oldu.

Always Encrypted bize çok daha gelişmiş bir encryption çözümü sunarak önceki versiyonlardaki şifreleme metodlarındaki sysadminin veriyi görebilme gibi güvenlik eksikliklerini, sunucu tarafındaki şifreleme ve şifrelemeyi çözme işlemlerindeki performans yükünü, ayrıca application tarafındaki kodsal implementasyon yükünün tamamını ortadan kaldırıyor.

Peki bu nasıl sağlanıyor ?

AlwaysEncrypted-1

Always Encrypted ile sertifikasyon bir ileri seviyeye taşınarak artık hem SQL tarafında hem de Windows tarafında iki farklı sertifika kullanılıyor. SQL Server tarafında sadece şifreleme yapabilen bir sertifika kullanıyoruz. Buna Column Encryption Key adı veriliyor. Windows tarafında ise Column Master Key adı verilen şifrelemeyi çözen ve sorgulama yapacaksak sorgulamalarımızı şifreli bir şekilde yapabilen başka bir sertifika kullanıyoruz.  Bu sayede SQL Server tarafında veri sürekli şifreli bir şekilde tutuluyor ve şifrelenmiş veriyi okuma ve çözme işlemleri SQL sunucusuna değil Client’a yüklenmiş oluyor. Ayrıca sysadmin gibi veritabanı üzerinde en yetkili kişinin bile sertifikaya sahip olmadan veriye erişmesini engelliyoruz. Ayrıca veri şifrelenmiş kolondaki veri daha SQL sunucusuna gitmeden Client tarafında şifrelendiği için network ortamını dinleyen kötü niyetli bir arkadaş bu verileri de şifreli bir şekilde görüyor.

Bir taşta üç kuş 🙂

Bu yapıyı LCD ekranlarındaki polarizasyon filtresine benzetebiliriz. Normalde LCD ekranlardaki görüntüyü ekranın ön kısmında bulunan ince bir katman olan polarizasyon filtresi sağlar. Bunu ekrandan çıkarıp bir parçasını gözlüğünüze takarsanız sizin ekranınızı sadece siz görürsünüz. Etrafınızdakiler sadece bembeyaz bir ekrana bakarken siz gözlüğünüzle işlerinizi daha rahat bir şekilde yapabilirsiniz. 🙂

AlwaysEncrypted-2

Bunun dışında Application tarafında önceki versiyonlarla kıyaslarsak önceden sürekli olarak sertifikayı kullanarak şifrelemeyi açıp veriyi okuduktan sonra tekrar sertifikayı kullanıp veriyi şifreliyorduk. Bu hem SQL’e bir yük getiriyordu hem de eğer şifrelemeyi sisteminize dahil edecekseniz kodlarınızda değişiklikler yapmak zorunda kalıyordunuz. Always Encrypted ile birlikte bu problemi sadece Connection Stringlerinize ek bir parametre ekleyerek (Column Encryption Setting = Enabled) ortadan kaldırıyoruz.

AlwaysEncrypted-3

Bu işlemler tabiki performans ve storage tarafında etkili oluyor. Fakat bu en minimal seviyede tutuluyor. Aşağıdaki resimlerle birlikte diyebiliriz ki veri girişi işlemlerinde bir Encryption sağlandığından burada veri girişi performansındaki fark 2 katına kadar çıkabiliyor. Fakat sorgulama işlemlerinde yük Client tarafında olacağı için pek de bir fark olmadığını görebiliyoruz.

AlwaysEncrypted-4

Storage tarafında hiç şüphesiz veri normal halinden çok daha karmaşık ve farklı bir veri formatında tutulduğundan sadece yazdığınız bir harf bile çok farklı büyük bir veri haline dönüşüyor. Bu nedenle Depolama tarafında 3 katına kadar hatta daha fazla alan gereksinimi doğuruyor.

Tabiki bu kadar güzelliğin yanında biraz da kısıtlama bulunuyor. Bunlardan bahsedecek olursak:

  • Framework olarak ADO.NET Kütüphanesi ve versiyon olarak 4.6 ve üzeri çalıştırabiliyorsunuz.
  • Full-text search
  • _BIN2 collation şifreleme için gereklidir.
  • Triggerlar için tam destek bulunmuyor.
  • Replication desteklenmiyor.
  • Change Data Capture vs Change Tracking desteklenmiyor.
  • Bir başka SQL Server 2016 yeniliği olan Temporal Tables desteklenmiyor.
  • Bir başka SQL Server 2016 yeniliği olan Stretch Database desteklenmiyor.
  • In-Memory OLTP desteklenmiyor.

Genel olarak Always Encrypted yapısından bahsetmiş olduk.

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

                                                  Yusuf BOĞATEPE

Şimdi bir Always Encrypted demosuyla bu olayı gerçekleyelim. Aşağıdaki linkten Always Encrypted kurulumuna erişebilirsiniz:

SQL Server 2016 – Always Encrypted Kurulumu

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: