Always Encrypted com enclaves segurosAlways Encrypted with Secure Enclaves

ESTE TÓPICO APLICA-SE A: simSQL ServernãoBanco de Dados SQL do AzurenãoSQL Data Warehouse do Azure nãoParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

O Always Encrypted com enclaves seguros fornece funcionalidade adicional para o recurso Always Encrypted.Always Encrypted with secure enclaves provides additional functionality to the Always Encrypted feature.

Introduzido no SQL Server 2016, o Always Encrypted protege a confidencialidade dos dados confidenciais contra malwares e usuários com altos privilégios não autorizados do 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. Usuários com altos privilégios não autorizados são DBAs, administradores de computador, administradores de nuvem ou qualquer outra pessoa que tenha acesso legítimo a instâncias do servidor, hardware, etc., mas que não poderia ter acesso à parte ou todos os dados reais.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.

Até agora, o Always Encrypted protegia os dados criptografando-os no lado do cliente e nunca permitindo que os dados ou as chaves de criptografia correspondentes aparecessem em texto não criptografado dentro do Mecanismo do 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. Como resultado, a funcionalidade em colunas criptografadas dentro do banco de dados ficava rigorosamente restrita.As a result, the functionality on encrypted columns inside the database was severely restricted. As únicas operações que o SQL Server podia executar nos dados criptografados eram as comparações de igualdade (que só estavam disponíveis com a criptografia determinística).The only operations SQL Server could perform on encrypted data were equality comparisons (and equality comparisons were only available with deterministic encryption). Todas as outras operações, incluindo operações criptográficas (criptografia de dados inicial ou rotação de chave) ou cálculos avançados (por exemplo, correspondência de padrões) não eram compatíveis com o interior do banco de dados.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. Os usuários precisavam mover os dados para fora do banco de dados para executar essas operações no lado do cliente.Users needed to move the data outside of the database to perform these operations on the client-side.

O Always Encrypted com enclaves seguros soluciona essas limitações, permitindo realizar cálculos em dados de texto não criptografado em um enclave seguro no lado do servidor.Always Encrypted with secure enclaves addresses these limitations by allowing computations on plaintext data inside a secure enclave on the server side. Um enclave seguro é uma região protegida de memória dentro do processo do SQL Server e atua como um ambiente de execução confiável para o processamento de dados confidenciais dentro do mecanismo do 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. Um enclave seguro é exibido como uma caixa preta para o restante do SQL Server e outros processos no computador de hospedagem.A secure enclave appears as a black box to the rest of the SQL Server and other processes on the hosting machine. Não há nenhuma maneira de exibir os dados ou o código dentro do enclave de fora, mesmo com um depurador.There is no way to view any data or code inside the enclave from the outside, even with a debugger.

O Always Encrypted usa enclaves seguros, conforme ilustrado no diagrama a seguir:Always Encrypted uses secure enclaves as illustrated in the following diagram:

fluxo de dados

Durante a análise de uma consulta do aplicativo, o Mecanismo do SQL Server determina se a consulta contém alguma operação em dados criptografados que exige o uso do enclave seguro.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. Para consultas em que o enclave seguro precisa ser acessado:For queries where the secure enclave needs to be accessed:

  • O driver do cliente envia as chaves de criptografia de coluna necessárias para as operações para o enclave seguro (por um canal seguro).The client driver sends the column encryption keys required for the operations to the secure enclave (over a secure channel).
  • Em seguida, o driver do cliente envia a consulta para execução junto com os parâmetros da consulta criptografada.Then, the client driver submits the query for execution along with the encrypted query parameters.

Durante o processamento de consulta, os dados ou as chaves de criptografia de coluna não são expostos em texto não criptografado no Mecanismo do SQL Server fora do enclave seguro.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. O Mecanismo do SQL Server delega operações criptográficas e cálculos em colunas criptografadas para o enclave seguro.The SQL Server Engine delegates cryptographic operations and computations on encrypted columns to the secure enclave. Se necessário, o enclave seguro descriptografa os parâmetros de consulta e/ou os dados armazenados em colunas criptografadas e executa as operações solicitadas.If needed, the secure enclave decrypts the query parameters and/or the data stored in encrypted columns and performs the requested operations.

