Always Encrypted с безопасными анклавамиAlways Encrypted with Secure Enclaves

Этот раздел применим к: ДаSQL Server НетБаза данных SQL Azure НетХранилище данных SQL Azure НетParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Always Encrypted с безопасными анклавами предоставляет дополнительные функциональные возможности для компонента Always Encrypted.Always Encrypted with secure enclaves provides additional functionality to the Always Encrypted feature.

Представленный в SQL Server 2016 компонент Always Encrypted защищает конфиденциальные данные от вредоносных программ и неавторизованных пользователей SQL Server, обладающих очень высокими правами доступа.Introduced in SQL Server 2016, Always Encrypted protects the confidentiality of sensitive data from malware and high-privileged unauthorized users of SQL Server. Неавторизованные пользователи с очень высокими правами доступа — это администраторы баз данных, администраторы компьютеров, администраторы облака или другие пользователи, у которых есть санкционированный доступ к экземплярам сервера, оборудованию и т. д., но эти пользователи не должны иметь доступ к некоторым или всем фактическим данным.High-privileged unauthorized users are DBAs, computer admins, cloud admins, or anyone else who has legitimate access to server instances, hardware, etc., but who should not have access to some or all of the actual data.

До настоящего момента Always Encrypted защищает данные, шифруя их на стороне клиента и никогда не допуская отображение данных или соответствующих криптографических ключей в обычном тексте в ядре SQL Server.Until now, Always Encrypted protected the data by encrypting it on the client side and never allowing the data or the corresponding cryptographic keys to appear in plaintext inside the SQL Server Engine. Таким образом, функциональные возможности для зашифрованных столбцов в базе данных были строго ограничены.As a result, the functionality on encrypted columns inside the database was severely restricted. Единственные операции, которые SQL Server мог выполнять с зашифрованными данными, — это сравнения на равенство (и сравнения на равенство были доступны только при использовании детерминированного шифрования).The only operations SQL Server could perform on encrypted data were equality comparisons (and equality comparisons were only available with deterministic encryption). Все остальные операции, включая криптографические операции (начальное шифрование данных или смена ключа) или полнофункциональные вычисления (например, сопоставления шаблонов), в базе данных не поддерживаются.All other operations, including cryptographic operations (initial data encryption or key rotation), or rich computations (for example, pattern matching) were not supported inside the database. Пользователям приходилось перемещать данные за пределы базы данных, чтобы выполнять эти операции на стороне клиента.Users needed to move the data outside of the database to perform these operations on the client-side.

Always Encrypted с безопасными анклавами устраняет эти ограничения, позволяя выполнять вычисления с данными в виде обычного текста внутри безопасного анклава на стороне сервера.Always Encrypted with secure enclaves addresses these limitations by allowing computations on plaintext data inside a secure enclave on the server side. Безопасный анклав — это защищенная область памяти в процессе SQL Server. Он также выступает в качестве доверенной среды выполнения для обработки конфиденциальных данных в ядре SQL Server.A secure enclave is a protected region of memory within the SQL Server process, and acts as a trusted execution environment for processing sensitive data inside the SQL Server engine. Безопасный анклав представляет собой "черный ящик" на фоне остальной части SQL Server и других процессов на главном компьютере.A secure enclave appears as a black box to the rest of the SQL Server and other processes on the hosting machine. Просмотреть данные или код внутри анклава извне невозможно, даже с помощью отладчика.There is no way to view any data or code inside the enclave from the outside, even with a debugger.

Always Encrypted использует безопасные анклавы, как показано на следующей схеме:Always Encrypted uses secure enclaves as illustrated in the following diagram:

поток данных

При синтаксическом анализе запроса приложения ядро SQL Server определяет, содержит ли запрос любые операции с зашифрованными данными, для которых требуется использовать безопасный анклав.When parsing an application's query, the SQL Server Engine determines if the query contains any operations on encrypted data that require the use of the secure enclave. Для запросов, где требуется доступ к безопасному анклаву:For queries where the secure enclave needs to be accessed:

  • Драйвер клиента отправляет ключи шифрования столбцов, необходимые для выполнения операций, в безопасный анклав (через защищенный канал).The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel).
  • Затем драйвер клиента отправляет запрос для выполнения, а также зашифрованные параметры запроса.Then, the client driver submits the query for execution along with the encrypted query parameters.

При обработке запроса данные или ключи шифрования столбцов не отображаются в виде обычного текста в ядре SQL Server за пределами безопасного анклава.During query processing, the data or the column encryption keys are not exposed in plaintext in the SQL Server Engine outside of the secure enclave. Ядро SQL Server делегирует криптографические операции и вычисления в зашифрованных столбцах безопасному анклаву.The SQL Server Engine delegates cryptographic operations and computations on encrypted columns to the secure enclave. При необходимости безопасный анклав расшифровывает параметры запроса и/или данные, хранящиеся в зашифрованных столбцах, и выполняет запрошенные операции.If needed, the secure enclave decrypts the query parameters and/or the data stored in encrypted columns and performs the requested operations.

