Массовая загрузка зашифрованных данных в столбцы с помощью Always Encrypted

Применяется к:SQL ServerAzure SQL DatabaseAzure, управляемому экземпляру SQL Azure

Чтобы во время операций массового копирования загрузить зашифрованные данные, не проверяя метаданные на сервере, создайте пользователя с параметром ALLOW_ENCRYPTED_VALUE_MODIFICATIONS . Этот параметр предназначен для устаревших средств или сторонних рабочих процессов извлечения, преобразования и загрузки (ETL), которые не могут использовать функцию Always Encrypted. Таким образом пользователи могут безопасно перемещать зашифрованные данные из одного набора таблиц, содержащего зашифрованные столбцы, в другой набор таблиц с зашифрованными столбцами (в той же или другой базе данных).

Параметр ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

Команды CREATE USER и ALTER USER имеют параметр ALLOW_ENCRYPTED_VALUE_MODIFICATIONS. Если задано значение ON (значение по умолчанию — OFF), этот параметр отключает проверки шифрованных метаданных на сервере в операциях массового копирования, что позволяет пользователю массово копировать зашифрованные данные из одной таблицы или базы данных в другую и при этом не расшифровывать данные.

Сценарии переноса данных

В таблице ниже показаны рекомендуемые параметры, подходящие для нескольких сценариев переноса.

Screenshot of a table showing the recommended settings appropriate for several migration scenarios.

Массовая загрузка зашифрованных данных

Загружайте зашифрованные данные с помощью такого процесса:

  1. Присвойте параметру значение ON для пользователя в базе данных, в которую массово копируются данные. Например:
 ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON;  
  1. Подключившись, как этот пользователь, запустите приложение или средство массового копирования. (Если приложение использует драйвер клиента с поддержкой Always Encrypted, убедитесь, что строка подключения для источника данных не содержит параметр шифрования столбцов=включено , чтобы убедиться, что данные, полученные из зашифрованных столбцов, остаются зашифрованными. Дополнительные сведения см. в разделе "Разработка приложений с помощью Always Encrypted".)

  2. Снова задайте для параметра ALLOW_ENCRYPTED_VALUE_MODIFICATIONS значение OFF. Например:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;  
    

Возможное повреждение данных

Неправильное использование этого параметра может привести к повреждению данных. Параметр ALLOW_ENCRYPTED_VALUE_MODIFICATIONS позволяет пользователю вставлять данные в зашифрованные столбцы в базе данных, в том числе данные, зашифрованные с помощью разных ключей, неверно зашифрованные данные и данные, которые вообще не зашифрованы. Если пользователь случайно копирует данные, которые неправильно зашифрованы с помощью схемы шифрования (ключ шифрования столбца, алгоритм, тип шифрования), настроенной для целевого столбца, вы не сможете расшифровать эти данные (они будут повреждены). Этот параметр следует использовать осторожно, так как он может повредить данные в базе данных.

Приведенный ниже сценарий демонстрирует, как неправильный импорт данных может привести к их повреждению:

  1. Для пользователя задано значение ON для этого параметра.

  2. Пользователь запускает приложение, которое подключается к базе данных. Приложение с помощью массовых API-интерфейсов вставляет обычные текстовые значения в зашифрованные столбцы. Приложение ожидает, что драйвер клиента с включенным постоянным шифрованием зашифрует данные при вставке. Но приложение настроено неправильно, поэтому или оно использует драйвер, не поддерживающий постоянное шифрование, или строка подключения не содержит параметр column encryption setting=enabled.

  3. Приложение отправляет обычные текстовые значения на сервер. Так как проверки зашифрованных метаданных на сервере отключены для пользователя, сервер позволяет вставлять в зашифрованный столбец недопустимые данные (открытый текст вместо зашифрованных данных).

  4. То же или другое приложение подключается к базе данных с помощью драйвера с включенным постоянным шифрованием и параметром column encryption setting=enabled в строке подключения, а затем извлекает данные. Приложение ожидает, что драйвер расшифрует данные. Но драйверу это не удается, так как данные зашифрованы неверно.

Рекомендация

Используйте назначенные учетные записи пользователя для долговременных рабочих нагрузок, использующих этот параметр.

Работая с кратковременно работающими приложениями или средствами массового копирования, которым нужно переместить зашифрованные данные, но не нужно их расшифровывать, задавайте для параметра значение ON непосредственно перед запуском приложения, возвращая значение OFF сразу после запуска операции.

Не разрабатывайте новые приложения с помощью этого параметра. Вместо этого используйте драйвер клиента, который предоставляет API для подавления проверок криптографических метаданных для одного сеанса, например параметр AllowEncryptedValueModifications в поставщике данных .NET Framework для SQL Server — см. Копирование зашифрованных данных с помощью SqlBulkCopy.

Дальнейшие действия

См. также