Zum Hauptinhalt springen

Datenbankverschlüsselung

Gilt für:
SQL Server 2016+TDE aktiviertSysadmin erforderlich

Überblick​

Transparent Data Encryption (TDE) verschlüsselt den Speicher einer gesamten Datenbank mithilfe eines Database Encryption Key (DEK). Mit DuoKey EKM wird dieser DEK durch einen asymmetrischen Schlüssel geschützt, der in der Cloud-Plattform von DuoKey gespeichert ist, was eine zusätzliche Sicherheitsebene bietet.

Voraussetzungen

  • SQL Server mit DuoKey EKM-Provider konfiguriert
  • Asymmetrischer Schlüssel erstellt und Verschlüsselung in DuoKey aktiviert
  • SQL Server Management Studio (SSMS) installiert
  • Sysadmin-Rechte auf SQL Server

Verschlüsselungshierarchie​

DuoKey Cloud Platform

Master Encryption Key (MEK)

MPC-geschützt
Schützt

SQL Server (master-Datenbank)

Asymmetrischer Schlüssel (EKM)

RSA-2048
Schützt

Benutzerdatenbank

Database Encryption Key (DEK)

AES-256
Verschlüsselt

Datendateien

.mdf, .ndf, .ldf

Ruhend verschlüsselt

Datenbank erstellen und TDE aktivieren​

1

Datenbank erstellen oder auswählen

Erstellen Sie eine neue Datenbank oder verwenden Sie eine vorhandene:

Datenbank erstellenSQL
-- Create a new database
CREATE DATABASE EmployeeDB;
GO

USE EmployeeDB;
CREATE TABLE Employees (
  EmployeeID INT PRIMARY KEY,
  FirstName VARCHAR(128),
  LastName VARCHAR(128),
  Salary DECIMAL(10, 2),
  SSN VARCHAR(11)
);
GO
2

Database Encryption Key erstellen

Erstellen Sie einen DEK, der durch den asymmetrischen Schlüssel in DuoKey geschützt ist:

DEK erstellenSQL
USE EmployeeDB;
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
GO
AlgorithmusSchlüsselgrößeEmpfehlung
AES_128128-BitGute Sicherheit
AES_192192-BitBessere Sicherheit
AES_256256-BitEmpfohlen – stärkste
Triple DES168-BitNicht empfohlen
Tipp

Verwenden Sie AES_256 für die stärkste Verschlüsselung. Es bietet ausgezeichnete Sicherheit bei minimaler Leistungseinbuße auf moderner Hardware.

3

Verschlüsselung aktivieren

Aktivieren Sie TDE für die Datenbank:

TDE aktivierenSQL
ALTER DATABASE EmployeeDB
SET ENCRYPTION ON;
GO
Hinweis

Die Verschlüsselung wird asynchron durchgeführt. Bei großen Datenbanken kann dieser Vorgang einige Zeit in Anspruch nehmen.

Verschlüsselungsfortschritt überwachen​

Verschlüsselungsstatus prüfenSQL
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  CASE encryption_state
      WHEN 0 THEN 'No database encryption key present'
      WHEN 1 THEN 'Unencrypted'
      WHEN 2 THEN 'Encryption in progress'
      WHEN 3 THEN 'Encrypted'
      WHEN 4 THEN 'Key change in progress'
      WHEN 5 THEN 'Decryption in progress'
      WHEN 6 THEN 'Protection change in progress'
  END AS Status,
  percent_complete,
  encryptor_type
FROM sys.dm_database_encryption_keys;
GO

Referenz der Verschlüsselungszustände​

ZustandWertBeschreibungErforderliche Aktion
0Kein DEKKein Datenbankverschlüsselungsschlüssel vorhandenDEK mit CREATE DATABASE ENCRYPTION KEY erstellen
1UnverschlüsseltDEK vorhanden, Verschlüsselung jedoch nicht aktiviertMit ALTER DATABASE SET ENCRYPTION ON aktivieren
2Verschlüsselung läuftVerschlüsselung wird durchgeführtAuf Abschluss warten, percent_complete überwachen
3VerschlüsseltDatenbank vollständig verschlüsseltKeine – normaler Betrieb
4SchlüsselwechselSchlüsselrotation wird durchgeführtAuf Abschluss warten
5Entschlüsselung läuftEntschlüsselung wird durchgeführtAuf Abschluss warten
6SchutzwechselWechsel des Protektors wird durchgeführtAuf Abschluss warten

Verschlüsselung überprüfen​