Почему следует использовать Always Encrypted с безопасными анклавами?Why use Always Encrypted with secure enclaves?

С помощью безопасных анклавов Always Encrypted защищает конфиденциальные данные, предоставляя следующие преимущества:With secure enclaves, Always Encrypted protects the confidentiality of sensitive data while providing the following benefits:

  • Шифрование на месте — криптографические операции с конфиденциальными данными, например начальное шифрование данных или смена ключа шифрования столбца, выполняются внутри безопасного анклава и не требуют перемещения данных за пределы базы данных.In-place encryption - cryptographic operations on sensitive data, for example: initial data encryption or rotating a column encryption key, are performed inside the secure enclave and do not require moving the data outside of the database. Шифрование на месте можно выполнять с помощью инструкции Transact-SQL ALTER TABLE, и для этого не нужно использовать средства, такие как мастер Always Encrypted в SSMS или командлет PowerShell Set-SqlColumnEncryption.You can issue in-place encryption using the ALTER TABLE Transact-SQL statement, and you do not need to use tools, such as the Always Encrypted wizard in SSMS or the Set-SqlColumnEncryption PowerShell cmdlet.

  • Полнофункциональные вычисления (предварительная версия)  — операции в зашифрованных столбцах, включая сопоставление шаблонов (предикат LIKE) и сравнения диапазонов, поддерживаются в безопасном анклаве, благодаря чему Always Encrypted можно использовать в широком диапазоне приложений и сценариев, в которых требуется, чтобы такие вычисления выполнялись в системе базы данных.Rich computations (preview) - operations on encrypted columns, including pattern matching (the LIKE predicate) and range comparisons, are supported inside the secure enclave, which unlocks Always Encrypted to a broad range of applications and scenarios that require such computations to be performed inside the database system.

Важно!

В SQL Server 2019 (15.x)SQL Server 2019 (15.x) для полнофункциональных вычислений ожидаются оптимизации производительности и улучшения обработки ошибок, но пока они по умолчанию отключены.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), rich computations are pending several performance optimizations and error-handling enhancements, and are currently disabled by default. Сведения о включении полнофункциональных вычислений см. в разделе Настройка безопасного анклава.To enable rich computations, see Enable rich computations.

В SQL Server 2019 (15.x)SQL Server 2019 (15.x) Always Encrypted с безопасными анклавами использует безопасные анклавы памяти безопасности на основе виртуализации (VBS) (это также называется виртуальным безопасным режимом или анклавами VSM) в Windows.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), Always Encrypted with secure enclaves uses Virtualization-based Security (VBS) secure memory enclaves (also known as Virtual Secure Mode, or VSM enclaves) in Windows.

Аттестация безопасного анклаваSecure Enclave Attestation

Безопасный анклав в ядре SQL Server может получать доступ к конфиденциальным данным, хранящимся в зашифрованных столбцах базы данных, и соответствующим ключам шифрования столбцов в виде обычного текста.The secure enclave inside the SQL Server Engine can access sensitive data stored in encrypted database columns and the corresponding column encryption keys in plaintext. Прежде чем отправить запрос, который включает в себя вычисления анклава, в SQL Server, драйвер клиента в приложении должен проверить, является ли безопасный анклав подлинным анклавом на основе заданной технологии (например, VBS), а также зарегистрирован ли выполняемый в анклаве код для выполнения внутри анклава.Before submitting a query that involves enclave computations to SQL Server, the client driver inside the application must verify the secure enclave is a genuine enclave based on a given technology (for example, VBS) and the code running inside the enclave has been signed for running inside the enclave.

Процесс проверки анклава называется аттестацией анклава. Как правило, в нем задействованы драйвер клиента в приложении и SQL Server, обращающийся к внешней службе аттестации.The process of verifying the enclave is called enclave attestation, and it usually involves both a client driver within the application and SQL Server contacting an external attestation service. Особенности процесса аттестации зависят от технологии анклава и службы аттестации.The specifics of the attestation process depend on the enclave technology and the attestation service.

Процесс аттестации, который SQL Server поддерживает для безопасных анклавов VBS в SQL Server 2019 (15.x)SQL Server 2019 (15.x), — это аттестация среды выполнения System Guard в Защитнике Windows, которая использует службу защиты узла (HGS) в качестве службы аттестации.The attestation process SQL Server supports for VBS secure enclaves in SQL Server 2019 (15.x)SQL Server 2019 (15.x) is Windows Defender System Guard runtime attestation, which uses Host Guardian Service (HGS) as an attestation service. Необходимо настроить HGS в вашей среде и зарегистрировать компьютер, на котором размещен экземпляр SQL Server, в HGS.You need to configure HGS in your environment and register the machine hosting your SQL Server instance in HGS. Кроме того, необходимо настроить клиентские приложения и средства (например, SQL Server Management Studio) с применением аттестации HGS.You also must configure you client applications or tools (for example, SQL Server Management Studio) with an HGS attestation.

