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


Всегда зашифровано

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

Схема Always Encrypted.

Always Encrypted и Always Encrypted с безопасными анклавами — это функции, предназначенные для защиты конфиденциальной информации, включая номера кредитных карт и национальные или региональные идентификационные номера (например, номера социального страхования США), в База данных SQL Azure, Управляемый экземпляр SQL Azure и базах данных SQL Server. Конфиденциальные данные можно шифровать в клиентских приложениях, гарантируя, что ключи шифрования никогда не предоставляются ядром СУБД. Этот подход обеспечивает разделение между теми, кто владеет данными и может просматривать их, и тех, кто управляет данными, но не должен иметь доступа: локальные администраторы базы данных, операторы облачной базы данных или другие несанкционированные пользователи с высоким уровнем привилегий. В результате Always Encrypted позволяет клиентам безопасно хранить конфиденциальные данные в облаке, уменьшая риск кражи данных злоумышленниками.

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

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

Always Encrypted гарантирует, что шифрование является простым для приложений. На клиенте драйвер с поддержкой Always Encrypted шифрует конфиденциальные данные перед отправкой в ядро СУБД и автоматически перезаписывает запросы для поддержания семантики приложения. Он также автоматически расшифровывает результаты запроса из зашифрованных столбцов базы данных.

Настройка Always Encrypted

Примечание.

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

В этом разделе представлен обзор настройки Always Encrypted. Дополнительные сведения и сведения о начале работы см. в руководстве по началу работы с Always Encrypted.

Чтобы настроить Always Encrypted в базе данных, выполните следующие действия.

  1. Подготовка криптографических ключей для защиты данных. Технологии постоянного шифрования используют два типа ключей:

    • Ключи шифрования столбцов.
    • Главные ключи столбцов.

    Ключ шифрования столбца шифрует данные в зашифрованном столбце. Главный ключ столбца — это ключ, который защищает один или несколько ключей шифрования столбцов.

    Храните главные ключи столбцов в надежном хранилище ключей за пределами системы базы данных, например Azure Key Vault, хранилище сертификатов Windows или аппаратный модуль безопасности. После этого подготовьте ключи шифрования столбцов и зашифруйте каждый ключ с помощью главного ключа столбца.

    Наконец, сохраните метаданные о ключах в базе данных. Метаданные главного ключа столбца включают расположение главного ключа столбца. Метаданные ключа шифрования столбца содержат зашифрованное значение ключа шифрования столбца. Ядро СУБД не хранит или не использует ключи в виде открытого текста.

    Дополнительные сведения об управлении ключами Always Encrypted см. в разделе "Обзор управления ключами для Always Encrypted".

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

    • Детерминированное шифрование всегда создает то же зашифрованное значение для заданного значения открытого текста. С помощью детерминированного шифрования можно выполнять поиск точек, соединения равенства, группирование и индексирование по зашифрованным столбцам. Однако несанкционированные пользователи могут угадать сведения о зашифрованных значениях, проверив шаблоны в зашифрованном столбце, особенно если существует небольшой набор возможных зашифрованных значений, таких как True/False, или Север/Юго-Восток/Западная область.

    • Случайное шифрование использует метод, который шифрует данные непредсказуемо. Каждый идентичный вход с открытым текстом приводит к отдельным зашифрованным выходным данным. Этот метод повышает безопасность случайного шифрования.

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

Так как система базы данных по проектированию не имеет доступа к криптографическим ключам, шифрование столбцов требует перемещения и шифрования данных за пределами базы данных. Процесс шифрования может занять много времени и уязвим к прерываниям сети. Кроме того, если вам потребуется повторно зашифровать столбец позже, например при смене ключа шифрования или изменении типов шифрования, возникают те же трудности. Использование Always Encrypted с безопасными анклавами устраняет необходимость перемещения данных из базы данных. Так как анклав является доверенным, драйвер клиента в приложении или средство, например SQL Server Management Studio (SSMS), может безопасно поделиться ключами с анклава во время криптографических операций. Анклав может затем зашифровать или повторно зашифровать столбцы, значительно уменьшая время, необходимое для этих действий.

Подробные сведения об алгоритмах шифрования Always Encrypted см. в разделе Шифрование Always Encrypted.

Описанные выше действия можно выполнить с помощью средств SQL:

Чтобы ключи Always Encrypted и защищенные конфиденциальные данные никогда не отображались в виде открытого текста в среде базы данных, ядро СУБД не может быть вовлечено в подготовку ключей и шифрование данных или операции расшифровки. Поэтому Transact-SQL (T-SQL) не поддерживает подготовку ключей или криптографические операции. По той же причине необходимо выполнить шифрование существующих данных или повторное шифрование данных (с другим типом шифрования или ключом шифрования столбца) за пределами базы данных (средства SQL могут автоматизировать это).

После изменения определения зашифрованного столбца выполните sp_refresh_parameter_encryption , чтобы обновить метаданные Always Encrypted для объекта.

Ограничения