Por que usar o Always Encrypted com enclaves seguros?Why use Always Encrypted with secure enclaves?

Com enclaves seguros, o Always Encrypted protege a confidencialidade dos dados confidenciais, fornecendo os seguintes benefícios:With secure enclaves, Always Encrypted protects the confidentiality of sensitive data while providing the following benefits:

  • Criptografia in-loco – operações criptográficas em dados confidenciais, por exemplo: criptografia de dados ou rotação de uma chave de criptografia de coluna são executadas dentro do enclave seguro e não exigem a movimentação dos dados para fora do banco de dados.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. Você pode emitir a criptografia in-loco usando a instrução Transact-SQL ALTER TABLE, e não será preciso usar ferramentas como o assistente de Always Encrypted no SSMS ou o cmdlet do 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.

  • Cálculos avançados (versão prévia) – operações em colunas criptografadas, incluindo a correspondência de padrões (o predicado LIKE) e comparações de intervalo são compatíveis dentro do enclave seguro, que desbloqueia o Always Encrypted para uma ampla gama de aplicativos e cenários que exigem que esses cálculos sejam executados dentro do sistema de banco de dados.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.

Importante

No SQL Server 2019 (15.x)SQL Server 2019 (15.x), cálculos avançados aguardam várias otimizações de desempenho e melhorias de tratamento de erros e, atualmente, estão desabilitados por padrão.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. Para habilitar cálculos avançados, consulte Habilitar cálculos avançados.To enable rich computations, see Enable rich computations.

Em SQL Server 2019 (15.x)SQL Server 2019 (15.x), o Always Encrypted com enclaves seguros usa enclaves de memória seguros com VBS (Segurança baseada em Virtualização) (também conhecido como enclaves VSM ou Modo Seguro Virtual) no 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.

Atestado de enclave seguroSecure Enclave Attestation

O enclave seguro dentro do Mecanismo do SQL Server pode acessar dados confidenciais armazenados em colunas de banco de dados criptografado e as chaves de criptografia de coluna correspondentes em texto não criptografado.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. Antes de enviar uma consulta que envolve cálculos de enclave para o SQL Server, o driver do cliente dentro do aplicativo precisa confirmar se o enclave seguro é um enclave genuíno com base em determinada tecnologia (por exemplo, VBS) e o código em execução dentro do enclave foi assinado para execução dentro do enclave.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.

O processo de verificação do enclave é chamado de atestado de enclave, e geralmente requer que um driver de cliente dentro do aplicativo e do SQL Server contate um serviço de atestado externo.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. As especificidades do processo de atestado dependem da tecnologia de enclave e do serviço de atestado.The specifics of the attestation process depend on the enclave technology and the attestation service.

O processo de atestado do SQL Server é compatível com enclaves seguros de VBS em SQL Server 2019 (15.x)SQL Server 2019 (15.x) é o atestado de tempo de execução de do Windows Defender System Guard, que usa o HGS (Serviço Guardião de Host) como um serviço de atestado.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. Você precisa configurar o HGS no seu ambiente e registrar o computador que hospeda a instância do SQL Server no HGS.You need to configure HGS in your environment and register the machine hosting your SQL Server instance in HGS. Você também precisa configurar seus aplicativos cliente ou ferramentas (por exemplo, o SQL Server Management Studio) com um atestado de HGS.You also must configure you client applications or tools (for example, SQL Server Management Studio) with an HGS attestation.

Provedores de enclave seguroSecure Enclave Providers