Поставщики безопасных анклавовSecure Enclave Providers

Чтобы использовать Always Encrypted с безопасными анклавами, приложению необходимо использовать драйвер клиента, который поддерживает эту функцию.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. В SQL Server 2019 (15.x)SQL Server 2019 (15.x) приложения должны использовать .NET Framework 4.7.2 и поставщик данных .NET Framework для SQL Server.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), your applications must use .NET Framework 4.7.2 and .NET Framework Data Provider for SQL Server. Кроме того, приложения .NET должны быть настроены с применением поставщика безопасных анклавов, относящегося к определенному типу анклава (например, VBS), и используемой службы аттестации (например, HGS).In addition, .NET applications must be configured with a secure enclave provider specific to the enclave type (for example, VBS) and the attestation service (for example, HGS), you are using. Поддерживаемые поставщики анклавов поставляются отдельно в виде пакета NuGet, который необходимо интегрировать с приложением.The supported enclave providers are shipped separately in a NuGet package, which you need to integrate with your application. Поставщик анклавов реализует логику на стороне клиента для протокола аттестации, а также для установки безопасного канала с безопасным анклавом заданного типа.An enclave provider implements the client-side logic for the attestation protocol and for establishing a secure channel with a secure enclave of a given type.

Ключи с поддержкой анклаваEnclave-enabled Keys

В Always Encrypted с безопасными анклавами реализованы ключи с поддержкой анклава:Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Главный ключ столбца с поддержкой анклава — главный ключ столбца со свойством ENCLAVE_COMPUTATIONS, указанным в объекте метаданных главного ключа столбца в базе данных.Enclave-enabled column master key - a column master key that has the ENCLAVE_COMPUTATIONS property specified in the column master key metadata object inside the database. Объект метаданных главного ключа столбца также должен содержать допустимую подпись свойств метаданных.The column master key metadata object must also contain a valid signature of the metadata properties.
  • Ключ шифрования столбца с поддержкой анклава — ключ шифрования столбца, зашифрованный с помощью главного ключа столбца с поддержкой анклава.Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key.

Если ядро SQL Server определяет операции, которые указаны в запросе и которые необходимо выполнить внутри безопасного анклава, ядро SQL Server запрашивает, чтобы драйвер клиента отправил ключи шифрования столбцов, необходимые для вычислений, в безопасный анклав.When the SQL Server Engine determines operations, specified in a query, need to be performed inside the secure enclave, the SQL Server Engine requests the client driver shares the column encryption keys that are needed for the computations with the secure enclave. Драйвер клиента отправляет ключи шифрования столбцов только в том случае, если ключи поддерживают анклав (то есть зашифрованы с помощью главных ключей столбцов с поддержкой анклава) и подписаны должным образом.The client driver shares the column encryption keys only if the keys are enclave-enabled (that is, encrypted with enclave-enabled column master keys) and they're properly signed. В противном случае запрос завершится ошибкой.Otherwise, the query fails.

Столбцы с поддержкой анклаваEnclave-enabled Columns

Столбец с поддержкой анклава — это столбец базы данных, зашифрованный с помощью ключа шифрования столбца с поддержкой анклава.An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key. Функциональные возможности, доступные для столбца с поддержкой анклава, зависят от типа шифрования, используемого в столбце.The functionality available for an enclave-enabled column depends on the encryption type the column is using.

  • Детерминированное шифрование. Столбцы с поддержкой анклава, использующие детерминированное шифрование, поддерживают шифрование на месте, но не поддерживают остальные операции внутри безопасного анклава.Deterministic encryption - Enclave-enabled columns using deterministic encryption support in-place encryption, but no other operations inside the secure enclave. Сравнение на равенство поддерживается, но оно выполняется путем сравнения зашифрованных данных за пределами анклава.Equality comparison is supported, but it is performed by comparing the ciphertext outside of the enclave.
  • Случайное шифрование. Столбцы с поддержкой анклава, использующие случайное шифрование, поддерживают шифрование на месте, а также полнофункциональные вычисления внутри безопасного анклава.Randomized encryption - Enclave-enabled columns using randomized encryption support in-place encryption as well as rich computations inside the secure enclave. Поддерживаемые полнофункциональные вычисления — это сопоставления шаблонов и операторы сравнения, включая сравнение на равенство.The supported rich computations are pattern matching and comparison operators, including equality comparison.

Дополнительные сведения о типах шифрования см. в статье Системы шифрования c технологиями постоянного шифрования.For more information about encryption types, see Always Encrypted Cryptography.

