Always Encrypted с безопасными анклавами.Always Encrypted with secure enclaves

Применимо к:Applies to: даSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) — только Windows Применимо к:Applies to: даSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only

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.Without the enhancements discussed in this article, Always Encrypted protects 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 is severely restricted. Единственные операции, которые SQL Server может выполнять с зашифрованными данными — это сравнения на равенство (доступны только при использовании детерминированного шифрования).The only operations SQL Server can perform on encrypted data are equality comparisons (only available with deterministic encryption). Все остальные операции, включая криптографические операции (начальное шифрование данных или смена ключа) и (или) полнофункциональные вычисления (например, сопоставления шаблонов), в базе данных не поддерживаются.All other operations, including cryptographic operations (initial data encryption or key rotation) and or rich computations (for example, pattern matching) are not supported inside the database. Пользователям необходимо переместить данные за пределы базы данных, чтобы выполнить эти операции на стороне клиента.Users need to move their 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 opaque 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.

В 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.

Почему следует использовать 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 - 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.

Аттестация безопасного анклава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 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.

Поддерживаемые драйверы клиентаSupported Client Drivers

Чтобы использовать Always Encrypted с безопасными анклавами, приложению необходимо использовать драйвер клиента, который поддерживает эту функцию.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. Чтобы включить вычисления анклава и аттестацию анклава, необходимо настроить приложение и драйвер клиента.You need to configure the application and the client driver to enable enclave computations and enclave attestation. Дополнительные сведения, включая список поддерживаемых клиентских драйверов, см. в разделе Always Encrypted с безопасными анклавами.For details, including the list of supported client drivers, see Always Encrypted with secure enclaves.

Ключи с поддержкой анклава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.

Дополнительные сведения см. в статье Управление ключами в Always Encrypted с безопасными анклавами.For more information, see Manage keys for Always Encrypted with secure enclaves.

Столбцы с поддержкой анклава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.

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

Дополнительные сведения см. в статье Создание и использование индексов в столбцах с помощью Always Encrypted с безопасными анклавами.For more information, see Create and use indexes on columns using Always Encrypted with secure enclaves. Общие сведения о работе индексирования в 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.

Восстановление базы данных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 с безопасным анклавами устраняет некоторые ограничения Always Encrypted, предоставляя следующие возможности:Always Encrypted with secure enclaves addresses some limitations of Always Encrypted, by enabling the following operations:

  • Криптографические операции на месте.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 and statistics on columns using randomized encryption.

Все остальные ограничения Always Encrypted, описанные в разделе Подробные сведения о возможностях, также применяются к Always Encrypted с безопасными анклавами.All other limitations for Always Encrypted listed 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.
  • Для столбцов с поддержкой анклавов, в которых используется случайное шифрование, поддерживаются только вложенные циклы соединения (с использованием индексов, если они доступны).Only nested loop joins (using indexes, if available) are supported on enclave-enabled columns using randomized encryption. Хэш-соединения и соединения слиянием не поддерживаются.Hash joins and merged joins are not supported.
  • Криптографические операции на месте нельзя сочетать с другими изменениями метаданных столбцов, за исключением изменения параметров сортировки с сохранением значений кодовой страницы и допустимости значений 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/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).
  • Escape-символы не поддерживаются в параметрах оператора LIKE для столбцов с поддержкой анклава, в которых используется случайное шифрование.Escape characters are not supported in parameters of the LIKE operator on enclave-enabled columns using randomized encryption.
  • Запросы с оператором 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.
  • Ограничения инструментов:Tooling limitations:
    • Единственные поддерживаемые хранилища ключей для хранения главных ключей столбцов с поддержкой анклава — хранилище сертификатов Windows и Azure Key Vault.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.
    • Не поддерживается импорт и экспорт баз данных, которые содержат ключи с поддержкой анклавов.Importing/exporting databases containing enclave-enabled keys is not supported.
    • Для запуска криптографической операции на месте с помощью инструкции ALTER TABLE/ALTER COLUMN необходимо запустить инструкцию в окне запроса в среде SSMS или написать собственную программу, которая выполняет инструкцию.To trigger an in-place cryptographic operation via ALTER TABLE/ALTER COLUMN, 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 еще не поддерживают шифрование на месте. Сейчас обе эти программы перемещают данные из базы данных для криптографических операций, даже если ключи шифрования столбцов, используемые для операций, поддерживают анклавы.Currently, 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 - they move the data out of the database for cryptographic operations, even if the column encryption keys used for the operations are enclave-enabled.

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

См. также разделSee also