Para usar o Always Encrypted com enclaves seguros, um aplicativo precisa usar um driver de cliente compatível com esse recurso.To use Always Encrypted with secure enclaves, an application must use a client driver that supports the feature. No SQL Server 2019 (15.x)SQL Server 2019 (15.x), seus aplicativos precisam usar o .NET Framework 4.7.2 e o Provedor de Dados do .NET Framework para 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. Além disso, os aplicativos .NET precisam ser configurados com um provedor de enclave seguro específico para o tipo de enclave (por exemplo, VBS) e o serviço de atestado (por exemplo, HGS) que você está usando.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. Os provedores de enclave compatíveis são fornecidos separadamente em um pacote NuGet, que você precisa integrar ao seu aplicativo.The supported enclave providers are shipped separately in a NuGet package, which you need to integrate with your application. Um provedor de enclave implementa a lógica do lado do cliente para o protocolo de atestado e estabelece um canal seguro com um enclave seguro de um tipo determinado.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.

Chaves habilitadas para enclaveEnclave-enabled Keys

O Always Encrypted com enclaves seguros apresenta o conceito de chaves habilitadas para enclave:Always Encrypted with secure enclaves introduces the concept of enclave-enabled keys:

  • Chave mestra de coluna habilitada para enclave – uma chave mestra de coluna que tem a propriedade ENCLAVE_COMPUTATIONS especificada no objeto de metadados de chave mestra de coluna no banco de dados.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. O objeto de metadados de chave mestra de coluna também precisa conter uma assinatura válida das propriedades de metadados.The column master key metadata object must also contain a valid signature of the metadata properties.
  • Chave de criptografia de coluna habilitada para enclave – uma chave de criptografia de coluna que é criptografada com uma chave mestra de coluna habilitada para enclave.Enclave-enabled column encryption key - a column encryption key that is encrypted with an enclave-enabled column master key.

Quando o Mecanismo do SQL Server determina as operações que, especificadas em uma consulta, precisam ser executadas dentro do enclave seguro, o Mecanismo do SQL Server solicita que o driver do cliente compartilhe as chaves de criptografia de coluna que são necessários para os cálculos com o enclave seguro.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. O driver de cliente compartilha as chaves de criptografia de coluna apenas quando as chaves estão habilitadas para enclave (ou seja, criptografadas com chaves mestras de coluna habilitada para enclave) e quando estão devidamente assinadas.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. Caso contrário, a consulta falhará.Otherwise, the query fails.

Colunas habilitadas para enclaveEnclave-enabled Columns

Uma coluna habilitada para enclave é uma coluna de banco de dados criptografada com uma chave de criptografia de coluna habilitada para enclave.An enclave-enabled column is a database column encrypted with an enclave-enabled column encryption key. A funcionalidade disponível para uma coluna habilitada para enclave depende do tipo de criptografia que de coluna está usando.The functionality available for an enclave-enabled column depends on the encryption type the column is using.

  • Criptografia determinística – Colunas habilitadas para enclave que usam criptografia determinística são compatíveis com criptografia in-loco, mas com nenhuma outra operação dentro do enclave seguro.Deterministic encryption - Enclave-enabled columns using deterministic encryption support in-place encryption, but no other operations inside the secure enclave. A comparação de igualdade é compatível, mas é executada comparando o texto cifrado fora do enclave.Equality comparison is supported, but it is performed by comparing the ciphertext outside of the enclave.
  • Criptografia aleatória – Colunas habilitadas para enclave que usam criptografia aleatória são compatíveis com criptografia in-loco, bem como com cálculos avançados dentro do enclave seguro.Randomized encryption - Enclave-enabled columns using randomized encryption support in-place encryption as well as rich computations inside the secure enclave. Os cálculos avançados compatíveis são a correspondência de padrões e os operadores de comparação, incluindo a comparação de igualdade.The supported rich computations are pattern matching and comparison operators, including equality comparison.

Para obter mais informações sobre os tipos de criptografia, consulte Criptografia Always Encrypted.For more information about encryption types, see Always Encrypted Cryptography.

A tabela a seguir resume a funcionalidade disponível para colunas criptografadas, dependendo se as colunas usam chaves de criptografia de coluna habilitadas para enclave e um tipo de criptografia.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.