В следующей таблице перечислены функциональные возможности, доступные для зашифрованных столбцов в зависимости от того, используются ли в столбцах ключи шифрования столбцов с поддержкой анклава, и от типа шифрования.The following table summarizes the functionality available for encrypted columns, depending on whether the columns use enclave-enabled column encryption keys and an encryption type.

ОперацияOperation Столбец НЕ поддерживает анклавColumn is NOT enclave-enabled Столбец НЕ поддерживает анклавColumn is NOT enclave-enabled Столбец поддерживает анклавColumn is enclave-enabled Столбец поддерживает анклавColumn is enclave-enabled
Случайное шифрованиеRandomized encryption Детерминированное шифрованиеDeterministic encryption Случайное шифрованиеRandomized encryption Детерминированное шифрованиеDeterministic encryption
Шифрование на местеIn-place encryption Не поддерживаетсяNot Supported Не поддерживаетсяNot Supported ПоддерживаетсяSupported ПоддерживаетсяSupported
Сравнение на равенствоEquality comparison Не поддерживаетсяNot Supported Поддерживается вне анклаваSupported outside of the enclave Поддерживается (внутри анклава)Supported (inside the enclave) Поддерживается вне анклаваSupported outside of the enclave
Операторы сравнения помимо проверки на равенствоComparison operators beyond equality Не поддерживаетсяNot Supported Не поддерживаетсяNot Supported ПоддерживаетсяSupported Не поддерживаетсяNot Supported
LIKELIKE Не поддерживаетсяNot Supported Не поддерживаетсяNot Supported ПоддерживаетсяSupported Не поддерживаетсяNot Supported

Шифрование на месте поддерживает следующие операции внутри анклава:In-place encryption includes support for the following operations inside the enclave:

  • Первоначальное шифрование данных, хранящихся в имеющемся столбце.Initial encryption of data stored in an existing column.

  • Повторное шифрование имеющихся данных в столбце, например:Re-encrypting existing data in a column, for example:

    • смена ключа шифрования столбца (повторное шифрование столбца с использованием нового ключа);Rotating the column encryption key (re-encrypting the column with a new key).
    • изменение типа шифрования.Changing the encryption type.
  • Расшифровка данных, хранящихся в зашифрованном столбце (преобразование столбца в столбец с обычным текстом).Decrypting data stored in an encrypted column (converting the column into a plaintext column).

Для шифрования на месте ключ (или ключи) шифрования столбца, участвующий в криптографических операциях, должен поддерживать анклав:For in-place encryption to be possible, the column encryption key (or keys), involved in the cryptographic operations, must be enclave-enabled:

  • первоначальное шифрование — ключ шифрования столбца для шифрования столбца должен поддерживать анклав;Initial encryption: the column encryption key for the column being encrypted must be enclave-enabled.
  • повторное шифрование — текущий и целевой ключи шифрования столбца (если отличается от текущего ключа) должны поддерживать анклав;Re-encryption: both the current and the target column encryption key (if different than the current key) must be enclave-enabled.
  • расшифровка — текущий ключ шифрования столбца должен поддерживать анклав.Decryption: the current column encryption key of the column must be enclave-enabled.

Индексы в столбцах с поддержкой анклава с использованием случайного шифрованияIndexes on Enclave-enabled Columns using Randomized Encryption

Вы можете создать некластеризованные индексы по столбцам с поддержкой анклава с использованием случайного шифрования, чтобы полнофункциональные запросы выполнялись быстрее.You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make rich queries run faster. Чтобы индекс столбца, зашифрованного с помощью случайного шифрования, не приводил к утечке конфиденциальных данных, но при этом оставался полезным для обработки запросов в анклаве, значения ключей в структуре данных индекса (сбалансированное дерево) шифруются и сортируются по значениям в формате открытого текста.To ensure an index on a column encrypted using randomized encryption doesn't leak sensitive data and, at the same time, it's useful for processing queries inside the enclave, the key values in the index data structure (B-tree) are encrypted and sorted based on their plaintext values. Когда исполнитель запроса в ядре SQL Server применяет индекс по зашифрованному столбцу для вычислений внутри анклава, он выполняет по индексу поиск конкретных значений, хранящихся в этом столбце.When the query executor in the SQL Server Engine uses an index on an encrypted column for computations inside the enclave, it searches the index to look up specific values stored in the column. Каждый поиск может включать несколько операций сравнения.Each search may involve multiple comparisons. Исполнитель запросов делегирует каждое сравнение анклаву, который расшифровывает сохраненное в столбце значение и переданное для сравнения значение ключа индекса, затем сравнивает их в формате обычного текста и возвращает в исполнитель результат этого сравнения.The query executor delegates each comparison to the enclave, which decrypts a value stored in the column and the encrypted index key value to be compared, it performs the comparison on plaintext and it returns the result of the comparison to the executor. Общие сведения о работе индексирования в SQL Server, не имеющие прямого отношения к Always Encrypted, см. в статье Описание кластеризованных и некластеризованных индексов.For general information, not specific to Always Encrypted, on how indexing in SQL Server works, see Clustered and Nonclustered Indexes Described.

