Ausführen von Transact-SQL-Anweisungen mit Secure EnclavesRun Transact-SQL statements using secure enclaves
Anwendungsbereich:Applies to: SQL Server 2019 (15.x)SQL Server 2019 (15.x)
SQL Server 2019 (15.x)SQL Server 2019 (15.x)
Azure SQL-DatenbankAzure SQL Database
Azure SQL-DatenbankAzure SQL Database
SQL Server 2019 (15.x)SQL Server 2019 (15.x)
SQL Server 2019 (15.x)SQL Server 2019 (15.x)
Azure SQL-DatenbankAzure SQL Database
Azure SQL-DatenbankAzure SQL Database
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.Always Encrypted with secure enclaves allows some Transact-SQL (T-SQL) statements to perform confidential computations on encrypted database columns in a server-side secure enclave.
Anweisungen mit Secure EnclavesStatements using secure enclaves
Die folgenden Arten von T-SQL-Anweisungen verwenden Secure Enclaves.The following types of T-SQL statement utilize secure enclaves.
DDL-Anweisungen mit Secure EnclavesDDL statements using secure enclaves
Für die folgenden Arten von DDL-Anweisungen werden Secure Enclaves benötigt.The following types of Data Definition Language (DDL) statements require secure enclaves.
- ALTER TABLE column_definition (Transact-SQL)-Anweisungen, die direkte kryptografische Vorgänge mithilfe von Enclave-fähigen Schlüsseln auslösen.ALTER TABLE column_definition (Transact-SQL) statements that trigger in-place cryptographic operations using enclave-enabled keys. Weitere Informationen hierzu finden Sie unter Konfigurieren einer direkten Spaltenverschlüsselung mithilfe von Always Encrypted mit Secure Enclaves.For more information, see Configure column encryption in-place using Always Encrypted with 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.CREATE INDEX (Transact-SQL) and ALTER INDEX (Transact-SQL) statements that create or alter indexes on enclave-enabled columns using randomized encryption. Weitere Informationen finden Sie unter Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure Enclaves.For more information, see Create and use indexes on columns using Always Encrypted with secure enclaves.
DML-Anweisungen mit Secure EnclavesDML statements using 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:The following Data Manipulation Language (DML) statements or queries against enclave-enabled columns using randomized encryption require secure enclaves:
- Abfragen, die mindestens einen der folgenden Transact-SQL-Operatoren verwenden, die in Secure Enclaves unterstützt werden:Queries that use one or more of the following Transact-SQL operators supported inside secure enclaves:
- Comparison Operators (Vergleichsoperatoren)Comparison Operators
- BETWEEN (Transact-SQL)BETWEEN (Transact-SQL)
- IN (Transact-SQL)IN (Transact-SQL)
- LIKE (Transact-SQL)LIKE (Transact-SQL)
- DISTINCTDISTINCT
- JoinsSQL Server 2019 (15.x)SQL Server 2019 (15.x) unterstützt nur Joins geschachtelter Schleifen.Joins - SQL Server 2019 (15.x)SQL Server 2019 (15.x) supports only nested loop joins. Azure SQL-DatenbankAzure SQL Database unterstützt Joins geschachtelter Schleifen, Hashjoins und Zusammenführungsjoins.supports nested loop, hash, and merge joins
- SELECT - ORDER BY-Klausel (Transact-SQL):SELECT - ORDER BY Clause (Transact-SQL). Wird in Azure SQL-DatenbankAzure SQL Database unterstützt.Supported in Azure SQL-DatenbankAzure SQL Database. Nicht unterstützt in SQL Server 2019 (15.x)SQL Server 2019 (15.x)Not supported in SQL Server 2019 (15.x)SQL Server 2019 (15.x)
- SELECT - GROUP BY-Klausel (Transact-SQL):SELECT - GROUP BY Clause (Transact-SQL). Wird in Azure SQL-DatenbankAzure SQL Database unterstützt.Supported in Azure SQL-DatenbankAzure SQL Database. Nicht unterstützt in SQL Server 2019 (15.x)SQL Server 2019 (15.x)Not supported in SQL Server 2019 (15.x)SQL Server 2019 (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.Queries that insert, update, or delete rows, which in turn triggers inserting and/or removing an index key to/from an index on an enclave-enabled column. Weitere Informationen finden Sie unter Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure Enclaves.For more information, see Create and use indexes on columns using Always Encrypted with 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.Operations on indexes and confidential DML queries using enclaves are only supported on enclave-enabled columns that use randomized encryption. Die deterministische Verschlüsselung wird nicht unterstützt.Deterministic encryption is not supported.
In SQL Server 2019 (15.x)SQL Server 2019 (15.x) muss für vertrauliche Abfragen, die Enclaves in Zeichenfolgenspalten (char
, nchar
) verwenden, eine binary2-Sortierung (BIN2) für die Spalten konfiguriert werden.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), confidential queries using enclaves on character string columns (char
, nchar
) require a binary2 sort order (BIN2) collation configured for the column. In Azure SQL-DatenbankAzure SQL Database müssen BIN2- oder UTF-8-Sortierungen verwendet werden.In Azure SQL-DatenbankAzure SQL Database, using BIN2 or UTF-8 collations is required.
DBCC-Befehle mit Secure EnclavesDBCC commands using 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.DBCC (Transact-SQL) administrative commands that involve checking the integrity of indexes may also require secure enclaves, if the database contains indexes on enclave-enabled columns using randomized encryption. Beispielsweise DBCC CHECKDB (Transact-SQL) und DBCC CHECKTABLE (Transact-SQL).For example, DBCC CHECKDB (Transact-SQL) and DBCC CHECKTABLE (Transact-SQL).
Voraussetzungen für das Ausführen von Anweisungen mit Secure EnclavesPrerequisites for running statements using secure enclaves
Ihre Umgebung muss die folgenden Anforderungen erfüllen, damit das Ausführen von Anweisungen unterstützt wird, die eine Secure Enclave verwenden.Your environment needs to meet the following requirements to support executing statements that use a secure enclave.
Die SQL ServerSQL Server-Instanz oder die Datenbank und der Server in Azure SQL-DatenbankAzure SQL Database müssen ordnungsgemäß für die Unterstützung von Enclaves und Nachweisen konfiguriert werden.Your SQL ServerSQL Server instance or your database and server in Azure SQL-DatenbankAzure SQL Database must be correctly configured to support enclaves and attestation. Weitere Informationen finden Sie unter Einrichten von Secure Enclaves und Nachweisen.For more information, see Set up the secure enclave and attestation.
Sie benötigen eine Nachweis-URL aus Ihrer Umgebung vom Dienstadministrator, der für Nachweise zuständig ist.You need to obtain an attestation URL from your environment from your attestation service administrator.
- Wenn Sie SQL ServerSQL Server und den Host-Überwachungsdienst (Host Guardian Service, HGS) verwenden, finden Sie weitere Informationen unter Ermitteln und Teilen der Nachweis-URL für HGS.If you're using SQL ServerSQL Server and Host Guardian Service (HGS), see Determine and share the HGS attestation URL.
- Wenn Sie Azure SQL-DatenbankAzure SQL Database und Microsoft Azure Attestation verwenden, finden Sie weitere Informationen unter Ermitteln der Nachweis-URL für Ihre Nachweisrichtlinie.If you're using Azure SQL-DatenbankAzure SQL Database and Microsoft Azure Attestation, see Determine the attestation URL for your attestation policy.
Wenn Sie über Ihre Anwendung eine Verbindung mit der Datenbank herstellen, muss diese einen Clienttreiber verwenden, der Always Encrypted mit Secure Enclaves unterstützt.If you're connecting to your database using your application, it must use a client driver that supports Always Encrypted with secure enclaves. Die Anwendung muss eine Verbindung mit der Datenbank herstellen. Hierbei muss Always Encrypted für die Datenbankverbindung aktiviert, und das Nachweisprotokoll und die Nachweis-URL müssen ordnungsgemäß konfiguriert sein.The application must connect to the database with Always Encrypted enabled for the database connection and the attestation protocol and the attestation URL properly configured. Ausführliche Informationen finden Sie unter Entwickeln von Anwendungen mithilfe von Always Encrypted mit Secure Enclaves.For detailed information, see Develop applications using Always Encrypted with secure enclaves.
Wenn Sie SQL Server Management Studio (SSMS) oder Azure SQL Data Studio verwenden, müssen Sie Always Encrypted aktivieren und das Nachweisprotokoll und die Nachweis-URL konfigurieren, wenn Sie eine Verbindung mit der Datenbank herstellen.If you're using SQL Server Management Studio (SSMS) or Azure SQL Data Studio, you need to enable Always Encrypted and configure the attestation protocol and the attestation URL when connecting to your database. Weitere Informationen hierzu finden Sie in den nachfolgenden Abschnitten.See the following sections for details.
Hinweis
Wenn Sie zwischengespeicherte Spaltenverschlüsselungsschlüssel verwenden, müssen Sie für die folgenden Vorgänge weder mithilfe von Always Encrypted eine Verbindung mit der Datenbank herstellen noch Nachweise konfigurieren: DDL-Abfragen, die Indizes erstellen oder ändern, DML-Abfragen, die Indizes aktualisieren, und DBCC-Befehle, die die Indexintegrität überprüfen.Connecting to the database with Always Encrypted and attestation configured is not required for the following operations if you are using cached column encryption keys: DDL queries that create or alter indexes, DML queries that update indexes, and DBCC commands that check index integrity. Weitere Informationen finden Sie unter Aufrufen der Indizierungsvorgänge mit zwischengespeicherten Spaltenverschlüsselungsschlüsseln.For more information, see Invoke indexing operations using cached column encryption keys.
Voraussetzungen für das Ausführen von T-SQL-Anweisungen mithilfe von Enclaves in SSMSPrerequisites for running T-SQL statements using enclaves in SSMS
Mindestversion für SQL Server Management Studio:Minimum version requirements for SQL Server Management Studio:
- SSMS 18.3 bei Verwendung von SQL ServerSQL ServerSSMS 18.3 when using SQL ServerSQL Server.
- SSMS 18.8 bei Verwendung von Azure SQL-DatenbankAzure SQL DatabaseSSMS 18.8 when using Azure SQL-DatenbankAzure SQL Database.
Achten Sie darauf, Ihre Anweisungen über ein Abfragefenster auszuführen, das eine Verbindung mit Always Encrypted verwendet, für die die richtige Nachweis-URL konfiguriert ist.Make sure you run your statements from a query window that uses a connection that has Always Encrypted and the correct attestation URL configured.
Geben Sie im Dialogfeld Mit Server verbinden Ihren Servernamen, eine Authentifizierungsmethode und Ihre Anmeldeinformationen an.In the Connect to Server dialog, specify your server name, select an authentication method, and specify your credentials.
Klicken Sie auf Optionen >> , und wählen Sie die Registerkarte Always Encrypted aus.Click Options >> and select the Always Encrypted tab.
Aktivieren Sie das Kontrollkästchen Always Encrypted (Spaltenverschlüsselung) aktivieren, und geben Sie die Nachweis-URL für die Enclave an.Select the Enable Always Encrypted (column encryption) checkbox and specify your enclave attestation URL. Zum Beispiel:
https://hgs.bastion.local/Attestation
oderhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.For example,https://hgs.bastion.local/Attestation
orhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Klicken Sie auf Verbinden.Select Connect.
Wenn Sie aufgefordert werden, die Parametrisierung für Always Encrypted-Abfragen zu aktivieren, klicken Sie auf Aktivieren, wenn Sie parametrisierte DML-Abfragen ausführen möchten.If you're prompted to enable Parameterization for Always Encrypted queries, select Enable if you plan to run parameterized DML queries. Weitere Informationen finden Sie unter Parametrisierung für Always Encrypted.For more information, see Parameterization for Always Encrypted.
Weitere Informationen finden Sie unter Aktivieren und Deaktivieren von Always Encrypted für eine Datenbankverbindung.For additional information, see Enabling and disabling Always Encrypted for a database connection.
Voraussetzungen für das Ausführen von T-SQL-Anweisungen mithilfe von Enclaves in Azure Data StudioPrerequisites for running T-SQL statements using enclaves in Azure Data Studio
Es wird empfohlen, mindestens Version 1.23 zu verwenden.The minimum recommended version 1.23 or higher is recommended.
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.Make sure you run your statements from a query window that uses a connection that has Always Encrypted enabled and both the correct attestation protocol and the attestation URL configured.
Klicken Sie im Dialogfeld Verbindung auf Erweitert... .In the Connection dialog, click Advanced....
Um Always Encrypted für die Verbindung zu aktivieren, legen Sie das Feld Always Encrypted auf Aktiviert fest.To enable Always Encrypted for the connection, set the Always Encrypted field to Enabled.
Geben Sie das Nachweisprotokoll und die Nachweis-URL an.Specify the attestation protocol and the attestation URL.
- Wenn Sie SQL Server 2019 (15.x)SQL Server 2019 (15.x) 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.If you're using SQL Server 2019 (15.x)SQL Server 2019 (15.x) set Attestation Protocol to Host Guardian Service and enter your Host Guardian Service attestation URL in the Enclave Attestation URL field.
- Wenn Sie Azure SQL-DatenbankAzure SQL Database verwenden, legen Sie Attestation Protocol (Nachweisprotokoll) auf Azure Attestation fest, und geben Sie die Nachweis-URL für Ihre Richtlinie in Microsoft Azure Attestation in das Feld Enclave Attestation URL (Nachweis-URL für die Enclave) ein.If you're using Azure SQL-DatenbankAzure SQL Database, set Attestation Protocol to Azure Attestation and enter the attestation URL referencing your policy in Microsoft Azure Attestation in the Enclave Attestation URL field.
Klicken Sie auf OK, um Erweiterte Eigenschaften zu schließen.Click OK to close Advanced Properties.
Weitere Informationen finden Sie unter Aktivieren und Deaktivieren von Always Encrypted für eine Datenbankverbindung.For additional information, see Enabling and disabling Always Encrypted for a database connection.
Wenn Sie parametrisierte DML-Abfragen ausführen möchten, müssen Sie ebenfalls die Parametrisierung für Always Encrypted aktivieren.If you plan to run parameterized DML queries, you also need to enable Parameterization for Always Encrypted.
BeispieleExamples
Dieser Abschnitt enthält Beispiele für DML-Abfragen mit Enclaves.This section includes examples of DML queries using enclaves.
In den Beispielen wird das folgende Schema verwendet:The examples use the below schema.
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 ÜbereinstimmungenExact match search
Die folgende Abfrage führt eine Suche nach genauen Einstellungen für die verschlüsselte SSN
-Zeichenfolgenspalte durch.The below query performs an exact match search on the encrypted SSN
string column.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Abgleichen von MusternPattern matching search
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.The below query performs a pattern matching search on the encrypted SSN
string column, searching for employees with the specified last for digits of a social security number.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
BereichsvergleichRange comparison
Die folgende Abfrage führt einen Bereichsvergleich für die verschlüsselte Salary
-Spalte durch und sucht Mitarbeiter, deren Gehälter im angegebenen Bereich liegen.The below query performs a range comparison on the encrypted Salary
column, searching for employees with salaries within the specified range.
DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO
JoinsJoins
Die folgende Abfrage führt einen Join zwischen Employees
und Jobs
-Tabellen mithilfe der verschlüsselten Salary
-Spalte aus.The below query performs a join between Employees
and Jobs
tables using the encrypted Salary
column. Die Abfrage ruft Mitarbeiter ab, deren Gehälter außerhalb eines bestimmten Bereichs für seinen Job liegt.The query retrieves employees with salaries outside of a salary range for employee's job.
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
SortierungSorting
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.The below query sorts employee records based on the encrypted Salary
column, retrieving 10 employees with the highest salaries.
Hinweis
Das Sortieren verschlüsselter Spalten wird in Azure SQL-DatenbankAzure SQL Database, aber nicht in SQL Server 2019 (15.x)SQL Server 2019 (15.x)unterstützt.Sorting encrypted columns is supported in Azure SQL-DatenbankAzure SQL Database, but not in SQL Server 2019 (15.x)SQL Server 2019 (15.x).
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO
Nächste SchritteNext Steps
Weitere InformationenSee also
- Behandeln von häufig auftretenden Problemen bei Always Encrypted mit Secure EnclavesTroubleshoot common issues for Always Encrypted with secure enclaves
- Tutorial: Erste Schritte mit Always Encrypted mit Secure Enclaves in SQL ServerTutorial: Getting started with Always Encrypted with secure enclaves in SQL Server
- Tutorial: Erste Schritte mit Always Encrypted mit Secure Enclaves in Azure SQL-DatenbankTutorial: Getting started with Always Encrypted with secure enclaves in Azure SQL Database
- Konfigurieren einer direkten Spaltenverschlüsselung mithilfe von Always Encrypted mit Secure EnclavesConfigure column encryption in-place using Always Encrypted with secure enclaves
- Erstellen und Verwenden von Indizes in Spalten mithilfe von Always Encrypted mit Secure EnclavesCreate and use indexes on columns using Always Encrypted with secure enclaves