Выполнение инструкций 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)
- УНИКАЛЬНО
- Соединения — SQL Server 2019 (15.x) поддерживает только соединения вложенных циклов. SQL Server 2022 (16.x) и база данных Azure SQL поддерживают вложенные циклы, хэш-соединения и объединяющие соединения.
- 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 или сервер базы данных в базе данных 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-адрес, допустимый в вашей среде, если вы используете подтверждение подлинности.
- Если вы используете SQL Server и службу Host Guardian Service (HGS), см. Определение и предоставление общего доступа к URL-адресу аттестации HGS.
- Если вы используете базу данных Azure SQL с анклавами Intel SGX и службой аттестации Microsoft Azure, ознакомьтесь с разделом Определение URL-адреса аттестации для вашей политики аттестации.
Необходимые условия для выполнения инструкций T-SQL, использующих анклавы, в SSMS
Скачайте последнюю версию SQL Server Management Studio (SSMS).
Убедитесь, что вы запускаете инструкции из окна запроса, использующего подключение с правильно настроенными параметрами Always Encrypted и аттестации.
В диалоговом окне Соединение с сервером укажите имя сервера, выберите метод аутентификации и введите учетные данные.
Выберите "Параметры >> " и выберите вкладку "Свойства подключения". Укажите имя базы данных.
Выберите вкладку Always Encrypted.
Выберите Включить Always Encrypted (шифрование столбцов).
Выберите "Включить безопасные анклавы".
Задайте для протокола следующее:
- Служба охраны хоста, если вы используете SQL Server.
- Аттестация Microsoft Azure, если вы используете СУБД Azure SQL с анклавами 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, установите Протокол аттестации в Host Guardian Service и введите URL-адрес аттестации в поле URL аттестации анклавов.
- Если вы используете базу данных серии DC с Intel SGX в базе данных Azure SQL, установите протокол аттестации на Аттестация Azure и введите URL-адрес аттестации, ссылаясь на вашу политику в Microsoft Azure Attestation в поле 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 с безопасными анклавами