Freigeben über


Ausführen von Transact-SQL-Anweisungen mit Secure Enclaves

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

Always Encrypted mit Secure Enclaves ermöglicht es einigen Transact-SQL-Anweisungen (T-SQL), vertrauliche Berechnungen in verschlüsselten Datenbankspalten in einer serverseitigen Secure Enclave auszuführen.

Anweisungen mit Secure Enclaves

Die folgenden Arten von T-SQL-Anweisungen verwenden Secure Enclaves.

DDL-Anweisungen mit Secure Enclaves

Für die folgenden Arten von DDL-Anweisungen werden Secure Enclaves benötigt.

DML-Anweisungen mit Secure Enclaves

Für die folgenden Anweisungen in der Datenbearbeitungssprache (Data Manipulation Language, DML) oder Abfragen von Enclave-fähigen Spalten mithilfe von zufälliger Verschlüsselung werden Secure Enclaves benötigt:

Hinweis

Vorgänge für Indizes und vertrauliche DML-Abfragen mithilfe von Enclaves werden nur für Enclave-fähige Spalten unterstützt, für die die zufällige Verschlüsselung verwendet wird. Die deterministische Verschlüsselung wird nicht unterstützt.

Der Kompatibilitätsgrad der Datenbank sollte auf SQL Server 2022 (160) oder höher eingestellt sein.

In Azure SQL Database und in SQL Server 2022 (16.x) erfordern vertrauliche Abfragen, die Enklaven für eine Zeichenkettenspalte (char, nchar) verwenden, dass die Spalte eine Sortierreihenfolge mit binärem Codepunkt (_BIN2) oder eine Sortierreihenfolge mit UTF-8 verwendet. In SQL Server 2019 (15.x) ist eine a_BIN2 Sortierung erforderlich.

DBCC-Befehle mit Secure Enclaves

Für DBCC-Verwaltungsbefehle (Transact-SQL), die das Überprüfen der Integrität von Indizes umfassen, werden möglicherweise ebenfalls Secure Enclaves benötigt, wenn die Datenbank Indizes für Enclave-fähige Spalten enthält, die die zufällige Verschlüsselung verwenden. Beispielsweise DBCC CHECKDB (Transact-SQL) und DBCC CHECKTABLE (Transact-SQL).

Voraussetzungen für das Ausführen von Anweisungen mit Secure Enclaves

Ihre Umgebung muss die folgenden Anforderungen erfüllen, damit das Ausführen von Anweisungen unterstützt wird, die eine Secure Enclave verwenden.

  • Die SQL Server-Instanz oder die Datenbank und der Server in Azure SQL-Datenbank müssen ordnungsgemäß für die Unterstützung von Enklaven und Nachweisen konfiguriert werden. Weitere Informationen finden Sie unter Einrichten von Secure Enclaves und Nachweisen.

  • Wenn Sie eine Verbindung mit Ihrer Datenbank über eine Anwendung oder ein Tool (z. B. SQL Server Management Studio) herstellen, stellen Sie folgendes sicher:

    • Verwenden Sie eine Clienttreiberversion oder eine Toolversion, die Always Encrypted mit sicheren Enklaven unterstützt.

      • Weitere Informationen zu Clienttreibern, die Always Encrypted mit sicheren Enklaven unterstützen, finden Sie unter, Always Encrypted mit sicheren Enklaven verwenden.
      • In den folgenden Abschnitten finden Sie Informationen zu Tools, die Always Encrypted mit sicheren Enklaven unterstützen.
    • Aktivieren und Deaktivieren von Always Encrypted für eine Datenbankverbindung

    • Geben Sie ein Nachweisprotokoll an, das bestimmt, ob Ihre Anwendung oder Ihr Tool die Enklave vor der Übermittlung von Enklavenabfragen nachweisen muss und welcher Nachweisdienst verwendet werden soll. Die meisten Tools und Treiber unterstützen die folgenden Nachweisprotokolle:

      • Microsoft Azure Attestation – erzwingt den Nachweis mithilfe von Microsoft Azure Attestation.
      • Host Guardian Service – erzwingt den Nachweis mithilfe des Host Guardian Service.
      • Keine – ermöglicht die Verwendung von Enklaven ohne Nachweis.

      Die folgende Tabelle gibt Nachweisprotokolle an, die für bestimmte SQL-Produkte und Enklaventechnologien gültig sind:

      Produkt Enklave-Technologie Unterstützte Nachweisprotokolle
      SQL Server 2019 (15.x) und höher VBS-Enclaves Host-Überwachungsdienst, Keine
      Azure SQL-Datenbank SGX-Enklaven (DC-Reihendatenbanken) Microsoft Azure Attestation
      Azure SQL-Datenbank VBS-Enclaves Keine
  • Geben Sie eine Nachweis-URL an, die für Ihre Umgebung gültig ist, wenn Sie den Nachweis verwenden.

Voraussetzungen für das Ausführen von T-SQL-Anweisungen mithilfe von Enclaves in SSMS

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

