MSSQL Server’da TDE(Transparent Data Encryption) ile Sertifika Oluşturma, Şifreli Backup Alma ve Restore Etme

Bu makalede yapacağımız işlemler bir sertifika oluşturup bu oluşturulan sertifikayla varitabanının Backup’ını aldıktan sonra veritabanını başka bir instance a restore etmek olacak. Teori Bilgilere çok takılmadan uygulamalı olarak işlemlerimize başlayalım.

Küçük bir bilgi vermek gerekirse TDE (Transparent Data Encryption), SQL Server’da veri dosyalarının disk üzerinde şifrelenmesini sağlayan bir güvenlik özelliğidir. TDE, veritabanını şeffaf bir şekilde şifreler; yani uygulamalar, kullanıcılar veya sorgular şifrelemeyi fark etmeden veriye erişebilir. Ama fiziksel veritabanı dosyaları (.mdf, .ldf, .bak) şifreli olur.

Not: Sürekli bir işlem yükü getirir. Veri her okunduğunda ve yazıldığında CPU şifreleme/çözme işlemi yapar.

TDE Ne İşe Yarar?

  • Veritabanı dosyalarının disk üzerindeki halini şifreler: Yani sunucudan dosya çalınsa bile başka bir yere taşınıp açılamaz.
  • Backup dosyalarını da şifreler: TDE aktifse alınan .bak dosyaları da şifreli olur.
  • Şeffaf çalışır: Uygulamalarda ya da SQL sorgularında bir değişiklik yapmanıza gerek yoktur.

Aşağıdaki ekran resimlerinde veriler farkı olabilir çünkü hem gerçek sistemde hem de kendi local’imde ki ekran görüntüleri alınmıştır. İzlenecek yol aynı sadece görmemiz için başka isimler olabilir.

1.adım

Birinci adım instance üzerinde bir master key oluşturmak. Başka bir ortama restore ederken bu master key kullanmak şart değil başka bir master key de oluşturulabilir. (Başka bir ortama sertifikamı restore yaparken , sertifikadan önce farklı bir master key oluşturdum sorunsuz çalıştı.)

USE master;  
GO  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Parola01';  
GO  

2.adım

Master key oluşturulduktan sonra İkinci adım bir  sertifika oluşturmak.

CREATE CERTIFICATE sertifika  
   WITH SUBJECT = 'test sertifikam';  

3.adım

Oluşturulan sertifikayı kullanabilmek için sertifikanın bir backup’ını almak olmalı çünkü farklı ortamlara veritabanını restore etmek için gerekli  aynı instance üzerinde sertifikaya gerek yoktur.

BACKUP CERTIFICATE sertifika   TO FILE = 'C:\Backup\sertifika'  
    WITH PRIVATE KEY ( FILE = 'C:\Backup\sertifikaPrivateKey' ,   
    ENCRYPTION BY PASSWORD = 'Elazig24+' );  

CER VE PVK OLARAK YEDEĞİ ALINIR.

Eğer backup alırken aşağıdaki gibi bir hata alınırsanız bu hata elinizde herhangi bir sertifika olmadığını söylemektedir.(2. adıma dönerek sertifika oluşturulması gerekmektedir.)

Cannot find the certificate ‘sertifika’, because it does not exist or you do not have permission.

Yukarıda oluşturmuş olduğumuz sertifika ve sertifika private key’in yedeğini almayı ve paraloyı bir yere kaydetmeyi unutmayalım. Veritabanını başka bir instance veya sunucuya taşırken olmazsa olmaz yapılarımız.

4.adım

İlgili instance altında veritabanını şifreli bir şekilde backup alalım ssms arayüzünden de yapılıyor.

BACKUP DATABASE [a] 
TO  DISK = N'C:\Backup\asif.bak' 
WITH FORMAT, INIT, 
NAME = N'asif-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,
	COMPRESSION,
	ENCRYPTION
	 (
	 ALGORITHM = AES_128,
	 SERVER CERTIFICATE = [sertifika]
	 ),  
STATS = 25
GO

SSMS arayüzünden Şifreli backup alınması için media options kısmında belirtilen yerin aktif edilmesi gerekiyor.

Yukarıdaki bölüm işaretlenmezse Encryption kısmı pasif görülmektedir.

Yukarıdaki resimde bulunan yerin seçilmesi yeni bir media set oluşturulmasına sebebiyet verecektir. Görseldeki ifadenin anlamı ve teknik karşılığı şudur:

  • “Back up to a new media set, and erase all existing backup sets”

Bu seçenek seçildiğinde yazılım şu işlemi yapar:

  • Temizlik Yapar: Diskteki eski verileri temizlediği için depolama alanında yer açar ancak geçmişe dönük yedeklerinizi (versiyonları) kaybedersiniz.
  • Sıfırdan Başlar: Mevcut yedekleme diskindeki veya medyasındaki (teyp, harici disk vb.) tüm eski yedekleri siler.
  • Yeni Bir Küme Oluşturur: “Media set” adını verdiği yeni bir yapı oluşturur ve güncel yedeği buraya yazar.