OperaçãoOperation A coluna NÃO é habilitada para enclaveColumn is NOT enclave-enabled A coluna NÃO é habilitada para enclaveColumn is NOT enclave-enabled A coluna é habilitada para enclaveColumn is enclave-enabled A coluna é habilitada para enclaveColumn is enclave-enabled
Criptografia aleatóriaRandomized encryption Criptografia determinísticaDeterministic encryption Criptografia aleatóriaRandomized encryption Criptografia determinísticaDeterministic encryption
Criptografia in-locoIn-place encryption IncompatívelNot Supported Sem suporteNot Supported Tem suporteSupported Tem suporteSupported
Comparação de igualdadeEquality comparison IncompatívelNot Supported Compatível fora do enclaveSupported outside of the enclave Compatível (dentro do enclave)Supported (inside the enclave) Compatível fora do enclaveSupported outside of the enclave
Operadores de comparação além de igualdadeComparison operators beyond equality IncompatívelNot Supported Sem suporteNot Supported Tem suporteSupported Sem suporteNot Supported
LIKELIKE Sem suporteNot Supported Sem suporteNot Supported Tem suporteSupported Sem suporteNot Supported

A criptografia in-loco é compatível com as seguintes operações dentro do enclave:In-place encryption includes support for the following operations inside the enclave:

  • A criptografia inicial dos dados armazenados em uma coluna existente.Initial encryption of data stored in an existing column.

  • Criptografar novamente os dados existentes em uma coluna, por exemplo:Re-encrypting existing data in a column, for example:

    • Girar a chave de criptografia de coluna (criptografar novamente a coluna com uma nova chave).Rotating the column encryption key (re-encrypting the column with a new key).
    • Alterar o tipo de criptografia.Changing the encryption type.
  • Descriptografar dados armazenados em uma coluna criptografada (converter a coluna em uma coluna de texto não criptografado).Decrypting data stored in an encrypted column (converting the column into a plaintext column).

Para que a criptografia in-loco seja possível, a chave (ou chaves) de criptografia de coluna, envolvida nas operações criptográficas, precisa ser habilitada para enclave:For in-place encryption to be possible, the column encryption key (or keys), involved in the cryptographic operations, must be enclave-enabled:

  • Criptografia inicial: a chave de criptografia de coluna para a coluna que está sendo criptografada precisa ser habilitada para enclave.Initial encryption: the column encryption key for the column being encrypted must be enclave-enabled.
  • Nova criptografia: ambas as chave de criptografia de coluna atual e de destino (se forem diferentes da chave atual) precisam ser habilitadas para enclave.Re-encryption: both the current and the target column encryption key (if different than the current key) must be enclave-enabled.
  • Descriptografia: a chave de criptografia de coluna atual da coluna precisa ser habilitada para enclave.Decryption: the current column encryption key of the column must be enclave-enabled.

Índices em colunas habilitadas para enclave com criptografia aleatóriaIndexes on Enclave-enabled Columns using Randomized Encryption

É possível criar índices não clusterizados em colunas habilitadas para enclave usando criptografia aleatória para que as consultas avançadas sejam executadas com mais rapidez.You can create nonclustered indexes on enclave-enabled columns using randomized encryption to make rich queries run faster. Para garantir que um índice em uma coluna criptografada com criptografia aleatória não vaze dados confidenciais e, ao mesmo tempo, que seja útil para processamento de consultas dentro do enclave, os valores da chave na árvore B (estrutura de dados do índice) são criptografados e classificados com base nos respectivos valores de texto não criptografado.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. Quando o executor de consultas usa um índice em uma coluna criptografada para cálculos dentro do enclave no Mecanismo do SQL Server, ele pesquisa o índice para localizar valores específicos armazenados na coluna.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. Cada pesquisa pode envolver várias comparações.Each search may involve multiple comparisons. O executor de consultas delega cada comparação ao enclave que descriptografa um valor armazenado na coluna e o valor da chave criptografada do índice a ser comparado, realiza a comparação em texto não criptografado e retorna o resultado da comparação ao executor.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. Para obter informações gerais, não específicas do recurso Always Encrypted, sobre como a indexação funciona no SQL Server, confira Descrição de índices clusterizados e não clusterizados.For general information, not specific to Always Encrypted, on how indexing in SQL Server works, see Clustered and Nonclustered Indexes Described.

