Выполнение инструкций Transact-SQL с помощью безопасных анклавов
Область применения: SQL Server 2019 (15.x) и более поздних версий — Windows только База данных SQL Azure
Always Encrypted с безопасными анклавами позволяет некоторым инструкциям Transact-SQL (T-SQL) выполнять конфиденциальные вычисления в зашифрованных столбцах базы данных в безопасном анклаве на стороне сервера.
Инструкции, использующие безопасные анклавы
Безопасные анклавы используются следующими типами инструкций T-SQL.
Инструкции DDL, использующие безопасные анклавы
Безопасные анклавы требуются для выполнения следующих типов инструкций языка описания данных (DDL).
- Инструкции ALTER TABLE column_definition (Transact-SQL), инициирующие криптографические операции на месте с помощью ключей с поддержкой анклава. Дополнительные сведения см. в статье Настройка шифрования столбцов на месте с помощью Always Encrypted с безопасными анклавами.
- Инструкции CREATE INDEX (Transact-SQL) и ALTER INDEX (Transact-SQL), которые создают или изменяют индексы в столбцах с поддержкой анклава с помощью случайного шифрования. Дополнительные сведения см. в статье Создание и использование индексов в столбцах с помощью Always Encrypted с безопасными анклавами.
Инструкции DML, использующие безопасные анклавы
Безопасные анклавы требуются для выполнения следующих инструкций языка обработки данных (DML) или запросов к столбцам с поддержкой анклава.
- Запросы, использующие один или несколько следующих операторов Transact-SQL, поддерживаемых в безопасных анклавах:
- Операторы сравнения
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- Соединения — SQL Server 2019 (15.x) поддерживает только соединения вложенных циклов. SQL Server 2022 (16.x) и База данных SQL Azure поддерживают вложенные циклы, хэш и соединения слиянием
- SELECT — предложение ORDER BY (Transact-SQL). Поддерживается в SQL Server 2022 (16.x) и База данных SQL Azure. Не поддерживается в SQL Server 2019 (15.x)
- SELECT — предложение GROUP BY (Transact-SQL). Поддерживается в SQL Server 2022 (16.x) и База данных SQL Azure. Не поддерживается в SQL Server 2019 (15.x)
- Запросы, которые вставляют, обновляют или удаляют строки, которые, в свою очередь, инициируют вставку ключа индекса в столбец с поддержкой анклава или удаление ключа из столбца. Дополнительные сведения см. в статье "Создание и использование индексов для столбцов с помощью Always Encrypted с безопасными анклавами"
Примечание.
Операции с индексами и конфиденциальными запросами 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-адрес аттестации, допустимый для вашей среды, если вы используете аттестацию.
- Если вы используете службу защиты SQL Server и узла (HGS), ознакомьтесь с разделом "Определение и предоставление общего доступа к URL-адресу аттестации HGS".
- Если вы используете База данных SQL Azure с анклавами Intel SGX и Microsoft Аттестация Azure, ознакомьтесь с URL-адресом аттестации для политики аттестации.
Необходимые условия для выполнения инструкций T-SQL, использующих анклавы, в SSMS
Скачайте последнюю версию SQL Server Management Studio (SSMS).
Убедитесь, что вы запускаете инструкции из окна запроса, использующего подключение с параметрами always Encrypted и аттестации, правильно настроенными.
В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.
Выберите "Параметры >> " и выберите вкладку "Свойства подключения". Укажите имя базы данных.
Выберите вкладку Always Encrypted.
Выберите Включить Always Encrypted (шифрование столбцов).
Выберите "Включить безопасные анклава".
Задайте для протокола следующее:
- Служба защиты узла, если вы используете SQL Server.
- Корпорация Майкрософт Аттестация Azure, если вы используете База данных SQL Azure с анклавами Intel SGX.
- Нет, если вы используете База данных SQL Azure с анклавами VBS.
Укажите URL-адрес аттестации анклава. Неприменимо, если для протокола задано значение None. Например,
https://hgs.bastion.local/Attestation
илиhttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Нажмите Подключиться.
Если отобразится запрос на включение параметризации для запросов Always Encrypted, нажмите кнопку Включить.
Дополнительные сведения см. в разделе "Включение и отключение Always Encrypted" для подключения к базе данных.
Необходимые условия для выполнения инструкций T-SQL, использующих анклавы, в Azure Data Studio
Рекомендуется использовать минимальную версию 1.23 или выше. Выполнять инструкции необходимо в окне запросов, использующем подключение с включенной функцией Always Encrypted и правильно настроенными протоколом аттестации и URL-адресом аттестации.
В диалоговом окне "Подключение" выберите "Дополнительно...".
Чтобы включить Always Encrypted для подключения, задайте для поля Always Encrypted значение Включено.
Чтобы включить безопасные анклава, задайте для поля "Безопасные анклавы " значение "Включено".
Укажите протокол аттестации и URL-адрес аттестации.
- Если вы используете SQL Server, установите протокол аттестации для службы защиты узлов и введите URL-адрес аттестации службы защиты узла в поле URL-адрес аттестации анклава.
- Если вы используете базу данных серии DC с Intel SGX в База данных SQL Azure, задайте протокол аттестации Аттестация Azure и введите URL-адрес аттестации, указав политику в Microsoft Аттестация Azure в поле URL-адрес аттестации анклава.
- Если вы используете базу данных с анклавами VBS, включенными в База данных SQL Azure, задайте для параметра "Протокол аттестации" значение None.
Нажмите кнопку "ОК" , чтобы закрыть дополнительные свойства.
Дополнительные сведения см. в разделе "Включение и отключение 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
Следующие шаги
См. также
- Устранение распространенных неполадок Always Encrypted с безопасными анклавами
- Начало работы с Always Encrypted с безопасными анклавами
- Настройка шифрования столбцов на месте с помощью Always Encrypted с безопасными анклавами
- Создание и использование индексов в столбцах с помощью Always Encrypted с безопасными анклавами