Microsoft SQL Server Encription metodları konusunda yeni bir atak yaptı ve Always Encrypted adı altında veri şifreleme alanında kolon bazlı veri şifrelemeyi SQL server tablolarında yazılım bağımsız yapılabilir bir duruma getirdi.
Aslında SQL server veri şifrelemede TDE (Transparent Data Encryption) özelliği ile veritabanı dosyalarını bulunduğu disklerde şifreleyebiliyor, bu sayade de veri hırsızlığı sonucu çalınan datanın kullanılamaz olacağını garanti altına alabiliyordu. Bu yöntemde oluşturulan key ve sertifika olmaksızın veritabanı backup ya da mdf ldf dosyalarının açılması ve anlamlı bir veri elde dilebilmesi imkansız hale geliyordu. Fakat bu yöntem verinin tümünü diskte şifrelediğinden araya sızmalara karşı korumasızdı. Ayrıca belki de gerekli olmadığı halde tüm veriyi de şifrelemekteydi.
Dolayısı ile ihtiyacı tam anlamıyla hedefleyip ona göre çıkartılan bu yeni özellik sayesinde sadece gerekli görülen tablo kolon verileri şifrelenebilmekte, bu sayede de hem disk hemde network üzerinden geçen veri şifreli olmakta.
Aslında aşina olduğumuz ve yazılımcıların uygulamalarında geliştirdikleri kodla bunu yapmaları mümkün. Yani bir kullanıcının şifresini veritabanında encrypted olarak tutulabilir. Ancak Microsoft artık bunu yazılım bağımsız olarak direk veritabanı kolonlarında yapabilir hale geldi. Yani artık kullanıcıların kredi kartı, kimlik numaraları veya maaş bilgileri gibi hassas verileri bir veritabanı yöneticisi ya da bir yazılımcının bile sql sorguları ile ulaşamayacağı şekilde şifrelenebilir durumda. Şimdi bu yöntemi biraz daha detaylı olarak irdelemeye başlayalım.
SQL 2016 Always Encrypted nasıl yapılır?
Aslında yapılması gereken işlem basit. Bunun için şifrelemek istediğiniz veritabanı üzerinde sağ tıklayıp tasks menüsünden Encrypt Columns seçmeniz yeterli.
Bu işlemin ardından karşınıza aşağıdaki gibi bir wizard gelecektir.
İkinci adımda veritabanındaki tablolar ve uygun kolonlar karşınıza çıkacak. Burda bilmeniz gereken şey bir key ile birden fazla kolon şifreleyebileceğiniz gibi her kolon için ayrı bir key de kullanabilirsiniz.
Bir sonraki bölümde seçtiğiniz kolonun encryption Type’ını seçmeniz istenecek. Burda seçebileceğiniz iki seçenek bulunmakta.
Deterministic seçeneği aynı olan hücrelerin şifrelenmiş verisininde aynı olacağı anlamına gelmekte. Yani bir hücredeki veri 1234 olsun bunun şifrelenmiş hali ise ABCD olsun. Aynı kolonda başka bir hücrede de 1234 verisi varsa o da ABCD olarak şifrelenecek anlamına gelmekte.
Randomized seçeneğinde ise her hücre aynı ya da farklı veri içersin tamamiyle random olarak şifrelenecek anlamına gelmekte. Yani 1234 verisi bir hücrede ABCD olarak şifrelenirken başka bir hücredeki 1234 verisi bundan farklı olarak KLMN olarak şifrelenecektir.
Bu noktada biraz farklı ilerleyeceğim ve aşağıdaki ekranda seçiminize sunulan Encryption Key konusuna değineceğim.
Bu adımda yeni bir key ya da eski oluşturduğunuz keylerden birini seçip ilerleyebilirsiniz. Wizard otomatik olarak konfigürasyonunuzu oluşturacaktır. Fakat bunlar asıl nerde tutuluyor ve kontrollü olarak nasıl oluşturulur onu da göstermek istiyorum. Veritabanında security bölümünde Always Encrypted Keys bölümünü göreceksiniz. İşte bu bölümde Master key ve Encryption key bölümlerinde tutulmakta. İsterseniz Master key ve Encryption key alanlarından kendiniz de oluşturabilirsiniz.
Column Selection işleminden sonraki aşamada ise size sertifika yaratmanız için seçenekler sunulmaktadır.
Wizard ile otomatik oluşturduğunuzda sizden windows ya da Azure Key Valut seçmeniz istenmektedir.
Fakat Master keyi securty bölümünden oluşturmak istediğinizde key store olarak aşağıdaki ekrandaki gibi seçenekleri de görebilirsiniz.
Ve son bölümde işlemlerimizi tamamlıyoruz.
Kaynak:
https://msdn.microsoft.com/en-us/library/mt163865.aspx,