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.
- ALTER TABLE column_definition (Transact-SQL)-Anweisungen, die direkte kryptografische Vorgänge mithilfe von Enclave-fähigen Schlüsseln auslösen. Weitere Informationen hierzu finden Sie unter Konfigurieren einer direkten Spaltenverschlüsselung mithilfe von Always Encrypted mit Secure Enclaves.
- CREATE INDEX (Transact-SQL)- und ALTER INDEX (Transact-SQL)-Anweisungen, die Indizes in Enclave-fähigen Spalten mithilfe von zufälliger Verschlüsselung erstellen oder ändern. Weitere Informationen finden Sie unter Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure Enclaves.
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:
- Abfragen, die mindestens einen der folgenden Transact-SQL-Operatoren verwenden, die in Secure Enclaves unterstützt werden:
- Comparison Operators (Vergleichsoperatoren)
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- Joins: SQL Server 2019 (15.x) unterstützt nur Joins geschachtelter Schleifen. SQL Server 2022 (16 x) und Azure SQL-Datenbank unterstützen Joins geschachtelter Schleifen, Hash-Joins und Zusammenführungs-Joins.
- SELECT - ORDER BY-Klausel (Transact-SQL): Unterstützt in SQL Server 2022 (16.x) und Azure SQL-Datenbank. In SQL Server 2019 nicht unterstützt (15.x)
- SELECT - GROUP BY-Klausel (Transact-SQL): Unterstützt in SQL Server 2022 (16.x) und Azure SQL-Datenbank. In SQL Server 2019 nicht unterstützt (15.x)
- Abfragen, mit denen Zeilen eingefügt, aktualisiert oder gelöscht werden, die wiederum das Einfügen und/oder Entfernen eines Indexschlüssels in einen/aus einem Index für eine Enclave-fähige Spalte auslösen. Weitere Informationen finden Sie unter Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure Enclaves.
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.
- Wenn Sie SQL Server und den Host-Überwachungsdienst verwenden, finden Sie weitere Informationen unter Ermitteln und Freigeben der HGS-Nachweis-URL.
- Wenn Sie Azure SQL-Datenbank mit Intel SGX Enklaven und Microsoft Azure Attestation verwenden, finden Sie weitere Informationen unter Ermitteln der Nachweis-URL für Ihre Nachweisrichtlinie.
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.
Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.
Wählen Sie Optionen >> aus, und wählen Sie die Registerkarte Eigenschaften für Verbindungen aus. Geben Sie ihren Datenbanknamen an.
Wählen Sie die Registerkarte Always Encrypted aus.
Wählen Sie Always Encrypted aktivieren (Spaltenverschlüsselung)
Wählen Sie Secure Enclaves aktivieren aus.
Protokoll wie folgt festlegen:
- Host-Überwachungsdienst wenn Sie SQL Server verwenden.
- Microsoft Azure Attestation, wenn Sie Azure SQL-Datenbank mit Intel SGX-Enklaven verwenden.
- Keine, wenn Sie Azure SQL-Datenbank mit VBS-Enklaven verwenden.
Geben Sie ihre Enklavennachweis-URL an. Gilt nicht, wenn das Protokoll auf None festgelegt ist. Zum Beispiel:
https://hgs.bastion.local/Attestation
oderhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Wählen Sie Verbinden.
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.
Wählen Sie im Dialogfeld Verbindung ändern die Option Erweitert….
Um Always Encrypted für die Verbindung zu aktivieren, legen Sie das Feld Always Encrypted auf Aktiviert fest.
Um sichere Enklaven zu aktivieren, legen Sie das Feld Sichere Enklaven auf Aktiviert fest.
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.
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
Suchen nach genauen Übereinstimmungen
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
Abgleichen von Mustern
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
Weitere Informationen
- Behandeln von häufig auftretenden Problemen bei Always Encrypted mit Secure Enclaves
- Erste Schritte mit Always Encrypted mit Secure Enclaves
- Konfigurieren einer direkten Spaltenverschlüsselung mithilfe von Always Encrypted mit Secure Enclaves
- Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure Enclaves