TDE: Datenbank Verschlüsselung

Durch die in SQL Server 2008 eingeführte Funktion TDE (Transparent Data Encryption) werden die Datenbank Dateien physikalisch auf dem Dateisystem verschlüsselt. Hierbei handelt es sich nicht um die Verschlüsselung der Daten auf logischer Ebene, also beim Lesen aus den Tabellen o.ä., sondern die Dateien können nicht ohne eine Entschlüsselung auf einem anderen Server wiederhergestellt werden. Weiterhin können die Dateien auch nicht via einem HEX Editor o.ä. ausgelesen werden, da auch der komplette Inhalt verschlüsselt ist.

TDE kostet überings laut Microsoft keinerlei Performance. Voraussetzung hierfür ist, dass entsprechend CPU Zeit zur Verfügung steht, da beim Lesen von Seiten die CPU bei der Entschlüsselung mehr als sonst gefragt ist.

In diesem Beispiel wird beschrieben wie eine Datenbank mit TDE verschlüsselt und dann auf einem anderen Server wiederhergestellt wird:

Zuerst wird auf der Instanz ein Master Schlüssel erzeugt, mit dem dann die Zertifikate verschlüsselt werden:
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Kennwort1!'
GO

Nun wird das Zertfikat erstellt:
USE master
GO
CREATE CERTIFICATE TDE WITH SUBJECT = 'Zertifikat fuer die TDE Datenbank'
GO

Zur Vollständigkeit des Beispiels wird noch die Datenbank „TDE“ erstellt, die geschützt werden soll:
CREATE DATABASE TDE
GO
USE TDE
GO
CREATE TABLE dbo.Daten (wert varchar(100));
GO
INSERT INTO dbo.Daten VALUES ('Daten');
GO

Nun wird ein Verschlüsselungsschlüssel erzeugt, der die Datenbank später verschlüsselt.
Unterstützt werden: AES 128, AES 192, AES 256, TRIPLE DES
USE TDE
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128
ENCRYPTION BY SERVER CERTIFICATE TDE
GO

Nun sollte zuerst das Zertifikat gesichert werden:
USE master
GO
BACKUP CERTIFICATE TDE TO FILE = 'c:\TDE_certificate'
WITH PRIVATE KEY ( FILE = 'c:\TDE_certificate_key' ,
ENCRYPTION BY PASSWORD = 'Kennwort1!' )
GO

Dabei werden 2 Dateien erzeugt: Die eigentliche Zertifikatsdatei und der Schlüssel in der zweiten Datei. Diese Datei wird durch ein Kennwort geschützt.

Verschlüsselung anwenden:
ALTER DATABASE TDE SET ENCRYPTION ON;
GO

Nun ist die Datenbank verschlüsselt und kann physikalisch nicht ohne Schlüssel ausgelesen werden. Die Verschlüsselung wirkt sich nicht auf die Datensicherung (Voll-, Differentiell- oder Transaktionslogsicherung) aus.

Nun wird eine Vollsicherung der Datenbank durchgeführt, die später auf einem anderen Server wiederhergestellt werden soll:
backup database TDE to disk = 'C:\temp\TDE.bak' WITH INIT

Nun kann ein neuer Master-Schlüssel auf dem anderen Server erzeugt werden. Das Kennwort muss nicht identisch mit dem Kennwort vom vorherigen Server sein.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Kennwort2!';
GO

Nun wird das Zertifikat wiederhergestellt. Hier kann ein beliebiger neuer Name ebenfalls gewählt werden:
CREATE CERTIFICATE TDE_SERVER2 FROM FILE = 'c:\TDE_certificate'
WITH PRIVATE KEY ( FILE = 'c:\TDE_certificate_key' ,
DECRYPTION BY PASSWORD = 'Kennwort1!' )
GO

Nun wo das Zertifikat wierhergestellt ist, kann auch die Datensicherung widerhergestellt werden:
RESTORE DATABASE [TDE_RESTORE] FROM DISK = N'C:\temp\TDE.bak' WITH FILE = 1, MOVE N'TDE' TO N'F:\TDE_RESTORE.mdf', MOVE N'TDE_log' TO N'F:\TDE_RESTORE_1.LDF', NOUNLOAD, STATS = 10
GO

Fazit:
TDE eignet sich hervorragend zum Schutz der Datendateien vor unbefugten Zugriff und kostet, in meinen Tests, keinerlei zusätzliche Ressourcen oder Zeit beim Zugriff auf die Datenbank.
Jedoch bleibt immer zu beachten, dass man Zugriff auf das Kennwort wie auch auf das Zertifikat benötigt wenn eine Datensicherung wiederhergestellt werden muss. Weiterhin bleibt zu beachten, dass es sich hier um ein Enterprise Feature handelt.

Schreibe einen Kommentar