Sdílet prostřednictvím


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

platí pro: SQL Server 2019 (15.x) a novější – Pouze 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.

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í není podporováno.

Ú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

DBCC (Transact-SQL) příkazy pro správu, 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 (Transact-SQL) a DBCC CHECKTABLE (Transact-SQL).

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

Stáhněte si 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.

    Připojení k serveru s ověřením pomocí aplikace 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.

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

Doporučuje se minimální doporučená verze 1.23 nebo vyšší. Ujistěte se, že spouštíte příkazy z okna dotazu, které používá připojení, které má povolenou funkci Always Encrypted, a jak správný protokol ověření identity, tak nakonfigurovanou adresu URL ověření identity.

  1. V dialogovém okně Připojení vyberte Upřesnit....

  2. Chcete-li pro připojení povolit funkci Always Encrypted, nastavte pole Always Encrypted na Povoleno.

  3. Pokud chcete povolit zabezpečené enklávy, nastavte pole Zabezpečené enklávy na Povoleno.

  4. Zadejte protokol ověření identity a adresu URL ověření identity.

    • Pokud používáte SQL Server, nastavte Attestation Protocol na službu Strážce hostitele a zadejte adresu URL ověřování služby Strážce hostitele do pole Adresa URL ověřování enklávy.
    • Pokud používáte databázi řady DC se službou Intel SGX ve službě Azure SQL Database, nastavte protokol atestace na Azure Attestation a zadejte adresu URL atestace, která odkazuje na vaši zásadu ve službě Microsoft Azure Attestation v poli Adresa URL atestace enklávy.
    • Pokud používáte databázi s enklávami VBS povolenou ve službě Azure SQL Database, nastavte protokol ověření identity na Žádné.

    Připojení k serveru s ověřením pomocí nástroje Azure Data Studio

  5. Výběrem OK zavřete rozšířené vlastnosti.

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

Pokud plánujete spouštět parametrizované dotazy DML, musíte také povolit Parametrizaci pro Always Encrypted.

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

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

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

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 char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

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 money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO

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] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO

Ř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;
GO

Další kroky

Viz také