Следующие ограничения применяются к запросам к зашифрованным столбцам:

  • Вы не можете выполнять вычисления по столбцам, зашифрованным с помощью случайного шифрования. Детерминированное шифрование поддерживает следующие операции, связанные с сравнением равенства. Другие операции не разрешены:

    Примечание.

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

  • Нельзя использовать инструкции запросов, которые активируют вычисления, включающие как обычный текст, так и зашифрованные данные. Например:

    • Сравнение зашифрованного столбца с столбцом обычного текста или литерала.
    • Копирование данных из столбца обычного текста в зашифрованный столбец (или наоборот) UPDATEили BULK INSERTSELECT INTOINSERT..SELECT.
    • Вставка литерала в зашифрованные столбцы.

    Такие операторы приводят к ошибкам столкновения операнда следующим образом:

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    

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

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

  • Параметры с табличным значением, предназначенные для зашифрованных столбцов, не поддерживаются.

  • Запросы, использующие следующие предложения, не поддерживаются:

  • Always Encrypted не поддерживается для столбцов со следующими характеристиками:

    Внимание

    Stretch Database устарел в SQL Server 2022 (16.x) и База данных SQL Azure. Эта функция будет удалена в будущей версии ядро СУБД. Избегайте использования этого компонента в новых разработках и запланируйте изменение существующих приложений, в которых он применяется.

    • Столбцы во внешних таблицах (PolyBase) (примечание: использование внешних таблиц и таблиц с зашифрованными столбцами в одном запросе поддерживается).
  • Следующие функции не работают для зашифрованных столбцов:

Справочник по Always Encrypted Transact-SQL

Always Encrypted использует следующие инструкции Transact-SQL, представления системного каталога, системные хранимые процедуры и разрешения.

Выписки

Инструкция DDL Description
СОЗДАНИЕ ГЛАВНОГО КЛЮЧА СТОЛБЦА Создание объекта метаданных главного ключа столбца в базе данных
УДАЛЕНИЕ ГЛАВНОГО КЛЮЧА СТОЛБЦА Удаляет главный ключ шифрования столбца из базы данных.
СОЗДАНИЕ КЛЮЧА ШИФРОВАНИЯ СТОЛБЦА Создает объект метаданных ключа шифрования столбца.
ИЗМЕНИТЬ КЛЮЧ ШИФРОВАНИЯ СТОЛБЦА Изменяет ключ шифрования столбца в базе данных, добавляя или удаляя зашифрованное значение.
УДАЛЕНИЕ КЛЮЧА ШИФРОВАНИЯ СТОЛБЦА Удаляет ключ шифрования столбца из базы данных.
СОЗДАТЬ ТАБЛИЦУ (ЗАШИФРОВАНО С) Указывает зашифрованные столбцы

Представления и хранимые процедуры системного каталога

Представления и хранимые процедуры системного каталога Description
sys.column_encryption_keys (ключи шифрования столбцов) Возвращает сведения о ключах шифрования столбцов (CEKs)
sys.column_encryption_key_values Возвращает сведения о зашифрованных значениях ключей шифрования столбцов (CEKs)
sys.column_master_keys Возвращает строку для каждого главного ключа базы данных
sp_refresh_parameter_encryption Обновляет метаданные Always Encrypted для параметров указанной не привязанной к схеме хранимой процедуры, определяемой пользователем функции, представления, триггера DML, триггера DDL уровня базы данных или триггера DDL уровня сервера
sp_describe_parameter_encryption Анализирует указанную инструкцию Transact-SQL и ее параметры, чтобы определить, какие параметры соответствуют столбцам базы данных, защищенным с помощью функции Always Encrypted.

Сведения о метаданных шифрования, хранящихся для каждого столбца, см. в статье sys.columns.

Разрешения базы данных

Always Encrypted использует четыре разрешения базы данных.

Представления и хранимые процедуры системного каталога Description
ALTER ANY COLUMN MASTER KEY Требуется для создания и удаления метаданных главного ключа столбца.
ALTER ANY COLUMN ENCRYPTION KEY Требуется для создания и удаления метаданных ключа шифрования столбцов.
VIEW ANY COLUMN MASTER KEY DEFINITION Требуется для доступа и чтения метаданных главного ключа столбца, необходимых для запроса зашифрованных столбцов.
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION Требуется для доступа и чтения метаданных ключа шифрования столбцов, необходимых для запроса зашифрованных столбцов.

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

Сценарий ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Управление ключами (создание, изменение или проверка метаданных ключа в базе данных) X X X X
Отправка запросов в зашифрованные столбцы X X

Важные замечания

  • Для выбора зашифрованных столбцов требуются разрешения VIEW ANY COLUMN MASTER KEY DEFINITION и VIEW ANY COLUMN ENCRYPTION KEY DEFINITION. Эти разрешения защищают столбцы, даже если у пользователя нет разрешения на главные ключи столбцов в хранилищах ключей, и они препятствуют доступу к открытому тексту.

  • В SQL Server роль общедоступной фиксированной базы данных по умолчанию предоставляет как VIEW ANY COLUMN MASTER KEY DEFINITION, так и VIEW ANY COLUMN ENCRYPTION KEY DEFINITION разрешения. Администратор базы данных может отозвать или отказать в этих разрешениях для общедоступной роли и предоставить их определенным ролям или пользователям для реализации более ограниченного контроля.

  • В базе данных SQL фиксированная роль публичной базы данных не предоставляет разрешения VIEW ANY COLUMN MASTER KEY DEFINITION и VIEW ANY COLUMN ENCRYPTION KEY DEFINITION по умолчанию. Это изменение позволяет использовать некоторые устаревшие средства, использующие старые версии DacFx для правильной работы. Чтобы работать с зашифрованными столбцами (даже если они не расшифровываются), администратор базы данных должен явно предоставить разрешения VIEW ANY COLUMN MASTER KEY DEFINITION и VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.

Следующий шаг