Share via


Transact-SQL-instructies uitvoeren met behulp van beveiligde enclaves

Van toepassing op: SQL Server 2019 (15.x) en latere versies in Windows Azure SQL Database

Always Encrypted met de functie van beveiligde enclaves stelt sommige Transact-SQL (T-SQL)-instructies in staat om vertrouwelijke berekeningen uit te voeren op versleutelde databasekolommen in een beveiligde enclave aan de serverkant.

Verklaringen met behulp van beveiligde enclaves

De volgende typen T-SQL-instructie maken gebruik van beveiligde enclaves.

DDL-instructies met beveiligde enclaves

Voor de volgende typen DDL--instructies (Data Definition Language) zijn beveiligde enclaves vereist.

DML-instructies met behulp van beveiligde enclaves

De volgende DML (Data Manipulation Language) instructies of queries tegen enclave-ingeschakelde kolommen die gebruikmaken van gerandomiseerde versleuteling vereisen beveiligde enclaves.

  • Query's die gebruikmaken van een of meer van de volgende Transact-SQL operators die worden ondersteund in beveiligde enclaves:
    • vergelijkingsoperators
    • BETWEEN
    • IN
    • LIKE
    • DISTINCT
    • Joins - SQL Server 2019 (15.x) ondersteunt alleen geneste luskoppelingen. SQL Server 2022 (16.x) en Azure SQL Database ondersteunt geneste lus, hash- en samenvoegingskoppelingen
    • SELECT - ORDER BY clase. Ondersteund in SQL Server 2022 (16.x) en Azure SQL Database. Niet ondersteund in SQL Server 2019 (15.x)
    • SELECT - GROUP BY clase. Ondersteund in SQL Server 2022 (16.x) en Azure SQL Database. Niet ondersteund in SQL Server 2019 (15.x)
  • Query's die rijen invoegen, bijwerken of verwijderen, waardoor op zijn beurt het invoegen en/of verwijderen van een indexsleutel naar/van een index in een enclavekolom wordt geactiveerd. Zie Indexen maken en gebruiken voor kolommen met Always Encrypted met beveiligde enclaves voor meer informatie

Notitie

Bewerkingen voor indexen en vertrouwelijke DML-query's met behulp van enclaves worden alleen ondersteund in enclavekolommen die gebruikmaken van gerandomiseerde versleuteling. Deterministische versleuteling wordt niet ondersteund.

Het compatibiliteitsniveau van de database moet worden ingesteld op SQL Server 2022 (160) of hoger.

In Azure SQL Database en in SQL Server 2022 (16.x) vereisen vertrouwelijke query's met enclaves op een tekenreekskolom (char, nchar) dat de kolom een binaire sortering (_BIN2) of een UTF-8-sorteringgebruikt. In SQL Server 2019 (15.x) is een a_BIN2-collatie vereist.

DBCC-opdrachten met beveiligde enclaves

DBCC-beheeropdrachten die betrekking hebben op het controleren van de integriteit van indexen, vereisen mogelijk ook beveiligde enclaves als de database indexen bevat op enclavekolommen met behulp van gerandomiseerde versleuteling. BIJVOORBEELD DBCC CHECKDB en DBCC CHECKTABLE.

Vereisten voor het uitvoeren van SQL-queries met behulp van beveiligde enclaves

Uw omgeving moet voldoen aan de volgende vereisten ter ondersteuning van het uitvoeren van instructies die gebruikmaken van een beveiligde enclave.

  • Uw SQL Server-exemplaar of uw databaseserver in Azure SQL Database moet correct zijn geconfigureerd om enclaves en attestation te ondersteunen, indien van toepassing/vereist. Voor meer informatie, zie De beveiligde enclave en attestatie instellen.

  • Wanneer u verbinding maakt met uw database vanuit een toepassing of een hulpprogramma (zoals SQL Server Management Studio), moet u het volgende doen:

    • Gebruik een versie van het clientstuurprogramma of een hulpprogrammaversie die Always Encrypted ondersteunt met beveiligde enclaves.

    • Schakel Always Encrypted in voor de databaseverbinding.

    • Geef een attestation-protocol op, waarmee wordt bepaald of uw toepassing of hulpprogramma de enclave moet attesteren voordat u enclavequery's verzendt en welke attestation-service deze moet gebruiken. De meeste hulpprogramma's en stuurprogramma's ondersteunen de volgende attestation-protocollen:

      • Microsoft Azure Attestation: dwingt attestation af met behulp van Microsoft Azure Attestation.
      • Host Guardian-service: dwingt attestation af met behulp van de Host Guardian-service.
      • Geen: staat het gebruik van enclaves zonder attestatie toe.

      In de onderstaande tabel worden attestation-protocollen opgegeven die geldig zijn voor bepaalde SQL-producten en enclavetechnologieën:

      Product Enclave-technologie Ondersteunde attestation-protocollen
      SQL Server 2019 (15.x) en hoger VBS-enclaves Host Guardian-service, geen
      Azure SQL Database SGX-enclaves (in DC-seriedatabases) Microsoft Azure Attestatie
      Azure SQL Database VBS-enclaves Geen
  • Geef een attestation-URL op die geldig is voor uw omgeving als u attestation gebruikt.