Como um índice em uma coluna habilitada para enclave com criptografia aleatória armazena os valores de chave de índice criptografados enquanto os valores são classificados com base em texto não criptografado, o Mecanismo do SQL Server tem que usar o enclave para todas as operações que envolvam a criação ou atualização de um índice, por exemplo: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:

  • Criar ou recriar um índice.Creating or rebuilding an index.
  • Inserir, atualizar ou excluir uma linha na tabela (contendo uma coluna indexada ou criptografada), que aciona a inserção e/ou remoção de uma chave de índice de/para o índice.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.
  • Executar comandos DBCC que envolvam a verificação da integridade dos índices, por exemplo, DBCC CHECKDB (Transact-SQL) ou 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).
  • Recuperação de banco de dados (por exemplo, quando o SQL Server falha e é reiniciado), caso o SQL Server precise desfazer qualquer alteração no índice (veja mais detalhes abaixo).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).

Todas as operações descritas acima exigem que o enclave tenha a chave de criptografia de coluna para a coluna indexada, para que ela possa descriptografar as chaves de índice.All the above operations require the enclave has the column encryption key for the indexed column, so that it can decrypt the index keys. Em geral, o enclave pode obter uma chave de criptografia de coluna de duas maneiras:In general, the enclave can obtain a column encryption key in one of two ways:

  • Diretamente do aplicativo cliente que invocou a operação no índice, conforme descrito na introdução acima.Directly from the client application that invoked the operation on the index, as described in the introduction above. Esse método exige que o aplicativo ou usuário tenha acesso à chave mestra da coluna e à chave de criptografia da coluna, que protegem a coluna indexada.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. O aplicativo precisa se conectar ao banco de dados com o Always Encrypted habilitado para a conexão.The application must connect to the database with Always Encrypted enabled for the connection.
  • No cache das chaves de criptografia de coluna.From the cache of column encryption keys. O enclave armazena as chaves usadas em consultas anteriores, no cache que está localizado dentro do enclave e, portanto, inacessível externamente.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. Quando um aplicativo aciona uma operação em um índice sem fornecer diretamente a chave de criptografia de coluna necessária, o enclave procura a chave no cache.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. Se encontrar a chave no cache, o enclave a usará na operação.If the enclave finds the key in the cache, it uses it for the operation. Esse método permite aos administradores de banco de dados gerenciar índices e realizar determinadas operações de limpeza de dados (por exemplo, remoção de linhas de uma tabela que contém um índice em uma coluna criptografada), sem ter acesso às chaves criptográficas ou aos dados do texto não criptografado.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. Esse método exige que o aplicativo se conecte ao banco de dados sem que o Always Encrypted esteja habilitado para a conexão.This method requires the application connects to the database without Always Encrypted enabled for the connection.

Ainda não há suporte para criação de índices em colunas que usam criptografia aleatória e que não são habilitadas para enclave.Creating indexes on columns that use randomized encryption and are not enclave-enabled remains unsupported.

Recuperação de banco de dadosDatabase Recovery

Quando uma instância do SQL Server falha, os respectivos bancos de dados podem ficar em um estado em que os arquivos de dados podem conter algumas modificações de transações incompletas.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. Quando a instância é iniciada, ela executa um processo chamado recuperação de banco de dados, que envolve a reversão de todas as transações incompletas encontradas no log de transações para garantir que a integridade do banco de dados seja preservada.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. Caso uma transação incompleta tenha feito alterações em um índice, essas alterações também precisam ser desfeitas.If an incomplete transaction made any changes to an index, those changes also need to be undone. Por exemplo, talvez seja necessário remover ou reinserir alguns valores de chave no índice.For example, some key values in the index may need to be removed or reinserted.

Importante

A Microsoft recomenda habilitar a ADR (Recuperação de Banco de dados Acelerada) no banco de dados, antes de criar o primeiro índice em uma coluna habilitada para enclave com criptografia aleatória.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.

