Spouštění příkazů Transact-SQL pomocí zabezpečených enkláv

Platí pro: SQL Server 2019 (15.x) a novější verze ve službě Windows Azure SQL Database

Funkce Always Encrypted se zabezpečenými enklávami umožňuje některým příkazům Transact-SQL (T-SQL) provádět důvěrné výpočty u šifrovaných databázových sloupců v zabezpečené enklávě na straně serveru.

Important

Enklávy Always Encrypted s rozšířeními Intel Software Guard (Intel SGX) končí s podporou 31. října 2027. Migrujte postižené databáze před tímto datem. Po 31. říjnu 2027 Azure automaticky přesune jakoukoli databázi, která zůstane na výpočetní úrovni řady DC, do podporované úrovně standardních řad (non-DC) a umožní bezpečnostní enklávy založené na virtualizaci (VBS). Pro možnosti migrace viz průvodce migrací Always Encrypted with Intel SGX Enclaves.

Příkazy využívající zabezpečené enklávy

Následující typy příkazu T-SQL využívají zabezpečené enklávy.

Příkazy DDL využívající zabezpečené enklávy

Následující typy příkazů DDL (Data Definition Language) vyžadují zabezpečené enklávy.

Příkazy DML využívající zabezpečené enklávy

Následující jazyk DML (Data Manipulation Language) příkazy nebo dotazy na sloupce s povolenou enklávou pomocí randomizovaného šifrování vyžadují zabezpečené enklávy:

Poznámka

Operace s indexy a důvěrnými dotazy DML využívajícími enklávy jsou podporovány pouze u sloupců s podporou enklávy, které používají randomizované šifrování. Deterministické šifrování se nepodporuje.

Úroveň kompatibility databáze by měla být nastavená na SQL Server 2022 (160) nebo vyšší.

V Azure SQL Database a SQL Serveru 2022 (16.x) vyžadují důvěrné dotazy využívající enklávy ve sloupci řetězce znaků (char, nchar) , že sloupec používá kolaci binárního kódu (_BIN2) nebo kolaci UTF-8. V SQL Serveru 2019 (15.x) se vyžaduje kolace a_BIN2.

Příkazy DBCC využívající zabezpečené enklávy

Příkazy pro správu DBCC, které zahrnují kontrolu integrity indexů, mohou také vyžadovat zabezpečené enklávy, pokud databáze obsahuje indexy ve sloupcích povolených enklávou pomocí randomizovaného šifrování. Například DBCC CHECKDB a DBCC CHECKTABLE.

Předpoklady pro spouštění příkazů pomocí zabezpečených enkláv

Vaše prostředí musí splňovat následující požadavky, aby podporovalo spouštění příkazů, které používají zabezpečenou enklávu.

  • Vaše instance SQL Serveru nebo váš databázový server ve službě Azure SQL Database musí být správně nakonfigurované tak, aby podporovaly enklávy a ověření identity, pokud je to možné/povinné. Další informace naleznete v tématu Nastavení zabezpečené enklávy a ověření identity.

  • Při připojování k databázi z aplikace nebo nástroje (například SQL Server Management Studio) nezapomeňte:

    • Použijte verzi klientského ovladače nebo verzi nástroje, která podporuje funkci Always Encrypted se zabezpečenými enklávy.

    • Povolte funkci Always Encrypted pro připojení k databázi.

    • Zadejte protokol ověření identity, který určuje, jestli aplikace nebo nástroj musí enklávu před odesláním dotazů enklávy otestovat a kterou službu ověření identity má použít. Většina nástrojů a ovladačů podporuje následující protokoly ověření identity:

      • Ověření identity Microsoft Azure – vynucuje ověření identity pomocí ověření identity Microsoft Azure.
      • Služba Strážce hostitele – vynucuje ověření pomocí služby Strážce hostitele.
      • Žádné – umožňuje používat enklávy bez ověření.

      Následující tabulka určuje protokoly ověření identity platné pro konkrétní produkty SQL a technologie enklávy:

      Výrobek Technologie enklávy Podporované protokoly ověření identity
      SQL Server 2019 (15.x) a novější Enklávy VBS Služba Strážce hostitele, Žádná
      Azure SQL Database Enklávy SGX (v databázích řady DC) Atestace Microsoft Azure
      Azure SQL Database Enklávy VBS Žádný
  • Zadejte adresu URL ověření identity, která je platná pro vaše prostředí, pokud používáte ověření identity.

Požadavky pro spouštění příkazů T-SQL s využitím enkláv v SSMS

Nainstalujte nejnovější verzi aplikace SQL Server Management Studio (SSMS).

Ujistěte se, že příkazy spouštíte z okna dotazu, které používá připojení s parametry Always Encrypted a atestačními parametry správně nakonfigurovanými.

  1. V dialogovém okně Připojit k serveru zadejte název serveru, vyberte metodu ověřování a zadejte své přihlašovací údaje.

  2. Vyberte Možnosti >> a přejděte na kartu Vlastnosti připojení. Zadejte název databáze.

  3. Vyberte kartu Always Encrypted.

  4. Vyberte Povolit funkci Always Encrypted (šifrování sloupce).

  5. Vyberte Povolit zabezpečené enklávy.

  6. Nastavte protokol na:

    1. Host Guardian Service, pokud používáte SQL Server.
    2. microsoft Azure Attestation, pokud používáte Azure SQL Database s enklávy Intel SGX.
    3. žádné pokud používáte Azure SQL Database s enklávami VBS.
  7. Zadejte adresu URL atestace enklávy. Nelze použít, pokud je protokol nastaven na None. Například https://hgs.bastion.local/Attestation nebo https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Snímek obrazovky připojení k serveru s ověřením pomocí SSMS

  8. Vyberte Připojit.

  9. Pokud se zobrazí výzva k povolení parametrizace pro dotazy Always Encrypted, vyberte Povolit.

Další informace naleznete v tématu Povolení a zakázání funkce Always Encrypted pro připojení k databázi.

Příklady

Tato část obsahuje příklady dotazů DML využívajících enklávy.

Příklady používají následující schéma.

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

Následující dotaz provede přesné hledání shody u šifrovaného sloupce řetězce SSN.

DECLARE @SSN AS CHAR (11) = '987-65-4320';

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

Následující dotaz provede vyhledávání vzorů odpovídajících zašifrovanému řetězci SSN a vyhledá zaměstnance se zadanými posledními číslicemi čísla sociálního pojištění.

DECLARE @SSN AS CHAR (11) = '987-65-4320';

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

Porovnání rozsahů

Následující dotaz provede porovnání rozsahu u šifrovaného sloupce Salary a vyhledá zaměstnance s platy v zadaném rozsahu.

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

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

Připojuje

Následující dotaz provede spojení mezi tabulkami Employees a Jobs pomocí šifrovaného sloupce Salary. Dotaz načte zaměstnance s platy mimo rozsah platů pro pracovní pozici zaměstnance.

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

Řazení

Následující dotaz seřadí záznamy zaměstnanců podle šifrovaného Salary sloupce a načítá 10 zaměstnanců s nejvyššími platy.

Poznámka

Řazení šifrovaných sloupců je podporováno v SQL Serveru 2022 (16.x) a Azure SQL Database, ale ne v SQL Serveru 2019 (15.x).

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

Další krok