Поделиться через


Выполнение инструкций Transact-SQL с помощью безопасных анклавов

Область применения: SQL Server 2019 (15.x) и более поздних версий, только для Windows База данных SQL Azure

Always Encrypted с безопасными анклавами позволяет некоторым инструкциям Transact-SQL (T-SQL) выполнять конфиденциальные вычисления над зашифрованными столбцами базы данных в безопасном анклаве на стороне сервера.

Инструкции, использующие безопасные анклавы

Безопасные анклавы используются следующими типами инструкций T-SQL.

Инструкции DDL, использующие безопасные анклавы

Безопасные анклавы требуются для выполнения следующих типов инструкций языка описания данных (DDL).

Инструкции DML, использующие безопасные анклавы

Безопасные анклавы требуются для выполнения следующих инструкций языка обработки данных (DML) или запросов к столбцам с поддержкой анклавов, использующих рандомизированное шифрование.

Примечание.

Операции с индексами и конфиденциальными запросами DML, использующими анклавы, поддерживаются только в столбцах с поддержкой анклава, применяющих случайное шифрование. Детерминированное шифрование не поддерживается.

Уровень совместимости базы данных следует установить на SQL Server 2022 (160) или более поздней версии.

В базе данных SQL Azure и SQL Server 2022 (16.x) конфиденциальные запросы, использующие анклавы в столбце символьной строки (char, nchar), требуют, чтобы столбец использовал сортировку с бинарной точкой (_BIN2) или кодировку UTF-8. В SQL Server 2019 (15.x) необходима сортировка a_BIN2.

Команды DBCC, использующие безопасные анклавы

Административные команды DBCC (Transact-SQL), связанные с проверкой целостности индексов, также могут требовать безопасных анклавов, если база данных содержит индексы столбцов с поддержкой анклав с помощью случайного шифрования. Например, DBCC CHECKDB (Transact-SQL) и DBCC CHECKTABLE (Transact-SQL).

Необходимые условия для выполнения инструкций, использующих безопасные анклавы

Ваша среда должна удовлетворять следующим требованиям для поддержки выполнения инструкций, использующих безопасный анклав.

  • Ваш экземпляр SQL Server или сервер базы данных в базе данных Azure SQL должен быть правильно настроен для поддержки анклавов и аттестации, если это применимо/необходимо. Дополнительные сведения см. в статье Настройка безопасного анклава и аттестации.

  • При подключении к базе данных из приложения или средства (например, SQL Server Management Studio) обязательно выполните следующие действия.

    • Используйте версию драйвера клиента или версию средства, которая поддерживает Always Encrypted с безопасными анклавами.

      • Сведения о клиентских драйверах, поддерживающих Always Encrypted с безопасными анклавами, см. в статье "Разработка приложений с помощью Always Encrypted с безопасными анклавами".
      • Дополнительные сведения о средствах поддержки Always Encrypted с безопасными анклавами см. в следующих разделах.
    • Включите Always Encrypted для подключения к базе данных.

    • Укажите протокол аттестации, который определяет, должно ли приложение или средство проверить анклав перед отправкой запросов анклава и какую службу аттестации она должна использовать. Большинство средств и драйверов поддерживают следующие протоколы аттестации:

      • Аттестация Microsoft Azure — обеспечивает аттестацию с помощью Microsoft Azure Attestation.
      • Служба защиты узлов — применяет аттестацию с помощью Службы защиты узлов.
      • Нет — позволяет использовать анклавы без аттестации.

      В следующей таблице указаны протоколы аттестации, допустимые для определенных продуктов SQL и анклавных технологий:

      Продукт Технология анклава Поддерживаемые протоколы аттестации
      SQL Server 2019 (15.x) и более поздних версий Анклавы VBS Служба управления защитой хоста, отсутствует
      База данных SQL Azure Анклавы SGX (в базах данных серии DC) Аттестация Microsoft Azure
      База данных SQL Azure Анклавы VBS нет
  • Укажите URL-адрес, допустимый в вашей среде, если вы используете подтверждение подлинности.

Необходимые условия для выполнения инструкций T-SQL, использующих анклавы, в SSMS

Скачайте последнюю версию SQL Server Management Studio (SSMS).

Убедитесь, что вы запускаете инструкции из окна запроса, использующего подключение с правильно настроенными параметрами Always Encrypted и аттестации.

  1. В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.

  2. Выберите "Параметры >> " и выберите вкладку "Свойства подключения". Укажите имя базы данных.

  3. Выберите вкладку Always Encrypted.

  4. Выберите Включить Always Encrypted (шифрование столбцов).

  5. Выберите "Включить безопасные анклавы".

  6. Задайте для протокола следующее:

    1. Служба охраны хоста, если вы используете SQL Server.
    2. Аттестация Microsoft Azure, если вы используете СУБД Azure SQL с анклавами Intel SGX.
    3. Нет, если вы используете База данных SQL Azure с анклавами VBS.
  7. Укажите URL-адрес подтверждения анклава. Неприменимо, если для протокола задано значение None. Например, https://hgs.bastion.local/Attestation или https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Подключение к серверу с аттестацией с помощью SSMS

  8. Нажмите Подключиться.

  9. Если отобразится запрос на включение параметризации для запросов Always Encrypted, нажмите кнопку Включить.

Дополнительные сведения см. в разделе "Включение и отключение Always Encrypted" для подключения к базе данных.

Необходимые условия для выполнения инструкций T-SQL, использующих анклавы, в Azure Data Studio

Рекомендуется использовать минимальную версию 1.23 или выше. Выполнять инструкции необходимо в окне запросов, использующем подключение с включенной функцией Always Encrypted и правильно настроенными протоколом аттестации и URL-адресом аттестации.

  1. В диалоговом окне "Подключение" выберите "Дополнительно...".

  2. Чтобы включить Always Encrypted для подключения, задайте для поля Always Encrypted значение Включено.

  3. Чтобы включить безопасные анклава, задайте для поля "Безопасные анклавы " значение "Включено".

  4. Укажите протокол аттестации и URL-адрес аттестации.

    • Если вы используете SQL Server, установите Протокол аттестации в Host Guardian Service и введите URL-адрес аттестации в поле URL аттестации анклавов.
    • Если вы используете базу данных серии DC с Intel SGX в базе данных Azure SQL, установите протокол аттестации на Аттестация Azure и введите URL-адрес аттестации, ссылаясь на вашу политику в Microsoft Azure Attestation в поле URL-адрес аттестации анклава.
    • Если вы используете базу данных с анклавами VBS, включенными в База данных SQL Azure, задайте для параметра "Протокол аттестации" значение None.

    Подключение к серверу с аттестацией с помощью Azure Data Studio

  5. Нажмите кнопку "ОК" , чтобы закрыть дополнительные свойства.

Дополнительные сведения см. в разделе "Включение и отключение Always Encrypted" для подключения к базе данных.

Если вы планируете выполнять параметризованные запросы DML, необходимо также включить параметризацию для Always Encrypted.

Примеры

В этом разделе приводятся примеры запросов DML, использующих анклавы.

В примерах используется приведенная ниже схема.

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

Приведенный ниже запрос выполняет поиск точного совпадения в зашифрованном строковом столбце SSN.

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

В приведенном ниже запросе выполняется поиск сопоставлений по шаблону в зашифрованном строковом столбце SSN, где нужно найти сотрудников с указанными последними цифрами номера социального страхования.

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

Сравнение диапазонов

В приведенном ниже запросе выполняется сравнение диапазонов в зашифрованном столбце Salary, где нужно найти сотрудников с заработной платой в указанном диапазоне.

DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO

Объединения

В приведенном ниже запросе выполняется присоединение таблиц Employees и Jobs с помощью зашифрованного столбца Salary. Запрос получает сотрудников с заработной платой за пределами диапазона зарплат, установленного для должности сотрудника.

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

Сортировка

В приведенном ниже запросе сортируются записи сотрудников на основе зашифрованного столбца Salary и выводятся 10 сотрудников с самыми высокими окладами.

Примечание.

Сортировка зашифрованных столбцов поддерживается в SQL Server 2022 (16.x) и База данных SQL Azure, но не в SQL Server 2019 (15.x).

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

Следующие шаги

См. также