TDE(Transparent Data Encryption) Nedir ve Nasıl Oluşturulur

TDE veritabanını şifrelemek için kullanılır. TDE ile Data ve Log dosyaları gerçek zamanlı olarak page seviyesinde şifrelenir ve bu esnada uygulamalarda bir kesinti olmaz. TDE ile ilgili en çok akla gelen soru şudur: “veritabanı TDE kullanılarak şifrelendiğinde instance üzerinde yetkisi olan bir DBA ya da başka bir kullanıcı bu veritabanını görebilir mi?” Evet görebilir.

 

TDE’nin amacı veritabanı sunucusu üzerinde yetkili olan 3. şahısların, veritabanı dosyalarını başka bir sunucuya kopyalama ya da veritabanının backup’ını alıp başka bir sunucuya kopyalama yöntemlerini kullanarak veritabanınızı başka bir instance üzerinde açmasını önlemektir. TDE aktif hale getirilmiş bir veritabanında, veriler diske yazılmadan önce şifrelenir ve verilerin okunması gerektiğinde şifreler çözülerek memory’e aktarılır. DBA’lerin veriyi görmesini istemiyorsanız uygulama seviyesinde bir şifreleme yöntemi kullanmanız gerekir. Önemli bir bilgi olarak, veritabanında fulltext index varsa TDE sonrası o da şifrelenecektir. “Fulltext Search” isimli makalemde detaylara ulaşabilirsiniz.

 

TDE’yi oluşturmak için aşağıdaki işlemleri uygulamalı olarak adım adım gerçekleştirelim;

 

  1. Master Key Oluşturmak
  2. Master Key tarafından korunan bir Sertifika Oluşturmak
  3. Sertifika tarafından korunan bir Database Encryption Key oluşturmak
  4. Veritabanını encryption kullanarak şekilde set etmek
  5. Şifrelenmiş veritabanının backup’ını alarak başka bir instance’a test amaçlı restore etmek

1) Master Key Oluşturmak: Aşağıdaki script yardımıyla master key’i oluşturuyoruz.

USE [master]
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TDE123'
GO

2) Master Key tarafından korunan bir Sertifika Oluşturmak: Aşağıdaki script yardımıyla sertifikamızı oluşturuyoruz.

USE [master]
GO
CREATE CERTIFICATE Sertifikam WITH SUBJECT = 'Sertifikam';  
GO

3) Sertifika tarafından korunan bir Database Encryption Key oluşturmak: Aşağıdaki script yardımıyla DEK’i oluşturalım.

USE AdventureWorks2014;  
GO  
CREATE DATABASE ENCRYPTION KEY  
WITH ALGORITHM = AES_128  
ENCRYPTION BY SERVER CERTIFICATE Sertifikam;  
GO  

DEK’i oluşturduğumuzda bize aşağıdaki gibi bir uyarı verir.

 

Warning: The certificate used for encrypting the database encryption key has not been backed up. You should immediately back up the certificate

and the private key associated with the certificate. If the certificate ever becomes unavailable or if you must restore or attach the database on another server,

you must have backups of both the certificate and the private key or you will not be able to open the database.

 

Bu uyarıda şunu belirtir. Sertifika ve private key’in backup’ını almadınız. Eğer sertifika kullanılamaz hale gelirse ve TDE aktif hale getirilmiş bir veritabanını başka bir instance’a taşımak zorunda kalırsanız sertifika ve private key’in backup’ı olmadan veritabanını açamazsınız. Uyarıdan da anlaşılacağın üzere sertifika ve private key’in backup’ı hayati önem taşımaktadır. Ve bu backup’ları sakladığınız yeri de unutmamanız gerekir.

 

Aşağıdaki script yardımıyla sertifika ve private key’inizin backuplarını alabilirsiniz.

USE master
GO
BACKUP CERTIFICATE Sertifikam   TO FILE = 'C:\Backup\Sertifikam'  
    WITH PRIVATE KEY ( FILE = 'C:\Backup\PrivateKeyim' ,   
    ENCRYPTION BY PASSWORD = 'TDE123' );  
GO  

Database’i encryption kullanacak şekilde set etmek: Son olarak veritabanımız üzerinde encryption’ı aşağıdaki script yardımıyla aktif hale getiriyoruz.

 

ALTER DATABASE AdventureWorks2014
SET ENCRYPTION ON;
GO

Bu adımları tamamladıktan sonra AdventureWorks2014 veritabanımızın backup’ını alıp başka bir instance’a restore etmek istediğimizde aşağıdaki gibi hata alıyoruz.

 

 

Bu hatayı almamız gayet normal. Çünkü sertifikamızı bu yeni instance’da oluşturmadık. Öncelikle aşağıdaki şekilde master key’imizi oluşturmalıyız.

 

USE [master]
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'TDE123'
GO

Daha sonra backup’ını aldığımız sertifika ve private key’i kullanarak yeni instance üzerinde sertifikamızı aşağıdaki script yardımıyla oluşturuyoruz.

Use [master]
CREATE CERTIFICATE Sertifikam
    FROM FILE = 'C:\Backup\Sertifikam'
    WITH PRIVATE KEY ( FILE = 'C:\Backup\PrivateKeyim' ,
    DECRYPTION BY PASSWORD = 'TDE123' );
GO

Script’i çalıştırdığımızda aşağıdaki gibi bir hata aldım.

 

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

 

Bu hatanın çözümünü “The certificate, asymmetric key, or private key file is not valid or does not exist; or you do not have permissions for it Hatasının Çözümü” isimli daha önce yazdığım makalemde bulabilirsiniz.

 

Sertifika oluştuktan sonra veritabanını tekrar restore etmeye çalıştığınızda işlemin başarılı bir şekilde tamamlandığını göreceksiniz.

 

Loading

Leave Your Comment