Kısacası backup alınan dizinde bulunan şifresiz backupların silinmesi gerçekleşir. Karışıklığı engellemek içindir. Bilgisayardaki tüm yedekleri tarayıp bulup silmez. Sadece o an yedekleme hedefi (Backup Destination) olarak seçtiğin dizindeki verileri siler.

İlgili sertifikayı kullanarak backup options kısmından backup’ı şifreli bir şekilde alabiliriz.

5.adım

Şifreli alınmış backup’ın restore işlemlerine geçiyoruz.

Burada önemli nokta aynı instance üzerine alırsanız restore işleminde  her hangi bir sıkıntı olmaz. Çünkü sertifika yüklü. Mevcut instance dışında başka bir instance’a restore etmek istediğimizde sıkıntı yaşarız. Önceden sertifikayı restore yapılacak instance’a yüklemek gerekir ve aynı zamanda bir master key oluşturmak.

Beşinci adımda belirttiğim gibi farklı bir instance’a restore etmek istediğimizde aşağıdaki gibi hata mesajıyla karşılaşırız. Aşağıdaki resim farklı bir instance olduğunu belirtmek için..

Aşağıdaki script’i sertifikanızın ve sertifikanıza ait private key’in backup’ların olduğu path bilgilerini  ve  bu backup’ları alırken girdiğiniz şifrenizi girerek çalıştırmalısınız.

Yeni instance’ıma restore yapmak için bilgilerimizin olduğu yolu belirtiyorum sertifikalarımı yeni sunucuya kopyaladım o yüzden klasör ismi aynı.

Yeni sunucumda bu işlemi yapmaya çalıştığımda master key’i oluşturmam gerektiğini söyledi. Master key oluşturmak için sertifikaların aldığım instance’da ki master key şifresiyle aynı çalıştırmama gerek yok yeter ki bir master key olsun ona bakıyor. Gerçek sistemde bu şekilde denedim herhangi bir sorunla karşılaşmadım.

--Diğer sunucudan oluşturulan  master key'den farklı
USE master;  
GO  
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Parola23';
GO  

Master key’i oluşturduktan sonra  sertifika restore komutumu çalıştırdım. Restore ederken tüm restore db yi komple okuyor çözme işlemi yapıyor.

Use [master]
CREATE CERTIFICATE sertifika
    FROM FILE = 'C:\Backup\sertifika'
    WITH PRIVATE KEY ( FILE = 'C:\Backup\sertifikaPrivateKey',
    DECRYPTION BY PASSWORD = 'Elazig24+' );
GO

Restore işlemine başladı. İlk başta veritabanını okuyor sonra ilgili veritabanının içine giriyor. ilk başta databases kısmında  X veritabanı yoktu. Şifreyi çözdükten sonra veritabanı gelmiş oldu.

 Restore işlemini  doğru bir şekilde  yapmadan önce Hata mesajını verdi paylaşmak istedim.

Msg 15208, Level 16, State 6, Line 2

The certificate, asymmetric key, or private key file is not valid or does not exist; or you do not have permissions for it.

Burada sql servisinin ilgili klasörde yetkisinin olmamasıdır. Klasör bazında yetki verdik yine olmuyorsa alt dizinlerde yetki vermemiz lazım security kısmından. Sertifikalarımızın olduğu backup klasörüne ve alt dizinlerine yetki verilmesi gerekmektedir.

USE [master]
RESTORE DATABASE [X] FROM  DISK = N'F:\xx\xx\xx.bak' WITH  FILE = 1,  NOUNLOAD,  STATS= 5
GO

İşlemimiz başarılı bir şekilde tamamlandı.

Backup Encryption ve TDE Karşılaştırma

Birçok kişi bu ikisini karıştırır ancak aralarındaki fark “Durağan Veri” (At Rest) ve “Yedek Veri” koruması arasındaki farktır.

ÖzellikBackup EncryptionTDE (Transparent Data Encryption)
KapsamSadece oluşturulan yedek dosyası (.bak)Veritabanı dosyaları (.mdf, .ndf, .ldf)
Çalışma ZamanıSadece yedekleme işlemi sırasındaVeri diske yazılırken ve okunurken (Sürekli)
TempDBEtkilemezTempDB’yi de şifreler (Kritik fark!)
CPU YüküSadece backup anında artarSürekli düşük-orta düzeyde yük bindirir
Restore DurumuSertifika olmadan başka sunucuya kurulamazSertifika olmadan başka sunucuya eklenemez (Attach/Restore)

Bir sonraki makalede görüşmek dileğiyle..

*Göklerde ve yerde ne varsa hepsi Allah’ındır. Allah’ın ilmi ve kudreti her şeyi kuşatmıştır. Nisa-126*

Author: Yunus YÜCEL

2 thoughts on “MSSQL Server’da TDE(Transparent Data Encryption) ile Sertifika Oluşturma, Şifreli Backup Alma ve Restore Etme

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir