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


Always Encrypted — как работают запросы к зашифрованным столбцам

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

Чтобы выполнить запрос к зашифрованным столбцам базы данных, вставьте данные в эти столбцы, получите значения открытого текста или выполните поддерживаемые операции (например, поиск по точкам) с помощью детерминированного шифрования, пользователь или приложение, выдавающее запрос, должны выполнить следующие предварительные требования:

  • Доступ к главному ключу столбца, защищающим данные. Этот доступ к ключу необходим в дополнение к разрешениям на уровне базы данных, таким как SELECT в соответствующей таблице.
  • Подключитесь к базе данных с включенной функцией Always Encrypted в подключении к базе данных. Большинство средств SQL и клиентских драйверов SQL поддерживают включение Always Encrypted для подключения к базе данных.

Примечание.

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

Снимок экрана: схема работы запросов к зашифрованным столбцам.

Вот как работают запросы к зашифрованным столбцам:

  1. Когда приложение выдает параметризованный запрос, драйвер клиента SQL в приложении прозрачно связывается с ядро СУБД (вызывая sp_describe_parameter_encryption, чтобы определить, какие параметры предназначены для зашифрованных столбцов и должны быть зашифрованы. Для каждого параметра, необходимого для шифрования, драйвер получает алгоритм шифрования, тип шифрования и метаданные ключа, включая ключ шифрования зашифрованных столбцов и расположение соответствующего главного ключа столбца.
  2. Драйвер вызывает хранилище ключей, содержащее главные ключи столбцов для расшифровки значений ключа шифрования зашифрованного столбца. Результирующий ключ шифрования столбцов с открытым текстом кэшируются для уменьшения количества циклов обхода в хранилище ключей при последующих использовании одних и того же ключа шифрования столбцов.
  3. Драйвер использует полученные ключи шифрования столбцов обычного текста для шифрования параметров запроса, соответствующих зашифрованным столбцам.
  4. Драйвер заменяет значения открытого текста параметров, предназначенных для зашифрованных столбцов, их зашифрованными значениями, и отправляет запрос в ядро СУБД для обработки.
  5. Ядро СУБД выполняет запрос, который может включать сравнение равенства столбцов с помощью детерминированного шифрования.
  6. Если результаты запроса включают данные из зашифрованных столбцов, ядро СУБД присоединяет метаданные шифрования для каждого столбца, включая сведения о алгоритме шифрования, типе шифрования и метаданных ключа в результирующем наборе.
  7. Ядро СУБД отправляет результирующий набор клиентскому приложению.
  8. Для каждого зашифрованного столбца в полученном результирующем наборе драйвер сначала пытается найти ключ шифрования столбца открытого текста в локальном кэше, и только отправляется в хранилище ключей, включающем главный ключ столбца, если он не может найти ключ в кэше.
  9. Драйвер расшифровывает результаты и возвращает значения открытого текста приложению.

Драйвер клиента взаимодействует с хранилищем ключей, содержащим главный ключ столбца, с помощью поставщика хранилища главных ключей столбцов, который является программным компонентом на стороне клиента, инкапсулирующего хранилище ключей с главным ключом столбца. Поставщики для распространенных типов хранилищ ключей доступны в клиентских библиотеках драйверов от Корпорации Майкрософт или как автономные загрузки. Вы также можете реализовать собственный поставщик. Возможности Always Encrypted, включая встроенные поставщики хранилища главных ключей столбцов, зависят от библиотеки драйверов и ее версии.

Сведения о разработке приложений с помощью Always Encrypted см. в разделе "Разработка приложений с помощью Always Encrypted " для списка клиентских драйверов, поддерживающих Always Encrypted, и сведения о том, как разрабатывать приложения, запрашивающие зашифрованные столбцы.

Вы также можете запрашивать зашифрованные столбцы с помощью средств SQL, например столбцов запросов с помощью Always Encrypted с помощью Azure Data Studio или столбцов запроса с помощью Always Encrypted с SQL Server Management Studio.