Transparent Data Encryption / TDE in SQL Server: Freigabe, Schlüssel & Zertifikate, Sicherungen, Wiederherstellung
Transparente Datenverschlüsselung (Transparent Data Encryption, TDE) verschlüsselt SQL Server-, Azure SQL-Datenbank- und Azure SQL Data Warehouse-Datendateien, bekannt als „Verschlüsselung ruhender Daten“. Sie können verschiedene Vorsichtsmaßnahmen treffen, um eine Datenbank abzusichern, beispielsweise ein sicheres System entwerfen, vertrauliche Datenbestände verschlüsseln oder eine Firewall für die Datenbankserver einrichten. Wenn jedoch physische Medien (etwa Laufwerke oder Sicherungsbänder) gestohlen werden, muss ein böswilliger Benutzer die Datenbank einfach nur wieder herstellen und kann dann die Daten durchsuchen. Eine Lösung dieses Problems besteht darin, die sensiblen Daten in der Datenbank zu verschlüsseln, und den für die Verschlüsselung der Daten verwendeten Schlüssel mit einem Zertifikat zu schützen. Dadurch kann niemand die Daten verwenden, der nicht im Besitz der Schlüssel ist. Diese Art des Schutzes muss jedoch im Voraus geplant werden.
Nach dem Lesen von https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/transparent-data-encryption-tde und einigen Blogs habe ich den folgenden Workflow entwickelt, um:
- TDE für die Datenbank aktivieren
- Verschlüsselungsschlüssel & Zertifikatsicherung
- Datenbank aus Sicherung wiederherstellen
Schritte zum Ausführen von Vielen, bevor Sie TDE einschalten
Bevor Sie TDE einschalten, BITTE SICHERN, dass keine Verbindungen zur Datenbank vorhanden sind. Der beste Weg ist, die Datenbank in den Einzelbenutzermodus umzuschalten. Andernfalls können Sie Deadlocks begegnen, die Ihren Verschlüsselungsprozess stecken und auch verhindern, dass Ihre Anwendung eine Verbindung zur Datenbank herstellt. Bitte überprüfen Sie ganz unten auf diesem Artikel, um eine mögliche Lösung für solche Fälle zu finden.
Datenbankstammschlüssel in [master] Datenbank erstellen
Mit diesem Schlüssel werden alle anderen Schlüssel in dieser Datenbank verschlüsselt.
USE master; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123QWEasd'; GO
Zertifikat erstellen, das den Datenbank-Verschlüsselungsschlüssel (Database Encryption Key, DEK) verschlüsselt
Dieses Zertifikat verschlüsselt DEK, das sich in der Zieldatenbank befindet und wird verwendet, um die Datenbank selbst zu verschlüsseln.
USE master; GO CREATE CERTIFICATE MyServerName_SqlTdeMasterKeyCert WITH SUBJECT = 'MyServerName_SqlTdeMasterKeyCert'; GO
Erstellen Sie einen Datenbank-Verschlüsselungsschlüssel (DEK) in der Datenbank
USE MyDatabaseName; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_128 ENCRYPTION BY SERVER CERTIFICATE MyServerName_SqlTdeMasterKeyCert; GO
TDE für die Datenbank aktivieren
USE MyDatabaseName; GO ALTER DATABASE MyDatabaseName SET ENCRYPTION ON; GO
Überprüfe den Verschlüsselungsstatus der Datenbank
SELECT db.name, db.is_encrypted, dm.encryption_state, dm.percent_complete, dm.key_algorithm FROM sys.databases db JOIN sys.dm_database_encryption_keys dm ON db.database_id = dm.database_id WHERE db.name = 'MyDatabaseName'
Backup-Datenbank Master Key & Zertifikat (mit privatem Schlüssel)
Verwenden Sie diese Schritte, um Datenbank-Master-Schlüssel und Zertifikat zu sichern, um sie später wiederherzustellen, während die Datenbank von der Sicherung auf einem anderen Server wiederhergestellt wird.
USE master; GO OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd'; BACKUP MASTER KEY TO FILE = 'd:\temp\MyServerName_DbMasterKey' ENCRYPTION BY PASSWORD = '123QWEasd2'; GO USE master; GO BACKUP CERTIFICATE MyServerName_SqlTdeMasterKeyCert TO FILE = 'd:\temp\MyServerName_SqlTdeMasterKeyCert.cer' WITH PRIVATE KEY (FILE = 'd:\temp\MyServerName_SqlTdeMasterKey.pvk', ENCRYPTION BY PASSWORD = '123QWEasd3')
Datenbankschlüssel und Zertifikat wiederherstellen
Diese Schritte werden auf einem anderen Server durchgeführt, wo Sie Ihre Datenbank aus der Sicherung wiederherstellen möchten.
USE master; GO RESTORE MASTER KEY FROM FILE = 'd:\temp\MyServerName_DbMasterKey' DECRYPTION BY PASSWORD = '123QWEasd2' --password to decrypt backup ENCRYPTION BY PASSWORD = '123QWEasd'; --password to encrypt restored Master Key in the current database. GO USE master; GO OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd'; GO CREATE CERTIFICATE MyServerName_SqlTdeMasterKeyCert FROM FILE = 'd:\temp\MyServerName_SqlTdeMasterKeyCert.cer' WITH PRIVATE KEY (FILE = 'd:\temp\MyServerName_SqlTdeMasterKey.pvk', DECRYPTION BY PASSWORD = '123QWEasd3')
Datenbank aus der Sicherung wiederherstellen
USE master GO OPEN MASTER KEY DECRYPTION BY PASSWORD = '123QWEasd'; GO RESTORE DATABASE MyDatabaseName FROM DISK = N'd:\temp\MyDatabaseNameBackup.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 5;
Fehlerbehebung bei TDE
Es gibt eine Anzahl von Fällen, wenn die TDE-Verschlüsselung während der Erstverschlüsselung stecken kann. Möglicherweise - bei der Durchführung von Pre-Enryption Scans. Wenn dies der Fall ist, können Sie versuchen, den Scan zu stoppen und die Verschlüsselung wieder zu aktivieren:
DBCC TRACEON(5004) GO DBCC TRACEOFF(5004) GO ALTER DATABASE MyDatabaseName SET ENCRYPTION ON
- Zugriffe: 3140