Bu bölüme kadar incelediğimiz Column-Level Encryption, kolon veya satır bazında metinsel alanları
şifrelemek için kullanılmaktaydı. Hem yazma hem de okuma işleminde encryp-decrypt yapılması zorunlu olan
bu yöntem, şifrelenecek alanlar çoğaldıkça kaynaklara
olduğu gibi programlama tarafına da ciddi
yük getirmektedir. Bu konudaki bir önceki yazımıza şu adresten ulaşabilirsiniz.
Eğer şifrelenecek alanlar çok fazlaysa ve istediğimiz şey
veri tabanının şifreleme yaptığımız server haricinde çalıştırılamaması ise TDE(Transparent Data Encryption)
yöntemini tercih etmemiz daha doğru olacaktır.
TDE yöntemiyle, diskteki pagelere encyrpt edilerek yazılan veriler, memoryde decrypt edilmiş şekilde tutulurlar. Bu durum verinin
boyutunda bir değişikliğe sebep olmazken CPU
kullanımını (%5-%10 civarı ) ve index
bozulma hızını arttırmaktadır. Eğer keyler veya sertifikalar daha sonra
kullanılmak üzere yedeklenmemişse, server
seviyesinde gerçekleşen bir felaket durumundan sonra verilere erişilemeyecektir.
Transparent Data Encryption yapabilmek için aşağıdaki
resimde olduğu gibi bir takım key ve sertifika oluşturmak gerekmektedir. Biz bu
resimdeki numaralarla belirttiğim gereksinimleri yerine getiriyor olacağız.
Diğerleri zaten işletim sistemi ve SQL Server kurulumu sonrasında hazır hale gelmiş
durumda. İlk iki adım hakkında bilgi edinmek isterseniz şu yazıma bir göz
atabilirsiniz.
Bu konuda ayrıntılı bilgi için msdn’den de faydalanabilirsiniz.
Şimdi bu işlemleri bir örnek üzerinde görelim. Öncelikle TDE
yöntemiyle şifreleyeceğimiz bir veri
tabanı oluşturalım.
CREATE DATABASE TDE_DB
TDE encryption için
master veri tabanında gerekli altyapıyı hazırlayalım. master veri tabanı
üzerinde TDE için kullanılacak “Database
Master Key"i oluşturalım. “Service Master Key” bu keyi korumaktadır.
USE master
GO
CREATE MASTER KEY
ENCRYPTION BY
PASSWORD=N'pass@word1'
Oluşturduğumuz bu DMK
ile korunan bir de server “Certificate”
oluşturalım.
CREATE CERTIFICATE tde_Cert
WITH SUBJECT='TDE serfikam'
Şifrelemek istediğimiz veri tabanını kullanıma alarak, TDE
işlemi için gerekli olan “Data Encrption
Key”i üreteceğiz.
DEK için 4 şifreleme algoritması( AES_128, AES_192, AES_256, TRIPLE_DES_3KEY) ile birlikte bu keyi
koruyacak server Certificate veya server Asymmetric Key belirtilmelidir.
Bu konudaki ayrıntılı bilgiye şu linkten ulaşabilirsiniz.
Bu aşamadan sonra TDE’yi
aktif etmek için TDE_DB/Task/Manage
Database Encryption… ara yüzünden de faydalanabilirsiniz.
Komutlarla devam edelim:
USE TDE_DB
GO
TDE işleminde
kullanılacak "Database Encryption
Key" oluşturalım. Bu key yukarıdaki tde_cert tarafından korunacaktır. İstenirse server “Certificate” yerine server “Asymmetric Key” de kullanılabilir.
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY
SERVER CERTIFICATE
tde_Cert
Bu işlemden sonra çıkan uyarıyı göz ardı etmeyip Certificate ve Private Keyin yedeğini
almalıyız. Aksi halde bir felaket durumunda veri tabanını tekrar açıp
kullanamayabiliriz.
USE master
GO
BACKUP CERTIFICATE tde_Cert
TO FILE ='C:\TDEBackups\tde_Cert.cer'
WITH PRIVATE KEY
(
FILE ='C:\TDEBackups\tde_Cert.pvk',
ENCRYPTION BY PASSWORD=N'pass@word1'
)
Daha sonra bu sertifika şu şekilde yedekten tekrar üretilebilir.
USE master
GO
CREATE CERTIFICATE tde_Cert
FROM FILE = 'C:\TDEBackups\tde_Cert.cer'
WITH PRIVATE KEY
(
FILE ='C:\TDEBackups\tde_Cert.pvk',
DECRYPTION BY PASSWORD='pass@word1'
)
NOT: Bu sertifika
farklı bir serverda üretilecekse önce master databaseinde DMK(Database Master Key) oluşturulmalıdır.
Bundan sonra TDE_DB
isimli veri tabanımızda Transparent Data
Encrytion’ı şu şekilde aktif
edebiliriz.
USE TDE_DB
Go
ALTER DATABASE TDE_DB
SET ENCRYPTION ON
Artık veri tabanımız yeni bir servera taşındığında okunamayacak, okunabilmesi için yedeğini aldığımız sertifikaya ihtiyaç
duyacaktır.
Yapılan tüm işlemleri geri
almak istersek şu sırada keyleri ve certificatei kaldırabiliriz.
Önce TDE’yi pasif hale getirelim.
USE TDE_DB
Go
ALTER DATABASE TDE_DB
SET ENCRYPTION OFF
Database Encrption Key’i kaldıralım.
DROP DATABASE ENCRYPTION KEY
Server Certificate’i kaldıralım.
USE master
GO
DROP CERTIFICATE tde_Cert
Master databaseindeki Database Master Key’i kaldıralım.
DROP MASTER KEY
Bu bölümde TDE yöntemini kullanarak veri tabanını tamamen
şifrelemiş olduk. Şifreleme yaptığımız serverda sorgu sonuçlarını decrypt edilmiş olarak göreceğiz. Ancak
veri tabanımız yeni bir servera taşındığında, şifrelemede kullandığımız Server Certificate olmadan kullanılamayacaktır.
mdf ve ldf
dosyalarını Windows Azure Storage
gibi dış bir lokasyonda güvende tutmak istediğimizde TDE şifreleme yöntemi
tercih edilebilir. Yine benzer şekilde veri tabanı yedeklerinin farklı bir
serverda açılıp kullanılamamasını istiyorsak bu yöntem işimizi görecektir.
SQL Server 2014
ile birlikte gelen Azure Storagelere yedek almak amaçlı geliştirilen URL Backup özelliği aynı zamanda yedeklerin
şifrelenmesi opsiyonu olan Backup
Encrytion’ı da sağlamaktadır. Bu sebeple Azure için sırf yedekleri koruma
amaçlı TDE encrption yapılmasına ihtiyaç kalmamaktadır.
Şifreleme yapılan serverda verilerin encrypt edilmiş halini görmek ve yönetmek istiyorsak önceki
yazılarımızda incelediğimiz Column-Level
Encryption yöntemini kullanmalıyız.
Son olarak TDE ve Column-Level Encryption yöntemlerinden
birine karar vermenizde Mustafa Acungil hocamın şu yazısı yardımcı olabilir.
Encryption konusunda değinmek istediğim genel ve temel
yaklaşımlar şimdilik bu kadar.
Faydalı olması dileğiyle…
Hiç yorum yok:
Yorum Gönder