Выполнение инструкций 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 или сервер базы данных в База данных SQL Azure должен быть правильно настроен для поддержки анклавов и аттестации, если применимо или требуется. Дополнительные сведения см. в статье Настройка безопасного анклава и аттестации.

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

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

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

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

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

      В следующей таблице указаны протоколы аттестации, допустимые для определенных продуктов 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. Корпорация Майкрософт Аттестация Azure, если вы используете База данных SQL Azure с анклавами 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, установите протокол аттестации для службы защиты узлов и введите URL-адрес аттестации службы защиты узла в поле URL-адрес аттестации анклава.
    • Если вы используете базу данных серии DC с Intel SGX в База данных SQL Azure, задайте протокол аттестации Аттестация Azure и введите URL-адрес аттестации, указав политику в Microsoft Аттестация Azure в поле 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

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

См. также