Para desfazer uma alteração feita em um índice com o processo de recuperação de banco de dados tradicional (que segue o modelo de recuperação ARIES), o SQL Server precisa aguardar até que um aplicativo forneça a chave de criptografia da coluna para o enclave, o que pode levar muito tempo.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. A ADR reduz significativamente a quantidade de operações de desfazer que precisam ser adiadas devido a uma chave de criptografia de coluna que não está disponível no cache dentro do enclave.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. Consequentemente, esse recurso aumenta consideravelmente a disponibilidade do banco de dados, reduzindo a chance de uma nova transação ser bloqueada.Consequently, it substantially increases the database availability by minimizing a chance for a new transaction to get blocked. Com a ADR habilitada, o SQL Server ainda pode precisar de uma chave de criptografia de coluna para concluir a limpeza de versões de dados anteriores, mas ele realiza esse processo como uma tarefa em segundo plano que não afeta a disponibilidade do banco de dados ou as transações do usuário.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. No entanto, talvez você receba mensagens de erro no log de erros, indicando falhas nas operações de limpeza devido à ausência de uma chave de criptografia da coluna.You may, however, see error messages in the error log, indicating failed cleanup operations due to a missing column encryption key.

Índices em colunas habilitadas para enclave com criptografia determinísticaIndexes on Enclave-enabled Columns using Deterministic Encryption

Um índice em uma coluna que usa criptografia determinística é classificado com base em texto cifrado (não em texto não criptografado), independentemente de a coluna ser habilitada ou não para enclave.An index on a column using deterministic encryption are sorted based on ciphertext (not plaintext), regardless if the column is enclave-enabled or not.

Considerações sobre segurançaSecurity Considerations

As considerações a seguir sobre segurança se aplicam ao Always Encrypted com enclaves seguros.The following security considerations apply to Always Encrypted with secure enclaves.

  • A segurança dos dados dentro do enclave depende de um protocolo e serviço de atestado.The security of your data inside the enclave depends on an attestation protocol and an attestation service. Portanto, é necessário garantir que o serviço e as políticas de atestado, bem como a aplicação do serviço de atestado, sejam gerenciados por um administrador confiável.Therefore, you need to ensure the attestation service and attestation policies, the attestation service enforces, are managed by a trusted administrator. Além disso, os serviços de atestado normalmente têm suporte para diversas políticas e protocolos de atestado, alguns dos quais realizam uma verificação mínima do enclave e do respectivo ambiente, e são projetados para fins de testes e desenvolvimento.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. Siga rigorosamente as diretrizes específicas do serviço de atestado para garantir que você esteja usando as configurações e políticas recomendadas para suas implantações de produção.Closely follow the guidelines specific to your attestation service to ensure you are using the recommended configurations and policies for your production deployments.
  • Criptografar uma coluna usando criptografia aleatória com um CEK habilitado para enclave pode resultar no vazamento da ordem dos dados armazenados na coluna, pois essas colunas têm suporte para comparações de intervalo.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. Por exemplo, se uma coluna criptografada contendo salários de funcionários tiver um índice, um administrador de banco de dados mal-intencionado poderá verificar o índice para encontrar o maior valor de salário criptografado e identificar uma pessoa que recebe esse salário (supondo que o nome dela não esteja criptografado).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).
  • Se usar o Always Encrypted para proteger dados confidenciais contra o acesso não autorizado por administradores de bancos de dados, não compartilhe as chaves mestras da coluna ou as chaves de criptografia da coluna com os administradores de bancos de dados.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. Um administrador de banco de dados pode gerenciar índices em colunas criptografadas sem ter acesso direto às chaves, aproveitando o cache de chaves de criptografia da coluna dentro do enclave.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.

Considerações sobre grupos de disponibilidade e migração de banco de dadosConsiderations for Availability Groups and Database Migration

Ao configurar um grupo de disponibilidade Always On necessário para o suporte de consultas com enclaves, você precisa garantir que todas as instâncias do SQL Server que hospedam os bancos de dados no grupo de disponibilidade tenham suporte para o recurso Always Encrypted com enclaves seguros e que tenham um enclave configurado.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. Se o banco de dados primário for compatível com enclaves (mas não uma réplica secundária), qualquer consulta que tente usar a funcionalidade do Always Encrypted com enclaves seguros falhará.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.