Achten Sie darauf, Ihre Anweisungen über ein Abfragefenster auszuführen, das eine Verbindung mit Always Encrypted und korrekt konfigurierten Nachweisparametern verwendet.

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

  2. Wählen Sie Optionen >> aus, und wählen Sie die Registerkarte Eigenschaften für Verbindungen aus. Geben Sie ihren Datenbanknamen an.

  3. Wählen Sie die Registerkarte Always Encrypted aus.

  4. Wählen Sie Always Encrypted aktivieren (Spaltenverschlüsselung)

  5. Wählen Sie Secure Enclaves aktivieren aus.

  6. Protokoll wie folgt festlegen:

    1. Host-Überwachungsdienst wenn Sie SQL Server verwenden.
    2. Microsoft Azure Attestation, wenn Sie Azure SQL-Datenbank mit Intel SGX-Enklaven verwenden.
    3. Keine, wenn Sie Azure SQL-Datenbank mit VBS-Enklaven verwenden.
  7. Geben Sie ihre Enklavennachweis-URL an. Gilt nicht, wenn das Protokoll auf None festgelegt ist. Zum Beispiel: https://hgs.bastion.local/Attestation oder https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Herstellen einer Verbindung mit dem Server mit einem Nachweis unter Verwendung von SSMS

  8. Wählen Sie Verbinden.

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

Weitere Informationen finden Sie unter Aktivieren und Deaktivieren von Always Encrypted für eine Datenbankverbindung.

Voraussetzungen für das Ausführen von T-SQL-Anweisungen mithilfe von Enclaves in Azure Data Studio

Es wird empfohlen, mindestens Version 1.23 zu verwenden. Achten Sie darauf, Ihre Anweisungen über ein Abfragefenster auszuführen, das eine Verbindung mit Always Encrypted verwendet, für die sowohl das richtige Nachweisprotokoll als auch die richtige Nachweis-URL konfiguriert ist.

  1. Wählen Sie im Dialogfeld Verbindung ändern die Option Erweitert….

  2. Um Always Encrypted für die Verbindung zu aktivieren, legen Sie das Feld Always Encrypted auf Aktiviert fest.

  3. Um sichere Enklaven zu aktivieren, legen Sie das Feld Sichere Enklaven auf Aktiviert fest.

  4. Geben Sie das Nachweisprotokoll und die Nachweis-URL an.

    • Wenn Sie SQL Server verwenden, legen Sie für Attestation Protocol (Nachweisprotokoll) Host-Überwachungsdienst fest, und geben Sie die Nachweis-URL für den Host-Überwachungsdienst in das Feld Enclave Attestation URL (Nachweis-URL für die Enclave) ein.
    • Wenn Sie eine DC Serien Datenbank verwenden, legen Sie in Attestation Protocol auf Azure Attestation fest, und geben Sie die Nachweis-URL für Ihre Richtlinie in Microsoft Azure Attestation in das Feld Enclave Attestation URL ein.
    • Wenn Sie eine Datenbank mit aktivierten VBS-Enklaven in Azure SQL-Datenbank verwenden, legen Sie das Nachweisprotokoll auf Keine fest.

    Herstellen einer Verbindung mit dem Server mit einem Nachweis unter Verwendung von Azure Data Studio

  5. Wählen Sie OK, um Erweiterte Eigenschaften zu schließen.

Weitere Informationen finden Sie unter Aktivieren und Deaktivieren von Always Encrypted für eine Datenbankverbindung.

Wenn Sie parametrisierte DML-Abfragen ausführen möchten, müssen Sie ebenfalls die Parametrisierung für Always Encrypted aktivieren.

Beispiele

Dieser Abschnitt enthält Beispiele für DML-Abfragen mit Enclaves.

In den Beispielen wird das folgende Schema verwendet:

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Jobs](
 [JobID] [int] IDENTITY(1,1) PRIMARY KEY,
 [JobTitle] [nvarchar](50) NOT NULL,
 [MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO

CREATE TABLE [HR].[Employees](
 [EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
 [SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [FirstName] [nvarchar](50) NOT NULL,
 [LastName] [nvarchar](50) NOT NULL,
 [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [JobID] [int] NULL,
 FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO

Die folgende Abfrage führt eine Suche nach genauen Einstellungen für die verschlüsselte SSN-Zeichenfolgenspalte durch.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

Die folgende Abfrage führt einen Musterabgleich für die verschlüsselte SSN-Zeichenfolgenspalte durch. Hierbei wird nach Mitarbeitern gesucht, deren Sozialversicherungsnummern mit den angegebenen Ziffern enden.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

Bereichsvergleich

Die folgende Abfrage führt einen Bereichsvergleich für die verschlüsselte Salary-Spalte aus und sucht Mitarbeitende, deren Gehälter im angegebenen Bereich liegen.

DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO

Joins

Die folgende Abfrage führt einen Join zwischen Employees und Jobs-Tabellen mithilfe der verschlüsselten Salary-Spalte aus. Die Abfrage ruft Mitarbeiter ab, deren Gehälter außerhalb eines bestimmten Bereichs für seinen Job liegt.

SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO

Sortierung

Mit der folgenden Abfrage werden die Mitarbeiterdatensätze basierend auf der verschlüsselten Salary-Spalte sortiert, sodass 10 Mitarbeiter mit den höchsten Gehältern abgerufen werden.

Hinweis

Das Sortieren verschlüsselter Spalten wird in SQL Server 2022(16 x) und Azure SQL-Datenbank unterstützt, aber nicht in SQL Server 2019 (15.x).

SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO

Nächste Schritte

Siehe auch