Lernprogramm: Erstellen und Verwenden von Indizes für Enklavenfähige Spalten mit randomisierter Verschlüsselung

Gilt für: SQL Server 2019 (15.x) und höher – nur Windows Azure SQL-Datenbank

In diesem Tutorial erfahren Sie, wie Sie Indizes auf Enclave-fähigen Spalten erstellen und verwenden, indem Sie eine zufällige Verschlüsselung verwenden, die in Always Encrypted mit Secure Enclaves unterstützt wird. Es wird Folgendes gezeigt:

  • Wie Sie einen Index erstellen, wenn Sie Zugriff auf die Schlüssel (den Spaltenhauptschlüssel und den Spaltenverschlüsselungsschlüssel) haben, die die Spalte schützen.
  • Wie Sie einen Index erstellen, wenn Sie keinen Zugriff auf die Schlüssel haben, die die Spalte schützen.

Voraussetzungen

Laden Sie die neueste Version von SQL Server Management Studio (SSMS) herunter.

Sie sollten unbedingt eines der Tutorials Erste Schritte mit Always Encrypted mit Secure Enclaves abgeschlossen haben, bevor Sie die folgenden Schritte in diesem Tutorial ausführen.

Schritt 1: Aktivieren der beschleunigten Datenbankwiederherstellung (ADR) in Ihrer Datenbank

Hinweis

Dieser Schritt gilt nur für SQL Server. Wenn Sie Azure SQL-Datenbank verwenden, überspringen Sie diesen Schritt. Die beschleunigte Datenbankwiederherstellung (ADR) ist in Azure SQL-Datenbank automatisch aktiviert. Ein Deaktivieren wird nicht unterstützt.

Microsoft empfiehlt dringend, ADR in Ihrer Datenbank zu aktivieren, bevor Sie den ersten Index in einer Enclave-fähigen Spalte mit zufälliger Verschlüsselung erstellen. Weitere Informationen finden Sie im Abschnitt Datenbankwiederherstellung in Always Encrypted mit Secure Enclaves.

  1. Schließen Sie alle SSMS-Instanzen, die Sie im vorherigen Lernprogramm verwendet haben. Durch das Schließen von SSMS werden datenbankverbindungen geschlossen, die Sie geöffnet haben, was zum Aktivieren von ADR erforderlich ist.

  2. Öffnen Sie eine neue SSMS-Instanz, und 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.
    5. Wählen Sie Verbinden aus.
  3. Öffnen Sie ein neues Abfragefenster und führen Sie die folgenden Anweisung zum Aktivieren der ADR aus.

    ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
    

Schritt 2: Erstellen und Testen eines Indexes ohne Rollentrennung

In diesem Schritt werden Sie einen Index für eine verschlüsselte Spalte erstellen und testen. Sie agieren als Einzelbenutzer, der die Rollen eines DBA übernimmt, der die Datenbank verwaltet, und des Datenbesitzers, der Zugriff auf die Schlüssel hat, der die Daten schützt.

  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 die Kontrollkästchen "Always Encrypted (Spaltenverschlüsselung) aktivieren" und "Sichere Enklaven aktivieren"
    5. Wenn Sie den Nachweis für Ihre Datenbank verwenden, wählen Sie einen Wert des Enclave Attestation Protocol aus, der Ihren Nachweisdienst (Host Guardian Service oder Microsoft Azure Attestation) darstellt, und füllen Sie die Enklavennachweis-URL aus. Andernfalls wählen Sie Keine.
    6. Wählen Sie Verbinden aus.
    7. Wenn Sie aufgefordert werden, die Parameterisierung für Immer verschlüsselte Abfragen zu aktivieren, wählen Sie "Aktivieren" aus.
  2. Wenn Sie nicht aufgefordert werden, die Parametrisierung für Always Encrypted zu aktivieren, überprüfen Sie, ob die Option 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.
  3. Öffnen Sie ein Abfragefenster, und führen Sie die folgenden Anweisungen aus, um die Spalte LastName in der Tabelle Employees zu verschlüsseln. Sie werden in späteren Schritten einen Index auf dieser Spalte erstellen und verwenden.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
    GO   
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    GO
    
  4. Erstellen Sie einen Index für die Spalte LastName. Da Sie mit der Datenbank verbunden sind, und Always Encrypted aktiviert ist, stellt der Clienttreiber im SSMS transparent CEK1 (der Spaltenverschlüsselungsschlüssel, der die Spalte LastName schützt) für die Enclave bereit, der für die Erstellung des Index benötigt wird.

    CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
    INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
    GO
    
  5. Führen Sie eine umfangreiche Abfrage für die Spalte LastName aus, und überprüfen Sie, ob SQL Server beim Ausführen der Abfrage den Index verwendet.

    1. Stellen Sie im gleichen oder einem neuen Abfragefenster sicher, dass die Schaltfläche Live-Abfragestatistik einschließen in der Symbolleiste aktiviert ist.

    2. Führen Sie die folgenden Abfrage aus.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Beachten Sie auf der Registerkarte "Live Query Statistics ", dass die Abfrage den Index verwendet.