Поскольку индекс столбца с поддержкой анклава с использованием случайного шифрования сохраняет зашифрованное значение ключа индекса, а сортировка выполняется по значениям в открытом тексте, ядро SQL Server вынуждено использовать анклав для любых операций, подразумевающих создание или обновление индекса, в том числе:Because an index on an enclave-enabled column using randomized encryption stores the encrypted index key values while the values are sorted based on plaintext, SQL Server Engine must use the enclave for any operation that involves creating or updating an index, including:

  • создание или перестроение индекса;Creating or rebuilding an index.
  • вставка, обновление или удаление строки в таблице (содержащей индексированный и зашифрованный столбец), которое активирует вставку ключа в индекс и (или) удаление ключа из индекса;Inserting, updating, or deleting a row in the table (containing an indexed/encrypted column), which triggers inserting or/and removing an index key to/from the index.
  • выполнение команд DBCC, которые подразумевают проверку целостности индексов, например DBCC CHECKDB (Transact-SQL) или DBCC CHECKTABLE (Transact-SQL);Running DBCC commands that involve checking the integrity of indexes, for example DBCC CHECKDB (Transact-SQL) or DBCC CHECKTABLE (Transact-SQL).
  • восстановление базы данных (например, после сбоя и перезапуска SQL Server), если оно включает отмену любых операций с индексом (см. более подробное описание ниже).Database recovery (for example, after SQL Server fails and restarts), if SQL Server needs to undo any changes to the index (see more details below).

Все указанные выше операции требуют, чтобы в анклаве существовал ключ шифрования столбца для индексированного столбца, который позволит расшифровать ключи индекса.All the above operations require the enclave has the column encryption key for the indexed column, so that it can decrypt the index keys. Обычно анклав может получить ключ шифрования столбца одним из двух способов:In general, the enclave can obtain a column encryption key in one of two ways:

  • Непосредственно из клиентского приложения, которое вызвало операцию с индексом, как описано во введении выше.Directly from the client application that invoked the operation on the index, as described in the introduction above. Для работы этого метода необходимо, чтобы приложение имело доступ к главному ключу столбца и ключу шифрования столбца для конкретного индексированного столбца.This method requires the application or the user to have access to the column master key and the column encryption key, protecting the indexed column. Приложение должно подключаться к базе данных через подключение с поддержкой Always Encrypted.The application must connect to the database with Always Encrypted enabled for the connection.
  • Из кэша ключей шифрования столбцов.From the cache of column encryption keys. Анклав сохраняет ключи, использованные в предыдущих запросах, во внутреннем кэше анклава, который не доступен извне.The enclave stores the keys, used in previous queries, in the cache that is located inside the enclave, and is therefore inaccessible from the outside. Если приложение запустит операцию с индексом без прямого предоставления шифрования столбца, анклав попробует найти в кэше ключ шифрования этого столбца.If an application triggers an operation on an index without providing the required column encryption key directly, the enclave looks up the key in the cache. Если анклав найдет ключ в кэше, он применит его для операции.If the enclave finds the key in the cache, it uses it for the operation. Этот метод позволяет администраторам баз данных управлять индексами и выполнять некоторые операции по очистке данных (например, удаление строки из таблицы, содержащей индекс по зашифрованному столбцу) без необходимости доступа к ключам шифрования или к данным в формате обычного текста.This method allows DBAs to manage indexes and perform certain data cleansing operations (for example, removing a row from a table containing an index on an encrypted column), without having access to the cryptographic keys or the data in plaintext. Для работы этого метода приложение должно подключаться к базе данных через подключение с поддержкой Always Encrypted.This method requires the application connects to the database without Always Encrypted enabled for the connection.

Индексы для столбцов, которые используют случайное шифрование и не поддерживают анклав, создавать пока нельзя.Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

Восстановление базы данныхDatabase Recovery

Если происходит сбой экземпляра SQL Server, его базы данных могут оказаться в состоянии, когда файлы данных содержат частичные изменения из-за незаконченных транзакций.If an instance of SQL Server fails, its databases may be left in a state where the data files may contain some modifications from incomplete transactions. Запущенный экземпляр выполняет процесс восстановления базы данных, который включает откат каждой незавершенной транзакции, найденной в журнале транзакций, что позволяет сохранить целостность базы данных.When the instance is started, it runs a process called database recovery, which involves rolling back every incomplete transaction found in the transaction log to make sure the integrity of the database is preserved. Если незавершенная транзакция вносила изменения в индекс, такие изменения также должны быть отменены.If an incomplete transaction made any changes to an index, those changes also need to be undone. Например, придется удалить или восстановить некоторые значения ключа в индексе.For example, some key values in the index may need to be removed or reinserted.

