Udostępnij za pośrednictwem


Uruchamianie instrukcji Transact-SQL przy użyciu bezpiecznych enklaw

Dotyczy: SQL Server 2019 (15.x) i nowszych — tylko system 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.

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:

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

DBCC (Transact-SQL) polecenia administracyjne, które obejmują sprawdzanie integralności indeksów, mogą również wymagać bezpiecznych enklaw, jeśli baza danych zawiera indeksy w kolumnach obsługujących enklawy z wykorzystaniem szyfrowania losowego. Na przykład DBCC CHECKDB (Transact-SQL) i DBCC CHECKTABLE (Transact-SQL).

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

Pobierz 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.

    Nawiązywanie połączenia 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.

Wymagania wstępne dotyczące uruchamiania instrukcji języka T-SQL przy użyciu enklaw w narzędziu Azure Data Studio

Zalecana jest minimalna zalecana wersja 1.23 lub nowsza. Upewnij się, że uruchamiasz instrukcje z okna zapytania, które używa połączenia z włączonym funkcją Always Encrypted, a także prawidłowym protokołem zaświadczania i skonfigurowanym adresem URL zaświadczania.

  1. W oknie dialogowym Połączenie wybierz pozycję Zaawansowane....

  2. Aby włączyć funkcję Always Encrypted dla połączenia, ustaw pole Always Encrypted na Włączone.

  3. Aby włączyć bezpieczne enklawy, ustaw pole Secure enklawy na włączone.

  4. Określ protokół zaświadczania i adres URL zaświadczania.

    • Jeśli używasz programu SQL Server, ustaw protokołu zaświadczania na usługa ochrona hosta i wprowadź adres URL zaświadczania usługi ochrona hosta w polu adres URL zaświadczania enklawy enklawy.
    • Jeśli używasz bazy danych serii DC z funkcją Intel SGX w usłudze Azure SQL Database, ustaw Protokół Zaświadczania na Azure Attestation i wprowadź adres URL zaświadczania, podając politykę w Microsoft Azure Attestation w polu Enclave Attestation URL.
    • Jeśli używasz bazy danych z enklawami VBS włączonymi w usłudze Azure SQL Database, ustaw wartość Attestation Protocol na wartość None.

    Nawiązywanie połączenia z serwerem za pomocą zaświadczania przy użyciu programu Azure Data Studio

  5. Wybierz OK, aby zamknąć Właściwości zaawansowane.

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

Jeśli planujesz uruchamiać sparametryzowane zapytania DML, należy również włączyć parametryzacja dla funkcji Always Encrypted.

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

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

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

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

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

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

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

Następne kroki

Zobacz też