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


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

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

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

Параметр ALLOW_ENCRYPTED_VALUE_MODIFICATIONS

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

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

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

Снимок экрана: таблица с рекомендуемыми параметрами, подходящими для нескольких сценариев миграции.

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

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

  1. Задайте параметр ON для пользователя в базе данных, которая является целевым объектом для операции массового копирования. Например:

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

  3. Верните параметр ALLOW_ENCRYPTED_VALUE_MODIFICATIONS обратно в OFF. Например:

    ALTER USER Bob WITH ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = OFF;
    

Потенциал для повреждения данных

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

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

  1. Параметр задан ON для пользователя.

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

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

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

Лучшие практики

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

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

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