Kör Transact-SQL-instruktioner i säkra enklaver
gäller för: SQL Server 2019 (15.x) och senare – Windows endast
Azure SQL Database
Always Encrypted med säkra enklaver tillåter vissa Transact-SQL (T-SQL)-uttryck att göra konfidentiella beräkningar på krypterade databaskolumner på serversidan i en säker enklav.
Uttalanden som använder säkra enklaver
Följande typer av T-SQL-uttryck använder säkra enklaver.
DDL-instruktioner med hjälp av säkra enklaver
Följande typer av DDL-instruktioner (Data Definition Language) kräver säkra enklaver.
- ALTER TABLE column_definition (Transact-SQL)-instruktioner som utlöser kryptografiska åtgärder på plats med enklaveraktiverade nycklar. För mer information, se Konfigurera kolumnkryptering på plats med Always Encrypted med säkra enklaver.
- CREATE INDEX (Transact-SQL) och ALTER INDEX (Transact-SQL) -instruktioner som skapar eller ändrar index på enklaveraktiverade kolumner med hjälp av randomiserad kryptering. Mer information finns i Skapa och använda index för kolumner med Always Encrypted med säkra enklaver.
DML-instruktioner med säkra enklaver
Följande datamanipuleringsspråk (DML) instruktioner eller frågor mot enklavaktiverade kolumner med slumpmässig kryptering kräver säkra enklaver:
- Sökfrågor som använder en eller flera av följande Transact-SQL operatorer som stöds inom säkra enklaver:
- Jämförelseoperatorer
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- Distinkt
- Kopplingar – SQL Server 2019 (15.x) stöder endast kapslade loopkopplingar. SQL Server 2022 (16.x) och Azure SQL Database stöder kapslade loopar, hash- och sammanslagningskopplingar
- SELECT – ORDER BY Clause (Transact-SQL). Stöds i SQL Server 2022 (16.x) och Azure SQL Database. Stöds inte i SQL Server 2019 (15.x)
- SELECT – GROUP BY-klausul (Transact-SQL). Stöds i SQL Server 2022 (16.x) och Azure SQL Database. Stöds inte i SQL Server 2019 (15.x)
- Frågor som infogar, uppdaterar eller tar bort rader, som i sin tur utlöser infogning och/eller borttagning av en indexnyckel till/från ett index i en enklavaktiverad kolumn. Mer information finns i Skapa och använda index för kolumner med Always Encrypted med säkra enklaver
Anteckning
Åtgärder för index och konfidentiella DML-frågor med enklaver stöds endast på enklaveraktiverade kolumner som använder randomiserad kryptering. Deterministisk kryptering stöds inte.
Den kompatibilitetsnivån för databasen ska anges till SQL Server 2022 (160) eller senare.
I Azure SQL Database och i SQL Server 2022 (16.x) kräver konfidentiella frågor med enklaver i en teckensträngskolumn (char
, nchar
) att kolumnen använder en binärkodpunktssortering (_BIN2) eller en UTF-8-sortering. I SQL Server 2019 (15.x) krävs a_BIN2 sortering.
DBCC-kommandon som använder säkra enklaver
DBCC (Transact-SQL) administrativa kommandon som omfattar kontroll av indexens integritet kan också kräva säkra enklaver om databasen innehåller index på enklaveraktiverade kolumner med hjälp av randomiserad kryptering. Till exempel DBCC CHECKDB (Transact-SQL) och DBCC CHECKTABLE (Transact-SQL).
Förutsättningar för att köra uttryck med säkra enklaver
Din miljö måste uppfylla följande krav för att stödja körningsinstruktioner som använder en säker enklav.
SQL Server-instansen eller databasservern i Azure SQL Database måste vara korrekt konfigurerad för att stödja enklaver och attestering, om tillämpligt/nödvändigt. Mer information finns i Konfigurera den säkra enklaven och attesteringen.
När du ansluter till databasen från ett program eller ett verktyg (till exempel SQL Server Management Studio) måste du:
Använd en klientdrivrutinsversion eller en verktygsversion som stöder Always Encrypted med säkra enklaver.
- Se Utveckla program med Always Encrypted med säkra enklaver för information om klientdrivrutiner som stöder Always Encrypted med säkra enklaver.
- I följande avsnitt finns information om verktyg som stöder Always Encrypted med säkra enklaver.
Aktivera Always Encrypted för databasanslutningen.
Ange ett attesteringsprotokoll som avgör om ditt program eller verktyg måste intyga enklaven innan du skickar enklaverfrågor och vilken attesteringstjänst som ska användas. De flesta verktyg och drivrutiner stöder följande attesteringsprotokoll:
- Microsoft Azure Attestation – framtvingar attestering med hjälp av Microsoft Azure Attestation.
- Tjänsten Värdskydd – framtvingar attestering med hjälp av Tjänsten Värdskydd.
- Ingen – tillåter användning av enklaver utan attestering.
Tabellen nedan anger attesteringsprotokoll som är giltiga för vissa SQL-produkter och enklaver:
Produkt Enklavteknik Attesteringsprotokoll som stöds SQL Server 2019 (15.x) och senare VBS-enklaver Värdskyddstjänst, ingen Azure SQL Database SGX-enklaver (i DC-seriens databaser) Microsoft Azure-attestering Azure SQL Database VBS-enklaver Ingen
Ange en attesterings-URL som är giltig för din miljö om du använder attestering.
- Om du använder SQL Server och Host Guardian Service (HGS) kan du läsa Fastställa och dela HGS-attesterings-URL:en.
- När du använder Azure SQL Database med Intel SGX-enklaver och Microsoft Azure Attestation, kan du se Fastställ attesteringsadress för din verifieringspolicy.
Förutsättningar för att köra T-SQL-instruktioner med enklaver i SSMS
Ladda ned den senaste versionen av SQL Server Management Studio (SSMS).
Kontrollera att du kör dina instruktioner från ett frågefönster som använder en anslutning som har Always Encrypted och attestationsparametrar korrekt konfigurerade.
I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.
Välj Alternativ >> och välj fliken Anslutningsegenskaper. Ange databasnamnet.
Välj fliken Always Encrypted.
Välj Aktivera Always Encrypted (kolumnkryptering).
Välj Aktivera säkra enklaver.
Ange Protocol till:
- Host Guardian Service om du använder SQL Server.
- Microsoft Azure Attestation om du använder Azure SQL Database med Intel SGX-enklaver.
- Ingen om du använder Azure SQL Database med VBS-enklaver.
Ange url för enklavattestering. Inte tillämpligt när protokollet är inställt på Ingen. Till exempel
https://hgs.bastion.local/Attestation
ellerhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Välj Anslut.
Om du uppmanas att aktivera parameterisering för Always Encrypted-frågor väljer du Aktivera.
Mer information finns i Aktivera och inaktivera Always Encrypted för en databasanslutning.
Förutsättningar för att köra T-SQL-instruktioner med enklaver i Azure Data Studio
Den lägsta rekommenderade versionen 1,23 eller senare rekommenderas. Kontrollera att du kör dina instruktioner från ett frågefönster som använder en anslutning som har Always Encrypted aktiverat och både rätt attesteringsprotokoll och attesterings-URL:en konfigurerad.
I dialogrutan Anslutning väljer du Avancerat....
Om du vill aktivera Always Encrypted för anslutningen anger du fältet Always Encrypted till Aktiverad.
Om du vill aktivera säkra enklaver anger du fältet Säkra enklaver till Aktiverad.
Ange attesteringsprotokollet och attesterings-URL:en.
- Om du använder SQL Server, ange Attestationsprotokoll till Host Guardian Service och ange URL:en för värdskyddstjänstens attestering i fältet för Enclave Attestation URL.
- Om du använder en DC-seriedatabas med Intel SGX i Azure SQL Database anger du Attestation Protocol till Azure Attestation och anger attesterings-URL:en och refererar till din princip i Microsoft Azure Attestation i fältet Enclave Attestation URL.if you're using a DC-series database with Intel SGX in Azure 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.
- Om du använder en databas med VBS-enklaver aktiverade i Azure SQL Database anger du Attestation Protocol till None.
Välj OK för att stänga Avancerade egenskaper.
Mer information finns i Aktivera och inaktivera Always Encrypted för en databasanslutning.
Om du planerar att köra parametriserade DML-frågor måste du även aktivera parameterisering för Always Encrypted.
Exempel
Det här avsnittet innehåller exempel på DML-frågor med enklaver.
I exemplen används schemat nedan.
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
Exakt matchningssökning
Frågan nedan utför en exakt matchningssökning på den krypterade SSN
strängkolumnen.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Mönstermatchningssökning
Frågan nedan utför en mönstermatchningssökning på den krypterade SSN
strängkolumnen och söker efter anställda med den angivna sista siffran för ett personnummer.
DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO
Intervalljämförelse
Frågan nedan utför en intervalljämförelse på kolumnen krypterad Salary
och söker efter anställda med löner inom det angivna intervallet.
DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO
Ansluter sig
Frågan nedan utför en koppling mellan Employees
och Jobs
tabeller med hjälp av den krypterade kolumnen Salary
. Frågan hämtar anställda med löner utanför ett löneintervall för medarbetarens jobb.
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
Sortering
Nedanstående fråga sorterar medarbetarnas poster baserat på kolumnen krypterad Salary
och hämtar 10 anställda med högst lön.
Notera
Sortering av krypterade kolumner stöds i SQL Server 2022 (16.x) och Azure SQL Database, men inte i SQL Server 2019 (15.x).
SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO