Verwenden von SQL Server-Connector mit SQL-Verschlüsselungsfunktionen
Gilt für: SQL Server
Gängige SQL Server-Verschlüsselungsaktivitäten unter Verwendung eines asymmetrischen Schlüssels, der von Azure Key Vault geschützt wird, finden sich in den folgenden drei Bereichen.
Transparente Datenverschlüsselung mithilfe eines asymmetrischen Schlüssels aus Azure Key Vault
Verschlüsseln von Sicherungen mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor
Verschlüsselung auf Spaltenebene mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor
Schließen Sie die Teile I bis IV des Themas Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vaultab, bevor Sie die Schritte in diesem Thema ausführen.
Hinweis
Die Versionen 1.0.0.440 und älter wurden ersetzt und werden nicht länger in Produktionsumgebungen unterstützt. Führen Sie ein Upgrade auf Version 1.0.1.0 oder höher durch, indem Sie das Microsoft Download Center besuchen und die Anweisungen auf der Seite SQL Server-Connector Wartung & Problembehandlung unter „Upgrade des SQL Server-Connectors“ ausführen.
Hinweis
Microsoft Entra ID war bisher unter Azure Active Directory (Azure AD) bekannt.
Transparente Datenverschlüsselung mithilfe eines asymmetrischen Schlüssels aus Azure Key Vault
Verwenden Sie nach dem Abschluss der Teile I bis IV des Themas „Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vault“ den Azure Key Vault-Schlüssel, um den Datenbankverschlüsselungsschlüssel mithilfe von TDE zu verschlüsseln. Weitere Informationen zum Rotieren von Schlüsseln mithilfe von PowerShell finden Sie unter Rotieren einer Transparent Data Encryption-Schutzvorrichtung (TDE) mithilfe von PowerShell.
Wichtig
Löschen Sie keine vorherigen Versionen des Schlüssels nach einem Rollover. Bei einem Rollover von Schlüsseln sind einige Daten noch immer mit den vorherigen Schlüsseln verschlüsselt, z. B. ältere Datenbanksicherungen, gesicherte Protokolldateien und Transaktionsprotokolldateien.
Sie müssen Anmeldeinformationen und eine Anmeldung sowie einen Datenbankverschlüsselungsschlüssel erstellen, der zum Verschlüsseln der Daten und Protokolle in der Datenbank dient. Zum Verschlüsseln einer Datenbank ist die CONTROL -Berechtigung für die Datenbank erforderlich. Die folgende Grafik zeigt die Hierarchie des Verschlüsselungsschlüssels bei Verwendung von Azure Key Vault.
Erstellen von SQL Server-Anmeldeinformationen für die Datenbank-Engine für die Nutzung von TDE
Die Datenbank-Engine verwendet die Microsoft Entra-Anmeldeinformationen für den Zugriff auf den Schlüsseltresor während des Ladens der Datenbank. Es wird empfohlen, eine weitere Client-ID und einen weiteren geheimen Schlüssel für die Datenbank-Engine zu erstellen, wie in Schritt 1 beschrieben, um die erteilten Schlüsseltresorberechtigungen einzuschränken.
Ändern Sie das Transact-SQL-Skript unten in der folgenden Weise:
Bearbeiten Sie das
IDENTITY
-Argument (ContosoDevKeyVault
), damit es auf Ihren Azure Key Vault verweist.- Wenn Sie eine globale Azure-Cloud verwenden, ersetzen Sie das
IDENTITY
-Argument durch den Namen Ihres Azure-Schlüsseltresors aus Teil II. - Wenn Sie eine private Azure-Cloud (z. B. Azure Government, Azure betrieben von 21Vianet oder Azure Deutschland) verwenden, müssen Sie das
IDENTITY
-Argument durch den Tresor-URI ersetzen, der in Teil II, Schritt 3 zurückgegeben wird. Schließen Sie „https://“ nicht in den Tresor-URI ein.
- Wenn Sie eine globale Azure-Cloud verwenden, ersetzen Sie das
Ersetzen Sie den ersten Teil des
SECRET
-Arguments durch die Client-ID der Microsoft Entra-Anwendung aus Schritt 1. In diesem Beispiel lautet die Client-IDEF5C8E094D2A4A769998D93440D8115D
.Wichtig
Bindestriche müssen aus der Client-IDentfernt werden.
Vervollständigen Sie den zweiten Teil des
SECRET
-Arguments mit dem geheimen Clientschlüssel aus Teil 1. In diesem Beispiel ist der geheime Clientschlüssel aus Teil 1ReplaceWithAADClientSecret
.Die endgültige Zeichenfolge für das SECRET-Argument ist eine lange Abfolge von Buchstaben und Ziffern ohne Bindestriche.
USE master; CREATE CREDENTIAL Azure_EKM_TDE_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Erstellen einer SQL Server-Anmeldung für die Datenbank-Engine für TDE
Erstellen Sie eine SQL Server-Anmeldung und fügen Sie ihr die Anmeldeinformationen aus Schritt 1 hinzu. In diesem Transact-SQL-Beispiel wird der gleiche Schlüssel verwendet, der zuvor importiert wurde.
USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it loads a database -- encrypted by TDE. CREATE LOGIN TDE_Login FROM ASYMMETRIC KEY CONTOSO_KEY; GO -- Alter the TDE Login to add the credential for use by the -- Database Engine to access the key vault ALTER LOGIN TDE_Login ADD CREDENTIAL Azure_EKM_TDE_cred ; GO
Erstellen des Datenbank-Verschlüsselungsschlüssels (DEK)
Der DEK verschlüsselt Ihre Daten und Protokolldateien in der Datenbankinstanz und wird seinerseits mithilfe des asymmetrischen Schlüssels aus Azure Key Vault verschlüsselt. Der DEK kann mit jedem von SQL Server unterstützten Algorithmus und jeder unterstützten Schlüssellänge erstellt werden.
USE ContosoDatabase; GO CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY; GO
Aktivieren von TDE
-- Alter the database to enable transparent data encryption. ALTER DATABASE ContosoDatabase SET ENCRYPTION ON; GO
Überprüfen Sie mithilfe von Management Studio, dass TDE aktiviert wurde, indem Sie eine Verbindung mit Ihrer Datenbank mithilfe des Objekt-Explorers herstellen. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank, zeigen Sie auf Aufgaben, und klicken Sie anschließend auf Datenbankverschlüsselung verwalten.
Prüfen Sie im Dialogfeld Datenbankverschlüsselung verwalten , nach, ob TDE aktiviert ist und welcher Schlüssel für die Verschlüsselung des DEKs verwendet wird.
Alternativ können Sie das folgende Transact-SQL-Skript ausführen. Der Verschlüsselungsstatus 3 gibt eine verschlüsselte Datenbank an.
USE MASTER SELECT * FROM sys.asymmetric_keys -- Check which databases are encrypted using TDE SELECT d.name, dek.encryption_state FROM sys.dm_database_encryption_keys AS dek JOIN sys.databases AS d ON dek.database_id = d.database_id;
Hinweis
Die
tempdb
-Datenbank wird automatisch verschlüsselt, wenn für eine beliebige Datenbank TDE aktiviert wird.
Verschlüsseln von Sicherungen mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor
Verschlüsselte Sicherungen werden ab SQL Server 2014 (12.x) unterstützt. Im folgenden Beispiel wird eine Sicherung erstellt und wiederhergestellt, die mit einem Verschlüsselungsschlüssel verschlüsselt wurde, der durch den asymmetrischen Schlüssel im Schlüsseltresor geschützt wird.
Die Datenbank-Engine verwendet die Microsoft Entra-Anmeldeinformationen für den Zugriff auf den Schlüsseltresor während des Ladens der Datenbank. Es wird empfohlen, eine weitere Client-ID und einen weiteren geheimen Schlüssel für die Datenbank-Engine zu erstellen, wie in Schritt 1 beschrieben, um die erteilten Schlüsseltresorberechtigungen einzuschränken.
Erstellen von SQL Server-Anmeldeinformationen für die Datenbank-Engine für die Sicherungsverschlüsselung
Ändern Sie das Transact-SQL-Skript unten in der folgenden Weise:
Bearbeiten Sie das
IDENTITY
-Argument (ContosoDevKeyVault
), damit es auf Ihren Azure Key Vault verweist.- Wenn Sie eine globale Azure-Cloud verwenden, ersetzen Sie das
IDENTITY
-Argument durch den Namen Ihres Azure-Schlüsseltresors aus Teil II. - Wenn Sie eine private Azure-Cloud (z. B. Azure Government, Microsoft Azure betrieben von 21Vianet oder Azure Deutschland) verwenden, müssen Sie das
IDENTITY
-Argument durch den Tresor-URI ersetzen, der in Teil II, Schritt 3 zurückgegeben wird. Schließen Sie „https://“ nicht in den Tresor-URI ein.
- Wenn Sie eine globale Azure-Cloud verwenden, ersetzen Sie das
Ersetzen Sie den ersten Teil des
SECRET
-Arguments durch die Client-ID der Microsoft Entra-Anwendung aus Schritt 1. In diesem Beispiel lautet die Client-IDEF5C8E094D2A4A769998D93440D8115D
.Wichtig
Bindestriche müssen aus der Client-IDentfernt werden.
Setzen Sie in den zweiten Teil des
SECRET
-Arguments den geheimen Clientschlüssel aus Teil I ein. In diesem Beispiel ist der geheime Clientschlüssel aus Teil IReplace-With-AAD-Client-Secret
. Die endgültige Zeichenfolge für dasSECRET
-Argument ist eine lange Abfolge von Buchstaben und Ziffern ohne Bindestriche.USE master; CREATE CREDENTIAL Azure_EKM_Backup_cred WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret' FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;
Erstellen einer SQL Server-Anmeldung für die Datenbank-Engine für die Sicherungsverschlüsselung
Erstellen Sie eine SQL Server-Anmeldung, die von der Datenbank-Engine zum Verschlüsseln von Sicherungen verwendet wird, und fügen Sie die Anmeldeinformationen aus Schritt 1 hinzu. In diesem Transact-SQL-Beispiel wird der gleiche Schlüssel verwendet, der zuvor importiert wurde.
Wichtig
Sie können zum Verschlüsseln von Sicherungen keinen asymmetrischen Schlüssel verwenden, den Sie bereits für TDE (im Beispiel oben) oder die Verschlüsselung auf Spaltenebene (im Beispiel unten) verwendet haben.
In diesem Beispiel wird der asymmetrische Schlüssel
CONTOSO_KEY_BACKUP
aus dem Schlüsseltresor verwendet, der zuvor für die Masterdatenbank importiert oder erstellt werden kann, wie weiter oben in Teil IV, Schritt 5 beschrieben.USE master; -- Create a SQL Server login associated with the asymmetric key -- for the Database engine to use when it is encrypting the backup. CREATE LOGIN Backup_Login FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP; GO -- Alter the Encrypted Backup Login to add the credential for use by -- the Database Engine to access the key vault ALTER LOGIN Backup_Login ADD CREDENTIAL Azure_EKM_Backup_cred ; GO
Sichern der Datenbank
Sichern Sie die Datenbank, indem Sie die Verschlüsselung mit dem asymmetrischen Schlüssel angeben, der im Schlüsseltresor gespeichert ist.
Im folgenden Beispiel sollten Sie beachten, dass wenn die Datenbank bereits mit TDE verschlüsselt wurde und sich der asymmetrische Schlüssel
CONTOSO_KEY_BACKUP
vom asymmetrischen Schlüssel von TDE unterscheidet, die Sicherung mit dem asymmetrischen Schlüssel von TDE undCONTOSO_KEY_BACKUP
verschlüsselt wird. Die SQL Server-Zielinstanz benötigt beide Schlüssel, um die Sicherung zu entschlüsseln.USE master; BACKUP DATABASE [DATABASE_TO_BACKUP] TO DISK = N'[PATH TO BACKUP FILE]' WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD, ENCRYPTION(ALGORITHM = AES_256, SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]); GO
Wiederherstellen der Datenbank
Um eine Sicherung, die mithilfe von TDE verschlüsselt wurde, wiederherzustellen, muss die SQL Server-Zielinstanz zunächst über eine Kopie des asymmetrischen Key Vault-Schlüssels für die Verschlüsselung verfügen. Dies würde folgendermaßen erreicht werden:
Ist der ursprüngliche asymmetrische Schlüssel, der für TDE verwendet wird, nicht mehr im Key Vault vorhanden, dann stellen Sie die wichtigste Schlüsselsicherung im Key Vault wieder her oder importieren Sie den Schlüssel aus einem lokalen HSM. Wichtig: Damit der Fingerabdruck des Schlüssels dem in der Datenbanksicherung gespeicherten Fingerabdruck entspricht, erhält der Schlüssel denselben Key Vault-Schlüsselnamen, den er ursprünglich erhalten hatte.
Wenden Sie die Schritte 1 und 2 auf die SQL Server-Zielinstanz an.
Sobald die SQL Server-Zielinstanz Zugriff auf den asymmetrischen Schlüssel zum Verschlüsseln der Sicherung hat, stellen Sie die Datenbank auf dem Server wieder her.
Codebeispiel für die Wiederherstellung:
RESTORE DATABASE [DATABASE_TO_BACKUP] FROM DISK = N'[PATH TO BACKUP FILE]' WITH FILE = 1, NOUNLOAD, REPLACE; GO
Weitere Informationen zu Sicherungsoptionen finden Sie unter BACKUP (Transact-SQL).
Verschlüsselung auf Spaltenebene mit einem asymmetrischen Schlüssel aus dem Schlüsseltresor
Das folgende Beispiel erstellt einen symmetrischen Schlüssel, der durch den asymmetrischen Schlüssel im Schlüsseltresor geschützt wird. Anschließend wird der symmetrische Schlüssel zum Verschlüsseln von Daten in der Datenbank verwendet.
Wichtig
Sie können für die Verschlüsselung auf Spaltenebene nicht den gleichen asymmetrischen Schlüssel verwenden, den Sie bereits für die Sicherungsverschlüsslung verwendet haben.
In diesem Beispiel wird der asymmetrische Schlüssel CONTOSO_KEY_COLUMNS
aus dem Schlüsseltresor verwendet, der zuvor importiert oder erstellt wurde, wie oben in Schritt 3, Abschnitt 3 von Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vaultbeschrieben. Um diesen asymmetrischen Schlüssel in der ContosoDatabase
-Datenbank zu verwenden, müssen Sie die CREATE ASYMMETRIC KEY
-Anweisung erneut ausführen, um der ContosoDatabase
-Datenbank einen Verweis auf den Schlüssel zur Verfügung zu stellen.
USE [ContosoDatabase];
GO
-- Create a reference to the key in the key vault
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS
FROM PROVIDER [AzureKeyVault_EKM_Prov]
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',
CREATION_DISPOSITION = OPEN_EXISTING;
-- Create the data encryption key.
-- The data encryption key can be created using any SQL Server
-- supported algorithm or key length.
-- The DEK will be protected by the asymmetric key in the key vault
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY
WITH ALGORITHM=AES_256
ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
DECLARE @DATA VARBINARY(MAX);
--Open the symmetric key for use in this session
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;
--Encrypt syntax
SELECT @DATA = ENCRYPTBYKEY
(
KEY_GUID('DATA_ENCRYPTION_KEY'),
CONVERT(VARBINARY,'Plain text data to encrypt')
);
-- Decrypt syntax
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));
--Close the symmetric key
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;
Weitere Informationen
Installationsschritte für die Erweiterbare Schlüsselverwaltung mit Azure Key Vault.
Erweiterbare Schlüsselverwaltung mit Azure Key Vault
EKM provider enabled (Serverkonfigurationsoption)
SQL Server-Connector – Verwaltung und Problembehandlung