Quando você restaura um arquivo de backup de um banco de dados que usa a funcionalidade do Always Encrypted com enclaves seguros em uma instância do SQL Server que não tem o enclave configurado, a operação de restauração será bem-sucedida e todas as funcionalidades que não dependem do enclave ficarão disponíveis.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. No entanto, todas as consultas posteriores que usam a funcionalidade de enclave falharão, e os índices nas colunas habilitadas para enclave que usam criptografia aleatória ficarão inválidos.However, any subsequent queries using the enclave functionality will fail, and indexes on enclave-enabled columns using randomized encryption will become invalid. O mesmo se aplica quando você anexa um banco de dados usando o Always Encrypted com enclaves seguros na instância que não têm o enclave configurado.The same applies when you attach a database using Always Encrypted with secure enclaves on the instance that doesn't have the enclave configured.

Caso seu banco de dados inclua índices em colunas habilitadas para enclave com criptografia aleatória, habilite a ADR (Recuperação de Banco de Dados Acelerada) no banco de dados, antes de criar um backup.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. A ADR garantirá que o banco de dados, inclusive os índices, fique disponível imediatamente após a restauração.ADR will ensure the database, including the indexes, is available immediately after you restore the database. Para saber mais, confira Recuperação de banco de dados.For more information, see Database Recovery.

Quando migrar um banco de dados usando um arquivo bacpac, descarte todas as colunas de índices habilitadas para enclave com criptografia aleatória antes de criar o arquivo 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.

Limitações conhecidasKnown Limitations

Enclaves seguros aprimoram a funcionalidade do Always Encrypted.Secure enclaves enhance the functionality of Always Encrypted. Agora, as seguintes funcionalidades são compatíveis com colunas habilitadas para enclave:The following capabilities are now supported for enclave-enabled columns:

  • Operações criptográficas in-loco.In-place cryptographic operations.
  • Correspondência de padrões (LIKE) e operadores de comparação em colunas criptografadas com criptografia aleatória.Pattern matching (LIKE) and comparison operators on column encrypted using randomized encryption.

    Observação

    As operações acima são compatíveis com colunas de cadeia de caracteres que usam ordenações com classificação binário2 (ordenações BIN2).The above operations are supported for character string columns that use collations with a binary2 sort order (BIN2 collations). Colunas de cadeia de caracteres que usam ordenações não BIN2 podem ser criptografadas com criptografia aleatória e chaves de criptografia de coluna habilitadas para enclave.Character string columns using non-BIN2 collations can be encrypted using randomized encryption and enclave-enabled column encryption keys. No entanto, a única nova funcionalidade habilitada para essas colunas é a criptografia no local.However, the only new functionality that is enabled for such columns is in-place encryption.

  • Criação de índices não clusterizados em colunas usando criptografia aleatória.Creating nonclustered indexes on columns using randomized encryption.

Todas as outras limitações (não solucionadas pelos aprimoramentos acima) descritas sobre o Always Encrypted (sem enclaves seguros), em Detalhes do Recurso, também se aplicam a esse recurso com enclaves seguros.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.

