Uruchamianie instrukcji Transact-SQL przy użyciu bezpiecznych enklaw

Dotyczy: SQL Server 2019 (15.x) i nowsze wersje w systemie Windows Azure SQL Database

Always Encrypted z bezpiecznymi enklawami umożliwia niektórym instrukcjom Transact-SQL (T-SQL) wykonywanie poufnych obliczeń na zaszyfrowanych kolumnach bazy danych w bezpiecznej enklawie po stronie serwera.

Important

Funkcja Always Encrypted z enklawami Intel Software Guard Extensions (Intel SGX) osiągnie kres wsparcia 31 października 2027 roku. Migruj dotknięte bazy danych przed tą datą. Po 31 października 2027 roku Azure automatycznie przenosi każdą bazę danych, która pozostaje na warstwie obliczeniowej serii DC, do obsługiwanej standardowej warstwy obliczeniowej serii (non-DC) i umożliwia enklawy bezpieczeństwa oparte na wirtualizacji (VBS). Opcje migracji znajdziesz w przewodniku migracji Always Encrypted with Intel SGX Enclaves.

Stwierdzenia używające bezpiecznych enklaw

Następujące typy instrukcji T-SQL wykorzystują bezpieczne enklawy.

Instrukcje DDL korzystające z bezpiecznych enklaw

Następujące typy instrukcji języka definicji danych (DDL) wymagają bezpiecznych enklaw.

Instrukcje DML korzystające z bezpiecznych enklaw

Następujące instrukcje Data Manipulation Language (DML) lub zapytania dotyczące kolumn obsługujących enklawy przy użyciu szyfrowania z randomizacją wymagają bezpiecznych enklaw:

  • Zapytania korzystające z co najmniej jednego z następujących operatorów Transact-SQL obsługiwanych wewnątrz bezpiecznych enklaw:
    • Operatory porównania
    • BETWEEN
    • IN
    • LIKE
    • DISTINCT
    • sprzężenia — program SQL Server 2019 (15.x) obsługuje tylko sprzężenia zagnieżdżone. Programy SQL Server 2022 (16.x) i Azure SQL Database obsługują zagnieżdżone sprzężenia, skróty i scalania
    • SELECT — ORDER BY clase. Obsługiwane w programie SQL Server 2022 (16.x) i usłudze Azure SQL Database. Nieobsługiwane w programie SQL Server 2019 (15.x)
    • SELECT — GRUPUJ WEDŁUG clase. Obsługiwane w programie SQL Server 2022 (16.x) i usłudze Azure SQL Database. Nieobsługiwane w programie SQL Server 2019 (15.x)
  • Zapytania, które wstawiają, aktualizują lub usuwają wiersze i tym samym wyzwalają proces wstawiania i/lub usuwania klucza indeksu do/z indeksu w kolumnie, w której włączono obsługę enklawy. Aby uzyskać więcej informacji, zobacz Tworzenie i używanie indeksów w kolumnach przy użyciu funkcji Always Encrypted z bezpiecznymi enklawami

Notatka

Operacje na indeksach i poufnych zapytaniach DML korzystających z enklaw są obsługiwane tylko w kolumnach z obsługą enklawy, które używają szyfrowania losowego. Szyfrowanie deterministyczne nie jest obsługiwane.

Poziom zgodności bazy danych powinien być ustawiony na program SQL Server 2022 (160) lub nowszy.

W usłudze Azure SQL Database i w programie SQL Server 2022 (16.x) poufne zapytania korzystające z enklaw dla kolumny łańcucha znaków (char, nchar) wymagają, aby kolumna miała sortowanie typu punktu kodowego binarnego (_BIN2) lub sortowanie UTF-8. W programie SQL Server 2019 (15.x) wymagane jest sortowanie danych a_BIN2.

Polecenia DBCC używające bezpiecznych enklaw

Polecenia administracyjne DBCC, które obejmują sprawdzanie integralności indeksów, mogą również wymagać bezpiecznych enklaw, jeśli baza danych zawiera indeksy w kolumnach z obsługą enklawy przy użyciu szyfrowania losowego. Na przykład DBCC CHECKDB i DBCC CHECKTABLE.

Wymagania wstępne dotyczące uruchamiania poleceń z wykorzystaniem bezpiecznych enklaw