Datenbankverschlüsselung überprüfenSQL
SELECT
  d.name AS DatabaseName,
  d.is_encrypted,
  dek.encryption_state,
  dek.percent_complete,
  dek.key_algorithm,
  dek.key_length
FROM sys.databases d
LEFT JOIN sys.dm_database_encryption_keys dek
  ON d.database_id = dek.database_id
WHERE d.name = 'EmployeeDB';
GO
Verwendung des asymmetrischen Schlüssels überprüfenSQL
USE master;
SELECT
  ak.name AS AsymmetricKeyName,
  ak.algorithm_desc,
  ak.key_length,
  cp.name AS CryptoProviderName
FROM sys.asymmetric_keys ak
INNER JOIN sys.cryptographic_providers cp
  ON ak.provider_id = cp.provider_id;
GO

Datenoperationen testen​

Testen Sie nach dem Aktivieren der Verschlüsselung, ob Datenoperationen transparent funktionieren:

Verschlüsselte Datenbank testenSQL
USE EmployeeDB;

-- Insert test data
INSERT INTO Employees (EmployeeID, FirstName, LastName, Salary, SSN)
VALUES
  (1, 'John', 'Doe', 75000.00, '123-45-6789'),
  (2, 'Jane', 'Smith', 82000.00, '987-65-4321'),
  (3, 'Bob', 'Johnson', 68000.00, '555-12-3456');
GO

-- Query data (works transparently)
SELECT * FROM Employees;
GO
Tipp

Die Daten werden im Ruhezustand automatisch verschlüsselt, bleiben für Anwendungen jedoch transparent.

Leistungsbetrachtungen​

Erstverschlüsselung

  • CPU: Moderater Anstieg
  • E/A: Erhebliche Aktivität
  • Geschwindigkeit: ~1–5 GB/Minute
  • Datenbank bleibt online

Laufende Auswirkung

  • Leseoperationen: 3–5 % Overhead
  • Schreiboperationen: 5–10 % Overhead
  • CPU-Auslastung: 1–3 % Anstieg
  • AES-NI reduziert die Auswirkung
Leistungstipps
  • Planen Sie die Erstverschlüsselung während Wartungsfenstern
  • Überwachen Sie CPU und E/A während der Verschlüsselung
  • Verwenden Sie AES-NI-fähige Prozessoren für beste Leistung
  • Stellen Sie ausreichend tempdb-Speicherplatz sicher

Mehrere Datenbanken verschlüsseln​

Verwenden Sie ein Skript, um mehrere Datenbanken gleichzeitig zu verschlüsseln:

Skript für StapelverschlüsselungSQL
DECLARE @dbname NVARCHAR(128);
DECLARE @sql NVARCHAR(MAX);

DECLARE db_cursor CURSOR FOR
SELECT name FROM sys.databases
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
AND is_encrypted = 0;

OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @dbname;

WHILE @@FETCH_STATUS = 0
BEGIN
  SET @sql = N'USE [' + @dbname + '];
               CREATE DATABASE ENCRYPTION KEY
               WITH ALGORITHM = AES_256
               ENCRYPTION BY SERVER ASYMMETRIC KEY SQL_EKM_Key;
               ALTER DATABASE [' + @dbname + '] SET ENCRYPTION ON;';

  EXEC sp_executesql @sql;
  PRINT 'Encrypted database: ' + @dbname;

  FETCH NEXT FROM db_cursor INTO @dbname;
END;

CLOSE db_cursor;
DEALLOCATE db_cursor;
GO

Verschlüsselung deaktivieren​

Warnung

Das Deaktivieren der Verschlüsselung entschlüsselt die Datenbank, was bei großen Datenbanken erhebliche Zeit in Anspruch nehmen kann.

TDE deaktivierenSQL
-- Disable encryption
ALTER DATABASE EmployeeDB
SET ENCRYPTION OFF;
GO

-- Monitor decryption progress
SELECT
  DB_NAME(database_id) AS DatabaseName,
  encryption_state,
  percent_complete
FROM sys.dm_database_encryption_keys
WHERE DB_NAME(database_id) = 'EmployeeDB';
GO

-- After decryption completes (encryption_state = 1)
USE EmployeeDB;
DROP DATABASE ENCRYPTION KEY;
GO

Best Practices​

Sicherheit

Datenbanken frühzeitig verschlüsseln, Sicherungsschlüssel schützen, Schlüsselzugriff prüfen

Betrieb

Vor der Produktion testen, Leistung überwachen, für Wachstum planen

Wartung

Regelmäßige Sicherungen, Wiederherstellungen testen, DuoKey zugänglich halten

Fehlerbehebung​

Nächste Schritte​