As seguintes limitações são específicas do Always Encrypted com enclaves seguros:The following limitations are specific to Always Encrypted with secure enclaves:

  • Não é possível criar índices clusterizados em colunas habilitadas para enclave com criptografia aleatória.Clustered indexes can't be created on enclave-enabled columns using randomized encryption.
  • Colunas habilitadas para enclave com criptografia aleatória não podem ser colunas de chave primária e não podem ser referenciadas por restrições de chaves estrangeiras nem por restrições de chaves exclusivas.Enclave-enabled columns using randomized encryption can't be primary key columns and cannot be referenced by foreign key constraints or unique key constraints.
  • Não há suporte para junções hash e junções mescladas em colunas habilitadas para enclave com criptografia aleatória.Hash joins and merged joins on enclave-enabled columns using randomized encryption are not supported. Há suporte apenas para junções de loops aninhados (com índices, quando disponíveis).Only nested loop joins (using indexes, if available) are supported.
  • Consultas com o operador LIKE ou um operador de comparação que inclui um parâmetro de consulta com um dos seguintes tipos de dados (que se tornam objetos grandes após a criptografia) ignoram índices e executam verificações de tabela.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] e nvarchar[n], se n for maior do que 3967.nchar[n] and nvarchar[n], if n is greater than 3967.
    • char[n], varchar[n], binary[n], varbinary[n], se n for maior do que 7935.char[n], varchar[n], binary[n], varbinary[n], if n is greater than 7935.
  • Operações criptográficas in-loco não podem ser combinadas com outras alterações de metadados de coluna, exceto as alterações de ordenação, na mesma página de código e nulidade.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. Por exemplo, não é possível criptografar, recriptografar ou descriptografar uma coluna E alterar um tipo de dados da coluna em uma única instrução Transact-SQL ALTER TABLE ou 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. É necessário usar duas instruções separadas.Use two separate statements.
  • Não há suporte para o uso de chaves habilitadas para enclave para colunas em tabelas na memória.Using enclave-enabled keys for columns in in-memory tables isn't supported.
  • Expressões que definem colunas computadas não podem executar cálculos em colunas habilitadas para enclave usando criptografia aleatória (mesmo que as computações forem comparações LIKE e de intervalo).Expressions defining computed columns cannot perform any computations on enclave-enabled columns using randomized encryption (even if the computations are LIKE and range comparisons)..
  • Os únicos repositórios de chaves compatíveis com o armazenamento de chaves mestras de coluna habilitadas para enclave são o Repositório de Certificados do Windows e o Azure Key Vault.The only supported key stores for storing enclave-enabled column master keys are Windows Certificate Store and Azure Key Vault.

As seguintes limitações se aplicam ao SQL Server 2019 (15.x)SQL Server 2019 (15.x), mas estão no roteiro para serem solucionadas:The following limitations apply to SQL Server 2019 (15.x)SQL Server 2019 (15.x), but are on the roadmap to be addressed:

  • Não há suporte para criação de estatísticas sobre colunas habilitadas para enclave com criptografia aleatória.Creating statistics for enclave-enabled columns using randomized encryption is not supported.
  • O único driver de cliente compatível com Always Encrypted com enclaves seguros é o Provedor de Dados do .NET Framework para SQL Server (ADO.NET) no .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. Não há suporte para ODBC/JDBC.ODBC/JDBC isn't supported.
  • A compatibilidade de ferramentas com o Always Encrypted com enclaves seguros está incompleta no momento.Tooling support for Always Encrypted with secure enclaves is currently incomplete. Especialmente:In particular:
    • Não há suporte para a importação/exportação de bancos de dados que contém chaves habilitadas para enclave.Import/exporting databases containing enclave-enabled keys is not supported.
    • Para disparar uma operação criptográfica in-loco por meio de uma instrução Transact-SQL ALTER TABLE, é necessário emitir a instrução usando uma janela de consulta no SSMS ou então, você pode escrever seu próprio programa que emite a instrução.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. O cmdlet Set-SqlColumnEncryption no módulo SqlServer PowerShell e o assistente de Always Encrypted no SQL Server Management Studio ainda não são compatíveis com a criptografia in-loco – atualmente, ambas as ferramentas movem os dados para fora do banco de dados para operações criptográficas, mesmo se as chaves de criptografia de coluna usadas para as operações forem habilitadas para enclave.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.
  • Não há suporte para comandos DBCC que verificam a integridade ou que atualizam índices.DBCC commands checking the integrity of indexes or updating indexes are not supported.
  • Criação de índices em colunas criptografadas, no momento da criação da tabela (por meio do recurso CREATE TABLE).Creating indexes on encrypted columns at the time of creating the table (via CREATE TABLE). Crie um índice separadamente em uma coluna criptografada, por meio do recurso CREATE INDEX.You need to create an index on an encrypted column separately via CREATE INDEX.

Próximas etapasNext steps