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 Lernprogramm erfahren Sie, wie Sie mit Always Encrypted mit sicheren Enklaven in SQL Server beginnen. Es wird Folgendes gezeigt:

  • Erstellen einer grundlegenden Umgebung zum Testen und Auswerten von Always Encrypted mit sicheren Enklaven ohne Nachweis, die für Enklaven konfiguriert sind.
  • 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 Lernprogramm: Erste Schritte mit always Encrypted with secure enclaves in SQL Server with attestation using 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 auf Hyper-V 2016 oder höher (außerhalb von Azure) sicher, dass Ihre VM eine VM der Generation 2 ist (empfohlen) oder dass es sich um eine VM der Generation 1 handelt, auf der geschachtelte Virtualisierung aktiviert ist. 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

  1. Melden Sie sich als Administrator bei Ihrem SQL Server-Computer an, öffnen Sie eine Windows PowerShell-Konsole mit erhöhten Rechten, und führen Sie msinfo32.exe aus. Überprüfen Sie, 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.

    Screenshot of the System Information virtualization-based security details.

  2. 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
    
  3. 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
    
  4. Starten Sie den SQL Server-Computer erneut neu, um VBS online zu erhalten.

    Restart-Computer
    
  5. Wiederholen Sie Schritt 1, um zu überprüfen, ob VBS ausgeführt wird.

Schritt 2: Aktivieren von Always Encrypted mit sicheren Enklaven in SQL Server

In diesem Schritt aktivieren Sie die Funktionen von Always Encrypted mithilfe von Enclaves in Ihrer SQL Server-Instanz.

  1. Verbinden Sie sich per SSMS als „sysadmin“ mit Ihrer SQL Server-Instanz, ohne dass Always Encrypted für die Datenverbindung aktiviert ist.

    1. Starten Sie SSMS.

    2. Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.

    3. Wählen Sie Optionen >> und dann die Registerkarte Always Encrypted aus.

    4. Stellen Sie sicher, dass das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung)nicht ausgewählt ist.

      Screenshot of the SSMS connection option for Always Encrypted disabled.

    5. Wählen Sie Verbinden aus.

  2. Öffnen Sie ein neues Abfragefenster, und führen Sie die folgende Anweisung aus, um den sicheren Enklaventyp auf virtualisierungsbasierte Sicherheit (VBS) festzulegen.

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. 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.

  4. 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.

  1. 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];
    
  2. 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];
    
  3. 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.

  1. Erweitern Sie Ihre Datenbank im Objekt-Explorer mit der SSMS-Instanz aus dem vorherigen Schritt, und navigieren Sie zu Sicherheit>Always Encrypted-Schlüssel.

  2. Stellen Sie einen neuen Enclave-fähigen Spaltenhauptschlüssel bereit:

    1. Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenhauptschlüssel aus.

    2. Wählen Sie den Namen des Spaltenhauptschlüssels aus: CMK1.

    3. Stellen Sie sicher, dass Sie entweder Windows-Zertifikatspeicher (Aktueller Benutzer oder lokaler Computer) oder Azure Key Vault auswählen.

    4. Wählen Sie Enclave-Berechnungen zulassen.

    5. 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.

    6. 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.

    7. Klicken Sie auf OK.

      Screenshot of the allow enclave computations selection in SSMS when creating a new column master key.

  3. Erstellen Sie einen neuen Enclave-fähigen Spaltenverschlüsselungsschlüssel:

    1. Klicken Sie mit der rechten Maustaste auf Always Encrypted-Schlüssel, und wählen Sie Neuer Spaltenverschlüsselungsschlüssel.
    2. Geben Sie einen Namen für den neuen Spaltenverschlüsselungsschlüssel ein: CEK1.
    3. Wählen Sie in der Dropdownliste Spaltenhauptschlüssel den in den vorherigen Schritten erstellten Spaltenhauptschlüssel.
    4. 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.

  1. Öffnen Sie eine neue SSMS-Instanz, und verbinden Sie sich mit Ihrer SQL Server-Instanz, wenn Always Encrypted für die Datenverbindung aktiviert ist.

    1. Starten Sie eine neue SSMS-Instanz.

    2. Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.

    3. Wählen Sie Optionen >> und dann die Registerkarte Always Encrypted aus.

    4. Aktivieren Sie das Kontrollkästchen Always Encrypted aktivieren (Spaltenverschlüsselung).

    5. Wählen Sie Secure Enclaves aktivieren aus.

    6. Legen Sie das Protokoll auf Kein fest.

      Screenshot of the connect to server Always Encrypted tab without attestation using SSMS.

    7. Wählen Sie Verbinden aus.

    8. Wenn Sie aufgefordert werden, die Parametrisierung für Always Encrypted zu aktivieren, wählen Sie Aktivieren aus.

  2. Ö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.

  3. 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.

  1. Stellen Sie in der SSMS-Instanz mit aktiviertem Always Encrypted sicher, dass auch die Parametrisierung für Always Encrypted aktiviert ist.

    1. Wählen Sie im Hauptmenü von SSMS Tools aus.
    2. Wählen Sie Optionen... aus.
    3. Navigieren Sie zu Abfrageausführung>SQL Server>Erweitert.
    4. Stellen Sie sicher, dass Parametrisierung für Always Encrypted aktivieren aktiviert ist.
    5. Klicken Sie auf OK.
  2. Ö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;
    
  3. 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:

Siehe auch