Środowisko musi spełniać następujące wymagania, aby obsługiwać wykonywanie instrukcji korzystających z bezpiecznej enklawy.

  • Twoja instancja SQL Server lub serwer bazy danych w usłudze Azure SQL Database muszą być poprawnie skonfigurowane do obsługi enklaw i poświadczania, jeśli ma to zastosowanie/jest wymagane. Aby uzyskać więcej informacji, zobacz konfigurowanie bezpiecznej enklawy i uwierzytelnianie.

  • Podczas nawiązywania połączenia z bazą danych z poziomu aplikacji lub narzędzia (takiego jak SQL Server Management Studio) upewnij się, że:

    • Użyj wersji sterownika klienta lub wersji narzędzia obsługującej funkcję Always Encrypted z bezpiecznymi enklawami.

    • Włącz funkcję Always Encrypted dla połączenia z bazą danych.

    • Określ protokół atestacji, który definiuje, czy aplikacja lub narzędzie musi przeprowadzić atestację enklawy przed przesłaniem zapytań do enklawy, oraz z której usługi atestacji należy skorzystać. Większość narzędzi i sterowników obsługuje następujące protokoły zaświadczania:

      • Attestacja Microsoft Azure — wymusza zaświadczenie przy użyciu usługi Microsoft Azure Attestation.
      • Usługa Host Guardian — wymusza uwierzytelnianie przy użyciu usługi Host Guardian.
      • Brak — umożliwia korzystanie z enklaw bez zaświadczania.

      W poniższej tabeli określono protokoły zaświadczania prawidłowe dla konkretnych produktów SQL i technologii enklawy:

      Produkt Technologia enklawy Obsługiwane protokoły zaświadczania
      SQL Server 2019 (15.x) i nowsze Enklawy VBS Usługa Ochrona hosta, Brak
      Azure SQL Database Enklawy SGX (w bazach danych serii DC) Zaświadczenie platformy Microsoft Azure
      Azure SQL Database Enklawy VBS Żaden
  • Określ adres URL atestacji, który jest prawidłowy dla danego środowiska, jeśli używasz zaświadczania.

Wymagania wstępne dotyczące uruchamiania instrukcji języka T-SQL przy użyciu enklaw w programie SSMS

Zainstaluj najnowszą wersję programu SQL Server Management Studio (SSMS).

Upewnij się, że uruchamiasz instrukcje z okna zapytania, które używa połączenia, które ma poprawnie skonfigurowane parametry Always Encrypted i zaświadczania.

  1. W oknie dialogowym Połącz z serwerem określ nazwę serwera, wybierz metodę uwierzytelniania i określ poświadczenia.

  2. Wybierz opcje >>, a następnie kartę Właściwości połączenia . Podaj nazwę bazy danych.

  3. Wybierz kartę Always Encrypted.

  4. Wybierz pozycję Włącz funkcję Always Encrypted (szyfrowanie kolumn).

  5. Wybierz pozycję Włącz bezpieczne enklawy.

  6. Ustaw protokołu na:

    1. Host Guardian Service, jeśli używasz programu SQL Server.
    2. Zaświadczenie Microsoft Azure, jeśli używasz usługi Azure SQL Database z enklawami Intel SGX.
    3. Brak, jeśli używasz usługi Azure SQL Database z enklawami VBS.
  7. Określ adres URL zaświadczania enklawy. Nie ma zastosowania, gdy protokół jest ustawiony na wartość None. Na przykład https://hgs.bastion.local/Attestation lub https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Zrzut ekranu przedstawiający łączenie się z serwerem za pomocą zaświadczania przy użyciu programu SSMS.

  8. Wybierz Connect.

  9. Jeśli zostanie wyświetlony monit o włączenie parametryzacji dla zapytań Always Encrypted, wybierz pozycję Włącz.

Aby uzyskać więcej informacji, zobacz Włączanie i wyłączanie funkcji Always Encrypted dla połączenia z bazą danych.

Przykłady

Ta sekcja zawiera przykłady zapytań DML korzystających z enklaw.

W przykładach użyto poniższego schematu.

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

Poniższe zapytanie wykonuje dokładne wyszukiwanie dopasowania w zaszyfrowanej kolumnie ciągu SSN.

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

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

Poniższe zapytanie wykonuje wyszukiwanie pasujących do wzorca w zaszyfrowanej kolumnie ciągu SSN, wyszukując pracowników, którzy mają określone cztery ostatnie cyfry numeru ubezpieczenia społecznego.

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

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

Porównanie zakresów

Poniższe zapytanie wykonuje porównanie zakresu w zaszyfrowanej kolumnie Salary, wyszukując pracowników z wynagrodzeniami w określonym zakresie.

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

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

Łączy

Poniższe zapytanie wykonuje sprzężenia między tabelami Employees i Jobs przy użyciu zaszyfrowanej kolumny Salary. Zapytanie pobiera pracowników z wynagrodzeniami spoza widełek płacowych dla stanowiska pracownika.

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

Sortowanie

Poniższe zapytanie sortuje rekordy pracowników na podstawie zaszyfrowanej kolumny Salary, pobierając 10 pracowników z najwyższymi wynagrodzeniami.

Notatka

Sortowanie zaszyfrowanych kolumn jest obsługiwane w programach SQL Server 2022 (16.x) i Azure SQL Database, ale nie w programie SQL Server 2019 (15.x).

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

Następny krok