Важно!

Корпорация Майкрософт настоятельно рекомендует вам включить для базы данных Ускоренное восстановление баз данных (ADR), прежде чем создавать первый индекс по столбцу с поддержкой анклава с использованием случайного шифрования.Microsoft strongly recommends enabling Accelerated database recovery (ADR) for your database, before creating the first index on an enclave-enabled column encrypted with randomized encryption.

Традиционный процесс восстановления базы данных (который соответствует модели восстановления ARIES) предусматривает, что для отмены изменений в индексе SQL Server ожидает, пока приложение не предоставит в анклав ключ шифрования соответствующего столбца, а это может занять много времени.With the traditional database recovery process (that follows the ARIES recovery model), to undo a change to an index, SQL Server needs to wait until an application provides the column encryption key for the column to the enclave, which can take a long time. Ускоренное восстановление баз данных значительно сокращает число операций отката, которые откладываются из-за отсутствия ключа шифрования столбца во внутреннем кэше анклава.ADR dramatically reduces the number of undo operations that must be deferred because a column encryption key is not available in the cache inside the enclave. В результате существенно увеличивается доступность базы данных, ведь вероятность блокировки новых транзакций будет минимальной.Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. При включении ускоренного восстановления баз данных SQL Server по-прежнему может потребовать ключ шифрования столбца для завершения очистки устаревших данных, но он выполняет это в фоновой задаче, которая не влияет на доступность базы данных или транзакций пользователя.With ADR enabled, SQL Server still may need a column encryption key to complete cleaning up old data versions but it does that as a background task that does not impact the availability of the database or user transactions. Но вы можете увидеть в журнале ошибок сообщения об ошибках, которые обозначают сбои операций очистки из-за отсутствия ключа шифрования столбца.You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

Индексы в столбцах с поддержкой анклава с использованием детерминированного шифрованияIndexes on Enclave-enabled Columns using Deterministic Encryption

Индекс по столбцу, зашифрованному с помощью детерминированного шифрования, сортируется по значению в формате зашифрованного текста (не открытого текста), независимо от наличия поддержки анклава для этого столбца.An index on a column using deterministic encryption are sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

Соображения безопасностиSecurity Considerations

К функции Always Encrypted с безопасными анклавами применимы следующие соображения по безопасности.The following security considerations apply to Always Encrypted with secure enclaves.

  • Безопасность данных внутри анклава зависит от используемых протокола аттестации и службы аттестации.The security of your data inside the enclave depends on an attestation protocol and an attestation service. Это означает, что службой и политиками аттестации, которые поддерживает эта служба, должен управлять доверенный администратор.Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. Кроме того, службы аттестации обычно поддерживают разные политики и протоколы аттестации, некоторые из которых выполняют минимальную проверку анклава и его среды. Такие варианты предназначены только для тестирования и разработки.Also, attestation services typically support different policies and attestation protocols, some of which perform minimal verification of the enclave and its environment, and are designed for testing and development. Внимательно следуйте рекомендациям по работе с конкретной службой аттестации, чтобы гарантировать правильные конфигурации и политики для вашего рабочего развертывания.Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • Шифрование столбца с помощью случайного шифрования с ключом CEK с поддержкой анклава может привести к утечке порядка хранящихся в столбце данных, поскольку эти столбцы поддерживают сравнение по диапазонам.Encrypting a column using randomized encryption with an enclave-enabled CEK may result in leaking the order of data stored in the column, as such columns support range comparisons. Например, если зашифрованный столбец с информацией о заработной плате сотрудников имеет индекс, злонамеренный администратор базы данных может просканировать индекс для поиска максимального значения заработной платы и определить сотрудника с максимальной заработной платой (если имена сотрудников в этой базе данных не шифруются).For example, if an encrypted column, containing employee salaries, has an index, a malicious DBA could scan the index to find the maximum encrypted salary value and identify a person with the maximum salary (assuming the name of the person is not encrypted).
  • Если вы используете Always Encrypted для защиты конфиденциальных данных от несанкционированного доступа администраторами баз данных, не передавайте администраторам главные ключи столбцов и (или) ключи шифрования столбцов.If you use Always Encrypted to protect sensitive data from unauthorized access by DBAs, do not share the column master keys or column encryption keys with the DBAs. Администратор базы данных может управлять индексами по зашифрованным столбцам без прямого доступа к этим ключам, используя внутренний кэш ключей шифрования столбцов в анклаве.A DBA can manage indexes on encrypted columns without having direct access to the keys, by leveraging the cache of column encryption keys inside the enclave.