Schritt 3: Erstellen eines Indexes mit Rollentrennung

In diesem Schritt erstellen Sie einen Index auf einer verschlüsselten Spalte, der vorgibt, zwei verschiedene Benutzer zu sein. Ein Benutzer ist ein DBA, der einen Index erstellen muss, aber keinen Zugriff auf die Schlüssel hat. Der andere Benutzer ist ein Datenbesitzer, der Zugriff auf die Schlüssel hat.

  1. Führen Sie unter Verwendung der SSMS-Instanz, ohne dass Always Encrypted aktiviert ist, die folgende Anweisung aus, um den Index auf der Spalte LastName zu löschen.

    DROP INDEX IX_LastName ON [HR].[Employees]; 
    GO
    
  2. Als Datenbesitzer (oder eine Anwendung, die Zugriff auf die Schlüssel hat) füllen Sie dann den Cache innerhalb der Enclave mit CEK1.

    Hinweis

    Sofern Sie Ihre SQL Server-Instanz nach Schritt 2 nicht neu gestartet haben: Erstellen und Testen eines Indexes ohne Rollentrennung, ist dieser Schritt redundant, da CEK1 bereits im Cache vorhanden ist. Wir haben diesen Schritt hinzugefügt, um zu zeigen, wie ein Datenbesitzer einen Schlüssel für die Enclave bereitstellen kann, wenn er nicht bereits in der Enclave vorhanden ist.

    1. Führen Sie in einer SSMS-Instanz mit aktiviertem Always Encrypted die folgenden Anweisungen in einem Abfragefenster aus. Die Anweisung sendet alle Enclave-fähigen Spaltenverschlüsselungsschlüssel an die Enclave. Weitere Informationen finden Sie unter sp_enclave_send_keys.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Alternativ zur Ausführung der oben genannten gespeicherten Prozedur können Sie eine DML-Abfrage ausführen, die die Enklave in der Spalte LastName verwendet. Damit wird nur CEK1 in die Enclave eingetragen.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
  3. Erstellen Sie einen Index als DBA.

    1. Führen Sie in einer SSMS-Instanz ohne aktiviertem Always Encrypted die folgenden Anweisungen in einem Abfragefenster aus.

      CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
      INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
      GO
      
  4. Führen Sie als Datenbesitzer eine umfangreiche Abfrage für die Spalte LastName aus, und überprüfen Sie, ob SQL Server beim Ausführen der Abfrage den Index verwendet.

    1. Wählen Sie in der SSMS-Instanz mit aktiviertem Always Encrypted ein vorhandenes Abfragefenster aus oder öffnen Sie ein neues, und stellen Sie sicher, dass die Schaltfläche Live-Abfragestatistik einschließen in der Symbolleiste aktiviert ist.

    2. Führen Sie die folgenden Abfrage aus.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Beachten Sie in der Live-Abfragestatistik, dass die Abfrage den Index verwendet.

Nächste Schritte

Siehe auch