Vereisten voor het uitvoeren van T-SQL-instructies met behulp van enclaves in SSMS

Installeer de nieuwste versie van SQL Server Management Studio (SSMS).

Zorg ervoor dat u uw instructies uitvoert vanuit een queryvenster dat gebruikmaakt van een verbinding met always encrypted- en attestation-parameters die correct zijn geconfigureerd.

  1. Geef in het dialoogvenster Verbinding maken met server de servernaam op, selecteer een verificatiemethode en geef uw referenties op.

  2. Selecteer opties >> en selecteer het tabblad verbindingseigenschappen. Geef de databasenaam op.

  3. Selecteer het tabblad Always Encrypted.

  4. Selecteer Always Encrypted (kolomversleuteling) inschakelen.

  5. Selecteer Beveiligde enclaves inschakelen.

  6. Stel Protocol in op:

    1. Host Guardian-service als u SQL Server gebruikt.
    2. Microsoft Azure Attestation als u Azure SQL Database gebruikt met Intel SGX-enclaves.
    3. Geen als u Azure SQL Database met VBS-enclaves gebruikt.
  7. Geef uw enclave-attestation-URL op. Niet van toepassing wanneer het protocol is ingesteld op Geen. Bijvoorbeeld https://hgs.bastion.local/Attestation of https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Schermopname van Verbinding maken met server met attestation met behulp van SSMS.

  8. Selecteer Verbind.

  9. Als u wordt gevraagd om de parameterisatie in te schakelen voor Always Encrypted-query's, selecteert u inschakelen.

Zie Always Encrypted in- en uitschakelen voor een databaseverbindingvoor meer informatie.

Voorbeelden

Deze sectie bevat voorbeelden van DML-query's met behulp van enclaves.

In de voorbeelden wordt het onderstaande schema gebruikt.

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)
);

De onderstaande query voert een exacte overeenkomstzoekopdracht uit op de versleutelde SSN tekenreeks-kolom.

DECLARE @SSN AS CHAR (11) = '795-73-9838';

SELECT *
FROM [HR].[Employees]
WHERE [SSN] = @SSN;

De onderstaande query voert een patroonmatchzoekopdracht uit op de versleutelde stringkolom SSN, waarbij wordt gezocht naar werknemers met de opgegeven laatste vier cijfers van een burgerservicenummer.

DECLARE @SSN AS CHAR (11) = '795-73-9838';

SELECT *
FROM [HR].[Employees]
WHERE [SSN] = @SSN;

Bereikvergelijking

Met de onderstaande query wordt een bereikvergelijking uitgevoerd op de versleutelde Salary kolom, waarbij wordt gezocht naar werknemers met salarissen binnen het opgegeven bereik.

DECLARE @MinSalary AS MONEY = 40000;
DECLARE @MaxSalary AS MONEY = 45000;

SELECT *
FROM [HR].[Employees]
WHERE [Salary] > @MinSalary
      AND [Salary] < @MaxSalary;

Verbinden

De onderstaande query voert een join uit tussen Employees en Jobs tabellen met behulp van de versleutelde Salary kolom. De query haalt werknemers op met salarissen buiten een salarisbereik voor de functie van een werknemer.

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

Sorteren

Met de onderstaande query worden werknemersrecords gesorteerd op basis van de versleutelde kolom Salary, waarbij 10 werknemers met de hoogste salarissen worden opgehaald.

Notitie

Versleutelde kolommen sorteren wordt ondersteund in SQL Server 2022 (16.x) en Azure SQL Database, maar niet in SQL Server 2019 (15.x).

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

Volgende stap