Рекомендации по группам доступности и миграции базы данныхConsiderations for Availability Groups and Database Migration

При настройке группы доступности AlwaysOn, которая потребуется для поддержки запросов с использованием анклавов, необходимо убедиться, что все экземпляры SQL Server, на которых размещены базы данных в группе доступности, поддерживают Always Encrypted с безопасными анклавами и для них настроены анклавы.When configuring an Always On availability group that is required to support queries using enclaves, you need to ensure that all SQL Server instances hosting the databases in the availability group support Always Encrypted with secure enclaves and have an enclave configured. Если база данных-источник поддерживает анклавы, но вторичная реплика их не поддерживает, любой запрос, который пытается использовать функцию Always Encrypted с безопасными анклавами, завершится ошибкой.If the primary database supports enclaves, but a secondary replica does not, any query that attempts to use the functionality of Always Encrypted with secure enclaves will fail.

При восстановлении из файла резервной копии базы данных, которая использует функцию Always Encrypted с безопасными анклавами, на экземпляре SQL Server с настроенным анклавом, операция восстановления пройдет успешно и будут доступны все функции, которые не зависят от анклава.When you restore a backup file of a database that uses the functionality of Always Encrypted with secure enclaves on a SQL Server instance that doesn't have the enclave configured, the restore operation will succeed and all the functionality that doesn't rely on the enclave will be available. Но все последующие запросы, которые используют функциональность анклава, завершатся сбоем, а также станут недействительными все индексы для столбцов с поддержкой анклава, которые используют случайное шифрование.However, any subsequent queries using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. Это же относится к ситуации, когда вы присоединяете базу данных с использованием Always Encrypted и безопасных анклавов к экземпляру, на котором не настроен анклав.The same applies when you attach a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.

Если база данных содержит индексы по столбцам с поддержкой анклава и использованием случайного шифрования, не забудьте включить ускорение восстановления базы данных (ADR) для этой базы данных перед созданием ее резервной копии.If your database contains indexes on enclave-enabled columns using randomized encryption, make sure you enable Accelerated database recovery (ADR) in the database before creating a database backup. ADR обеспечит мгновенную доступность базы данных и всех ее индексов сразу после восстановления базы данных.ADR will ensure the database, including the indexes, is available immediately after you restore the database. Дополнительные сведения см. в разделе Восстановление базы данных.For more information, see Database Recovery.

При миграции базы данных с помощью BACPAC-файла необходимо убедиться, что вы удалили все индексы по столбцам с поддержкой анклава и использованием случайного шифрования, прежде чем создавать BACPAC-файл.When you migrate your database using a bacpac file, you need to make sure you drop all indexes enclave-enabled columns using randomized encryption before creating the bacpac file.

Известные ограниченияKnown Limitations

Безопасные анклавы расширяют функциональные возможности Always Encrypted.Secure enclaves enhance the functionality of Always Encrypted. Теперь поддерживаются следующие возможности для столбцов с поддержкой анклава.The following capabilities are now supported for enclave-enabled columns:

  • Криптографические операции на месте.In-place cryptographic operations.
  • Сопоставление шаблонов (LIKE) и операторы сравнения для столбца, зашифрованного с помощью случайного шифрования.Pattern matching (LIKE) and comparison operators on column encrypted using randomized encryption.

    Примечание

    Указанные выше операции поддерживаются для символьных столбцов, которые используют параметры сортировки с порядком сортировки binary2 (BIN2).The above operations are supported for character string columns that use collations with a binary2 sort order (BIN2 collations). Столбцы со строковыми значениями и порядком сортировки, отличным от BIN2, могут шифроваться с помощью случайного шифрования и ключей шифрования столбцов с поддержкой анклава.Character string columns using non-BIN2 collations can be encrypted using randomized encryption and enclave-enabled column encryption keys. Однако единственной новой функцией, которая включена для таких столбцов, является шифрование на месте.However, the only new functionality that is enabled for such columns is in-place encryption.

  • Создание некластеризованных индексов по столбцам с использованием случайного шифрования.Creating nonclustered indexes on columns using randomized encryption.

Все другие ограничения (не устраненные описанными выше усовершенствованиями), которые указаны в статье со сведениями о возможностях для Always Encrypted (без безопасных анклавов), применимы и к Always Encrypted с безопасными анклавами.All other limitations (not addressed by the above enhancements) that are listed for Always Encrypted (without secure enclaves) at Feature Details also apply to Always Encrypted with secure enclaves.

