Ausführen von Transact-SQL-Anweisungen mit Secure EnclavesRun Transact-SQL statements using secure enclaves

Anwendungsbereich:Applies to: JaSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) (nur Windows) JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure SQL-DatenbankAzure SQL DatabaseAnwendungsbereich:Applies to: JaSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only JaAzure SQL-DatenbankAzure SQL DatabaseYesAzure 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.

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:

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

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

  2. Klicken Sie auf Optionen >> , und wählen Sie die Registerkarte Always Encrypted aus.Click Options >> and select the Always Encrypted tab.

  3. 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 oder https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.For example, https://hgs.bastion.local/Attestation or https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

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

  4. Klicken Sie auf Verbinden.Select Connect.

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

  1. Klicken Sie im Dialogfeld Verbindung auf Erweitert... .In the Connection dialog, click Advanced....

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

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

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

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

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

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