Always Encrypted — как работают запросы к зашифрованным столбцам
Область применения: SQL Server
База данных SQL Azure Управляемый экземпляр SQL Azure
Чтобы выполнить запрос к зашифрованным столбцам базы данных, вставьте данные в эти столбцы, получите значения открытого текста или выполните поддерживаемые операции (например, поиск по точкам) с помощью детерминированного шифрования, пользователь или приложение, выдавающее запрос, должны выполнить следующие предварительные требования:
- Доступ к главному ключу столбца, защищающим данные. Этот доступ к ключу необходим в дополнение к разрешениям на уровне базы данных, таким как SELECT в соответствующей таблице.
- Подключитесь к базе данных с включенной функцией Always Encrypted в подключении к базе данных. Большинство средств SQL и клиентских драйверов SQL поддерживают включение Always Encrypted для подключения к базе данных.
Примечание.
Если у пользователя есть необходимые разрешения базы данных для чтения данных, но нет доступа к ключам, защищенным им, пользователь по-прежнему может получить зашифрованные данные, подключившись к базе данных без включения Always Encrypted в подключении к базе данных.
Вот как работают запросы к зашифрованным столбцам:
- Когда приложение выдает параметризованный запрос, драйвер клиента SQL в приложении прозрачно связывается с ядро СУБД (вызывая sp_describe_parameter_encryption, чтобы определить, какие параметры предназначены для зашифрованных столбцов и должны быть зашифрованы. Для каждого параметра, необходимого для шифрования, драйвер получает алгоритм шифрования, тип шифрования и метаданные ключа, включая ключ шифрования зашифрованных столбцов и расположение соответствующего главного ключа столбца.
- Драйвер вызывает хранилище ключей, содержащее главные ключи столбцов для расшифровки значений ключа шифрования зашифрованного столбца. Результирующий ключ шифрования столбцов с открытым текстом кэшируются для уменьшения количества циклов обхода в хранилище ключей при последующих использовании одних и того же ключа шифрования столбцов.
- Драйвер использует полученные ключи шифрования столбцов обычного текста для шифрования параметров запроса, соответствующих зашифрованным столбцам.
- Драйвер заменяет значения открытого текста параметров, предназначенных для зашифрованных столбцов, их зашифрованными значениями, и отправляет запрос в ядро СУБД для обработки.
- Ядро СУБД выполняет запрос, который может включать сравнение равенства столбцов с помощью детерминированного шифрования.
- Если результаты запроса включают данные из зашифрованных столбцов, ядро СУБД присоединяет метаданные шифрования для каждого столбца, включая сведения о алгоритме шифрования, типе шифрования и метаданных ключа в результирующем наборе.
- Ядро СУБД отправляет результирующий набор клиентскому приложению.
- Для каждого зашифрованного столбца в полученном результирующем наборе драйвер сначала пытается найти ключ шифрования столбца открытого текста в локальном кэше, и только отправляется в хранилище ключей, включающем главный ключ столбца, если он не может найти ключ в кэше.
- Драйвер расшифровывает результаты и возвращает значения открытого текста приложению.
Драйвер клиента взаимодействует с хранилищем ключей, содержащим главный ключ столбца, с помощью поставщика хранилища главных ключей столбцов, который является программным компонентом на стороне клиента, инкапсулирующего хранилище ключей с главным ключом столбца. Поставщики для распространенных типов хранилищ ключей доступны в клиентских библиотеках драйверов от Корпорации Майкрософт или как автономные загрузки. Вы также можете реализовать собственный поставщик. Возможности Always Encrypted, включая встроенные поставщики хранилища главных ключей столбцов, зависят от библиотеки драйверов и ее версии.
Сведения о разработке приложений с помощью Always Encrypted см. в разделе "Разработка приложений с помощью Always Encrypted " для списка клиентских драйверов, поддерживающих Always Encrypted, и сведения о том, как разрабатывать приложения, запрашивающие зашифрованные столбцы.
Вы также можете запрашивать зашифрованные столбцы с помощью средств SQL, например столбцов запросов с помощью Always Encrypted с помощью Azure Data Studio или столбцов запроса с помощью Always Encrypted с SQL Server Management Studio.