Tutorial: Erste Schritte mit Always Encrypted mit Secure Enclaves in SQL Server
Gilt für: SQL Server 2019 (15.x) und höher – nur Windows
In diesem Tutorial werden Ihnen die erste Schritte mit Always Encrypted mit Secure Enclaves in SQL Server vermittelt. Es wird Folgendes gezeigt:
- Erstellen einer einfachen Umgebung zum Testen und Auswerten von Always Encrypted mit Secure Enclaves, wobei für Enklaven kein Nachweis konfiguriert wird.
- Direktes Verschlüsseln von Daten und Ausgeben umfangreicher vertraulicher Abfragen für verschlüsselte Spalten mithilfe von SQL Server Management Studio (SSMS)
Wenn Sie erfahren möchten, wie Sie Always Encrypted mit sicheren Enklaven mithilfe des Host Guardian Service für den Enklavennachweis einrichten, lesen Sie Tutorial: Erste Schritte mit Always Encrypted mit sicheren Enklaven in SQL Server mit Nachweis durch HGS
Voraussetzungen
Der Computer, auf dem Ihre SQL Server-Instanz gehostet wird (als SQL Server-Computer bezeichnet), muss die folgenden Anforderungen erfüllen:
- SQL Server 2019 (15.x) oder höher.
- Windows 10 oder höher, Windows Server 2019 oder höher.
- CPU-Unterstützung für Virtualisierungstechnologien:
- Intel VT-x mit erweiterten Seitentabellen
- AMD-V mit schneller Virtualisierungsindizierung
- Wenn Sie SQL Server in einer VM ausführen:
- Verwenden Sie in Azure eine VM-Größe der Generation 2 (empfohlen) oder eine VM-Größe der Generation 1 mit aktivierter geschachtelter Virtualisierung. Der Dokumentation zu den einzelnen VM-Größen können Sie entnehmen, welche VM-Größen der Generation 1 die geschachtelte Virtualisierung unterstützen.
- Stellen Sie bei Hyper-V 2016 oder höher (außerhalb von Azure) sicher, dass es sich bei Ihrer VM um eine VM der Generation 2 (empfohlen) oder um eine VM der Generation 1 mit aktivierter geschachtelter Virtualisierung handelt. Weitere Informationen finden Sie unter Soll ich in Hyper-V einen virtuellen Computer der 1. oder der 2. Generation erstellen? und unter Konfigurieren der geschachtelten Virtualisierung.
- Aktivieren Sie bei VMware vSphere 6.7 oder höher die Unterstützung für virtualisierungsbasierte Sicherheit für den virtuellen Computer, wie in der VMware-Dokumentation beschrieben.
- Andere Hypervisoren und öffentliche Clouds unterstützen möglicherweise Funktionen für eine geschachtelte Virtualisierung, die auch die Nutzung von Always Encrypted mit VSB-Enclaves ermöglichen. Informationen zur Kompatibilität und Konfigurationsanweisungen finden Sie in der Dokumentation zu Ihrer Virtualisierungslösung.
- Die aktuelle Version von SQL Server Management Studio (SSMS). Alternativ können Sie SSMS auf einem anderen Computer installieren.
Warnung
In Produktionsumgebungen kann die Ausführung von SSMS oder anderen Schlüsselverwaltungstools auf dem SQL Server-Computer die Sicherheitsvorteile der Verwendung von Always Encrypted verringern. Im Allgemeinen wird empfohlen, Tools dieser Art auf einem anderen Computer auszuführen. Weitere Informationen finden Sie im Abschnitt Security Considerations for Key Management(Überlegungen zur Sicherheit für die Schlüsselverwaltung).
Schritt 1: Sicherstellen, dass die virtualisierungsbasierte Sicherheit (VBS) aktiviert ist
Melden Sie sich an Ihrem SQL Server-Computer als Administrator an, öffnen Sie eine erweiterte Windows PowerShell-Konsole und führen Sie msinfo32.exe aus. Überprüfen, ob VBS ausgeführt wird. Wenn VBS ausgeführt wird, überspringen Sie die verbleibenden Schritte in diesem Abschnitt und wechseln Sie zum nächsten Abschnitt.
Aktivieren Sie VBS, indem Sie das folgende Cmdlet in der PowerShell-Sitzung ausführen.
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
Wenn Ihr SQL Server-Computer eine VM oder ein physischer Computer ist, der keinen sicheren UEFI-Start unterstützt oder nicht mit IOMMU ausgestattet ist, müssen Sie die VBS-Anforderung für die Plattformsicherheitsfeatures entfernen. Entfernen Sie die Anforderung für den sicheren Start und IOMMU, indem Sie den folgenden Befehl auf Ihrem SQL Server-Computer in einer PowerShell-Konsolenanwendung mit erhöhten Rechten ausführen:
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
Starten Sie den SQL Server-Computer neu, damit VBS online geht.
Restart-Computer
Wiederholen Sie Schritt 1, um zu überprüfen, ob VBS ausgeführt wird.
Schritt 2: Aktivieren von Always Encrypted mit Secure Enclaves in SQL Server
In diesem Schritt aktivieren Sie die Funktionen von Always Encrypted mithilfe von Enclaves in Ihrer SQL Server-Instanz.
Verbinden Sie sich per SSMS als „sysadmin“ mit Ihrer SQL Server-Instanz, ohne dass Always Encrypted für die Datenverbindung aktiviert ist.
Starten Sie SSMS.
Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.
Wählen Sie Optionen >> und dann die Registerkarte Always Encrypted aus.
Stellen Sie sicher, dass das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung)nicht ausgewählt ist.
Wählen Sie Verbinden.
Öffnen Sie ein neues Abfragefenster, und führen Sie die folgende Anweisung, um den Typ der Secure Enclave auf virtualisierungsbasierte Sicherheit (VBS) festzulegen.
EXEC sys.sp_configure 'column encryption enclave type', 1; RECONFIGURE;
Starten Sie Ihre SQL Server-Instanz neu, damit die vorherige Änderung übernommen wird. Sie können die Instanz in SSMS neu starten, indem Sie im Objekt-Explorer mit der rechten Maustaste darauf klicken und „Neustart“ auswählen. Stellen Sie nach dem Neustart der Instanz eine neue Verbindung her.
Vergewissern Sie sich, dass die Secure Enclave geladen ist, indem Sie die folgende Abfrage ausführen:
SELECT [name], [value], [value_in_use] FROM sys.configurations WHERE [name] = 'column encryption enclave type';
Die Abfrage sollte folgendes Ergebnis haben:
name value value_in_use column encryption enclave type 1 1
Schritt 3: Erstellen einer Beispieldatenbank
In diesem Schritt erstellen Sie eine Datenbank mit einigen Beispieldaten, die Sie später verschlüsseln.
Führen Sie unter Verwendung der SSMS-Instanz aus dem vorherigen Schritt die folgende Anweisung in einem Abfragefenster aus, um eine neue Datenbank mit dem Namen ContosoHR zu erstellen.
CREATE DATABASE [ContosoHR];
Erstellen Sie eine neue Tabelle mit dem Namen Employees.
USE [ContosoHR]; GO CREATE SCHEMA [HR]; GO CREATE TABLE [HR].[Employees] ( [EmployeeID] [int] IDENTITY(1,1) NOT NULL, [SSN] [char](11) NOT NULL, [FirstName] [nvarchar](50) NOT NULL, [LastName] [nvarchar](50) NOT NULL, [Salary] [money] NOT NULL ) ON [PRIMARY];
Fügen Sie der Tabelle Employees einige Mitarbeiterdatensätze hinzu.
USE [ContosoHR]; GO INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('795-73-9838' , N'Catherine' , N'Abel' , $31692); INSERT INTO [HR].[Employees] ([SSN] ,[FirstName] ,[LastName] ,[Salary]) VALUES ('990-00-6818' , N'Kim' , N'Abercrombie' , $55415);
Schritt 4: Bereitstellen Enclave-fähiger Schlüssel
In diesem Schritt erstellen Sie einen Spaltenhauptschlüssel und einen Spaltenverschlüsselungsschlüssel, die Enclave-Berechnungen zulassen.
Erweitern Sie Ihre Datenbank im Objekt-Explorer mit der SSMS-Instanz aus dem vorherigen Schritt, und navigieren Sie zu Sicherheit>Always Encrypted-Schlüssel.
Stellen Sie einen neuen Enclave-fähigen Spaltenhauptschlüssel bereit:
Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenhauptschlüssel aus.
Wählen Sie den Namen des Spaltenhauptschlüssels aus: CMK1.
Stellen Sie sicher, dass Sie entweder Windows-Zertifikatspeicher (Aktueller Benutzer oder lokaler Computer) oder Azure Key Vault auswählen.
Wählen Sie Enclave-Berechnungen zulassen.
Wenn Sie Azure Key Vault ausgewählt haben, melden Sie sich bei Azure an, und wählen Sie Ihren Schlüsseltresor. Weitere Informationen zum Erstellen eines Schlüsseltresors für Always Encrypted finden Sie unter Verwalten Ihrer Schlüsseltresore im Azure-Portal.
Wählen Sie Ihr Zertifikat oder Ihren Azure-Schlüsselwertschlüssel aus, wenn bereits vorhanden, oder klicken Sie auf die Schaltfläche Zertifikat generieren, um ein neues zu erstellen.
Wählen Sie OK aus.
Erstellen Sie einen neuen Enclave-fähigen Spaltenverschlüsselungsschlüssel:
- Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenverschlüsselungsschlüssel.
- Geben Sie einen Namen für den neuen Spaltenverschlüsselungsschlüssel ein: CEK1.
- Wählen Sie in der Dropdownliste Spaltenhauptschlüssel den in den vorherigen Schritten erstellten Spaltenhauptschlüssel.
- Klicken Sie auf OK.
Schritt 5: Direktes Verschlüsseln einiger Spalten
In diesem Schritt verschlüsseln Sie die in den Spalten SSN und Salary gespeicherten Daten in der serverseitigen Enclave und testen dann eine SELECT-Abfrage der Daten.
Öffnen Sie eine neue SSMS-Instanz, und verbinden Sie sich mit Ihrer SQL Server-Instanz, wenn Always Encrypted für die Datenverbindung aktiviert ist.
Starten Sie eine neue SSMS-Instanz.
Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.
Wählen Sie Optionen >> und dann die Registerkarte Always Encrypted aus.
Aktivieren Sie das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung).
Wählen Sie Secure Enclaves aktivieren aus.
Legen Sie das Protokoll auf Kein fest.
Wählen Sie Verbinden.
Wenn Sie aufgefordert werden, die Parametrisierung für Always Encrypted zu aktivieren, wählen Sie Aktivieren aus.
Öffnen Sie mit derselben SSMS-Instanz (Always Encrypted ist aktiviert) ein neues Abfragefenster, und verschlüsseln Sie die Spalten SSN und Salary, indem Sie die folgenden Abfragen ausführen.
USE [ContosoHR]; GO ALTER TABLE [HR].[Employees] ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER TABLE [HR].[Employees] ALTER COLUMN [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL WITH (ONLINE = ON); ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
Hinweis
Achten Sie auf die ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE-Anweisung, die den Abfrageplancache für die Datenbank im obigen Skript löscht. Nachdem Sie die Tabelle bearbeitet haben, müssen Sie die Pläne für alle Batches und gespeicherten Prozeduren leeren, die Zugriff auf die Tabelle haben, um die Informationen für die Parameterverschlüsselung zu aktualisieren.
Um zu überprüfen, ob die Spalten SSN und Salary nun verschlüsselt sind, öffnen Sie ein neues Abfragefenster in der SSMS-Instanz, ohne dass Always Encrypted für die Datenbankverbindung aktiviert ist, und führen Sie die folgende Anweisung aus. Das Abfragefenster sollte verschlüsselte Werte in den Spalten SSN und Salary zurückgeben. Wenn Sie die gleiche Abfrage mit der SSMS-Instanz ausführen, bei der Always Encrypted aktiviert ist, sollten die Daten entschlüsselt angezeigt werden.
SELECT * FROM [HR].[Employees];
Schritt 6: Ausführen umfangreicher Abfragen für verschlüsselte Spalten
Sie können nun umfangreiche Abfragen für verschlüsselte Spalten ausführen. Ein Teil der Abfrageverarbeitung wird in der serverseitigen Enclave ausgeführt.
Stellen Sie in der SSMS-Instanz mit aktiviertem Always Encrypted sicher, dass auch die Parametrisierung für Always Encrypted aktiviert ist.
- Wählen Sie im Hauptmenü von SSMS Tools aus.
- Wählen Sie Optionen... aus.
- Navigieren Sie zu Abfrageausführung>SQL Server>Erweitert.
- Stellen Sie sicher, dass Parametrisierung für Always Encrypted aktivieren aktiviert ist.
- Wählen Sie OK aus.
Öffnen Sie ein neues Abfragefenster, fügen Sie die folgenden Abfrage ein, und führen Sie sie anschließend aus. Die Abfrage sollte Klartextwerte und Zeilen zurückgeben, die den angegebenen Suchkriterien entsprechen.
DECLARE @SSNPattern [char](11) = '%6818'; DECLARE @MinSalary [money] = $1000; SELECT * FROM [HR].[Employees] WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
Versuchen Sie dieselbe Abfrage noch mal in der SSMS-Instanz, in der Always Encrypted nicht aktiviert ist, und notieren Sie den auftretenden Fehler.
Nächste Schritte
Nachdem Sie dieses Tutorial abgeschlossen haben, können Sie mit einem der folgenden Tutorials fortfahren:
- Tutorial: Entwickeln einer .NET-Anwendung mithilfe von Always Encrypted mit Secure Enclaves
- Tutorial: Entwickeln einer .NET Framework-Anwendung mithilfe von Always Encrypted mit Secure Enclaves
- Tutorial: Erstellen und Verwenden von Indizes für Enclave-fähige Spalten mit zufälliger Verschlüsselung