Отдельно к Always Encrypted с безопасными анклавами применяются следующие ограничения.The following limitations are specific to Always Encrypted with secure enclaves:

  • Невозможно создание индексов по столбцами с поддержкой анклава с использованием случайного шифрованияClustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • Столбцы с поддержкой анклава с использованием случайного шифрования не могут быть первичными ключами и (или) участвовать в ограничениях внешних ключей или уникальных ключей.Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • Не поддерживаются хэш-соединения и объединения слиянием по столбцам с поддержкой анклава с использованием случайного шифрования.Hash joins and merged joins on enclave-enabled columns using randomized encryption are not supported. Поддерживаются только соединения вложенного цикла (с использованием индексов, если они существуют).Only nested loop joins (using indexes, if available) are supported.
  • Запросы с оператором LIKE или оператором сравнения, которые включают параметр запроса с одним из следующих типов данных (которые после шифрования становятся большими объектами), игнорируют индексы и выполняют полное сканирование таблицы.Queries with the LIKE operator or a comparison operator that has a query parameter using one of the following data types (that become large objects after encryption) ignore indexes and perform table scans.
    • nchar[n] и nvarchar[n], где n больше 3967.nchar[n] and nvarchar[n], if n is greater than 3967.
    • char[n], varchar[n], binary[n], varbinary[n], где n больше 7935.char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • Криптографические операции на месте нельзя сочетать с другими изменениями метаданных столбцов, за исключением изменения параметров сортировки с сохранением значений кодовой страницы и допустимости значений NULL.In-place cryptographic operations cannot be combined with any other changes of column metadata, except changing a collation within the same code page and nullability. К примеру, нельзя зашифровать, повторно зашифровать или расшифровать столбец и изменить тип данных столбца в одной инструкции Transact-SQL ALTER TABLE или ALTER COLUMN.For example, you cannot encrypt, re-encrypt, or decrypt a column AND change a data type of the column in a single ALTER TABLE or ALTER COLUMN Transact-SQL statement. Используйте для этого две отдельных инструкции.Use two separate statements.
  • Использование ключей с поддержкой анклава для столбцов в таблицах в памяти не поддерживается.Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • Выражения, определяющие вычисляемые столбцы, не могут выполнять вычисления со столбцами с поддержкой анклава с использованием случайного шифрования (даже если это операции LIKE и сравнения диапазонов).Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are LIKE and range comparisons)..
  • Единственные поддерживаемые хранилища ключей для хранения главных ключей столбцов с поддержкой анклава — хранилище сертификатов Windows и Azure Key Vault.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.

Следующие ограничения применяются к SQL Server 2019 (15.x)SQL Server 2019 (15.x), но в будущем планируется их устранение.The following limitations apply to SQL Server 2019 (15.x)SQL Server 2019 (15.x), but are on the roadmap to be addressed:

  • Не поддерживается создание статистики для столбцов с поддержкой анклава с использованием случайного шифрования.Creating statistics for enclave-enabled columns using randomized encryption is not supported.
  • Единственный драйвер клиента, поддерживающий Always Encrypted с безопасными анклавами, — поставщик данных .NET Framework для SQL Server (ADO.NET) в .NET Framework 4.7.2.The only client driver supporting Always Encrypted with secure enclaves is .NET Framework Data Provider for SQL Server (ADO.NET) in .NET Framework 4.7.2. Не поддерживается ODBC/JDBC.ODBC/JDBC isn't supported.
  • Поддержка инструментов для Always Encrypted с безопасными анклавами еще неполная.Tooling support for Always Encrypted with secure enclaves is currently incomplete. Действуют следующие ограничения.In particular:
    • Не поддерживается импорт и экспорт баз данных, которые содержат ключи с поддержкой анклава.Import/exporting databases containing enclave-enabled keys is not supported.
    • Для запуска криптографической операции на месте с помощью инструкции Transact-SQL ALTER TABLE необходимо запустить инструкцию в окне запроса в среде SSMS или написать собственную программу, которая выполняет инструкцию.To trigger an in-place cryptographic operation via an ALTER TABLE Transact-SQL statement, you need to issue the statement using a query window in SSMS, or you can write your own program that issues the statement. Командлет Set-SqlColumnEncryption в модуле SqlServer PowerShell и мастер Always Encrypted в SQL Server Management Studio еще не поддерживают шифрование на месте. Обе эти программы сейчас перемещают данные из базы данных для криптографических операций, даже если ключи шифрования столбцов, используемые для операций, поддерживают анклав.The Set-SqlColumnEncryption cmdlet in the SqlServer PowerShell module and the Always Encrypted wizard in SQL Server Management Studio do not support in-place encryption yet - both tools currently move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.
  • Команды DBCC, которые проверяют целостность индексов или обновляют индексы.DBCC commands checking the integrity of indexes or updating indexes are not supported.
  • Создание индексов по зашифрованным столбцам во время создания таблицы (с помощью CREATE TABLE).Creating indexes on encrypted columns at the time of creating the table (via CREATE TABLE). Индекс по зашифрованному столбцу необходимо создавать отдельно с помощью инструкции CREATE INDEX.You need to create an index on an encrypted column separately via CREATE INDEX.

Следующие шагиNext steps