Always EncryptedAlways Encrypted

APLICA-SE A: simSQL Server simBanco de Dados SQL do Azure nãoAzure Synapse Analytics (SQL DW) nãoParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Always EncryptedAlways Encrypted

O Always Encrypted é um recurso criado para proteger dados confidenciais, como números de cartão de crédito ou de identificação nacional (por exemplo, números de previdência social dos EUA), armazenados em bancos de dados do Banco de dados SQL do AzureAzure SQL Database ou SQL ServerSQL Server.Always Encrypted is a feature designed to protect sensitive data, such as credit card numbers or national identification numbers (for example, U.S. social security numbers), stored in Banco de dados SQL do AzureAzure SQL Database or SQL ServerSQL Server databases. O Always Encrypted permite que os clientes criptografem os dados confidenciais em aplicativos de cliente e nunca revelem as chaves de criptografia para o Mecanismo de Banco de DadosDatabase Engine (Banco de Dados SQLSQL Database ou SQL ServerSQL Server).Always Encrypted allows clients to encrypt sensitive data inside client applications and never reveal the encryption keys to the Mecanismo de Banco de DadosDatabase Engine (Banco de Dados SQLSQL Database or SQL ServerSQL Server). Como resultado, o Always Encrypted fornece uma separação entre aqueles que detêm os dados e podem exibi-lo e aqueles que gerenciam os dados, mas que não devem ter acesso.As a result, Always Encrypted provides a separation between those who own the data and can view it, and those who manage the data but should have no access. Ao garantir que os administradores de banco de dados local, operadores de banco de dados em nuvem ou outros usuários não autorizados com privilégios elevados não possam acessar os dados criptografados, o Always Encrypted permite que os clientes armazenem dados confidenciais com segurança fora de seu controle direto.By ensuring on-premises database administrators, cloud database operators, or other high-privileged unauthorized users, can't access the encrypted data, Always Encrypted enables customers to confidently store sensitive data outside of their direct control. Isso permite às organizações armazenar seus dados no Azure para habilitar a delegação de administração de banco de dados local para terceiros ou para reduzir os requisitos de espaço livre de segurança para sua própria equipe de DBA.This allows organizations to store their data in Azure, and enable delegation of on-premises database administration to third parties, or to reduce security clearance requirements for their own DBA staff.

O Always Encrypted fornece recursos de computação confidencial, permitindo que o Mecanismo de Banco de DadosDatabase Engine processe algumas consultas em dados criptografados, preservando a confidencialidade dos dados e proporcionando os benefícios de segurança acima.Always Encrypted provides confidential computing capabilities by enabling the Mecanismo de Banco de DadosDatabase Engine to process some queries on encrypted data, while preserving the confidentiality of the data and providing the above security benefits. Em SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) e Banco de dados SQL do AzureAzure SQL Database, o Always Encrypted dá suporte à comparação de igualdade por meio de criptografia determinística.In SQL Server 2016 (13.x)SQL Server 2016 (13.x), SQL Server 2017 (14.x)SQL Server 2017 (14.x) and in Banco de dados SQL do AzureAzure SQL Database, Always Encrypted supports equality comparison via deterministic encryption. Confira Como selecionar criptografia determinística ou randomizada.See Selecting Deterministic or Randomized Encryption.

Observação

Em SQL Server 2019 (15.x)SQL Server 2019 (15.x), os enclaves seguros estendem substancialmente os recursos de computação confidencial do Always Encrypted com correspondência de padrões, outros operadores de comparação e criptografia in-loco.In SQL Server 2019 (15.x)SQL Server 2019 (15.x), secure enclaves substantially extend confidential computing capabilities of Always Encrypted with pattern matching, other comparison operators and in-place encryption. Veja Always Encrypted com enclaves seguros.See Always Encrypted with secure enclaves.

O Always Encrypted torna a criptografia transparente para os aplicativos.Always Encrypted makes encryption transparent to applications. Um driver habilitado para Sempre criptografado instalado no computador cliente realiza isso automaticamente criptografando e descriptografando dados confidenciais no aplicativo cliente.An Always Encrypted-enabled driver installed on the client computer achieves this by automatically encrypting and decrypting sensitive data in the client application. O driver criptografa as colunas de dados confidenciais antes de passar os dados para o Mecanismo de Banco de DadosDatabase Enginee reconfigura automaticamente as consultas para que a semântica do aplicativo seja preservada.The driver encrypts the data in sensitive columns before passing the data to the Mecanismo de Banco de DadosDatabase Engine, and automatically rewrites queries so that the semantics to the application are preserved. Da mesma forma, o driver descriptografa de modo transparente os dados armazenados em colunas de banco de dados criptografado que estão contidos nos resultados da consulta.Similarly, the driver transparently decrypts data, stored in encrypted database columns, contained in query results.

O Always Encrypted está disponível em todas as edições do Banco de dados SQL do AzureAzure SQL Database, começando com SQL Server 2016 (13.x)SQL Server 2016 (13.x) e todas as camadas de serviço do Banco de Dados SQLSQL Database.Always Encrypted is available in all editions of Banco de dados SQL do AzureAzure SQL Database, starting with SQL Server 2016 (13.x)SQL Server 2016 (13.x) and all service tiers of Banco de Dados SQLSQL Database. (Antes do SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, o Always Encrypted limitava-se à versão Enterprise Edition). Para conferir uma apresentação do Channel 9 que inclui o Sempre Criptografado, confira Keeping Sensitive Data Secure with Always Encrypted(Como manter os dados confidenciais seguros com o Sempre Criptografado).(Prior to SQL Server 2016 (13.x)SQL Server 2016 (13.x) SP1, Always Encrypted was limited to the Enterprise Edition.) For a Channel 9 presentation that includes Always Encrypted, see Keeping Sensitive Data Secure with Always Encrypted.

Cenários comunsTypical Scenarios

Cliente e dados locaisClient and data on-premises

Um cliente tem um aplicativo cliente e o SQL ServerSQL Server , ambos sendo executados localmente na empresa.A customer has a client application and SQL ServerSQL Server both running on-premises, at their business location. O cliente deseja contratar um fornecedor externo para administrar o SQL ServerSQL Server.The customer wants to hire an external vendor to administer SQL ServerSQL Server. Para proteger os dados confidenciais armazenados no SQL ServerSQL Server, o cliente usa o Always Encrypted para garantir a separação de tarefas entre os administradores de banco de dados e os administradores de aplicativos.In order to protect sensitive data stored in SQL ServerSQL Server, the customer uses Always Encrypted to ensure the separation of duties between database administrators and application administrators. O cliente armazena valores de texto não criptografado de chaves do Always Encrypted em um repositório de chaves confiável que o aplicativo cliente pode acessar.The customer stores plaintext values of Always Encrypted keys in a trusted key store, which the client application can access. Os administradores doSQL ServerSQL Server não têm acesso às chaves e, portanto, não são capazes de descriptografar dados confidenciais armazenados no SQL ServerSQL Server.SQL ServerSQL Server administrators have no access to the keys and, therefore, are unable to decrypt sensitive data stored in SQL ServerSQL Server.

Cliente local contendo dados no AzureClient on-premises with data in Azure

Um cliente tem um aplicativo local na empresa.A customer has an on-premises client application at their business location. O aplicativo opera com dados confidenciais armazenados em um banco de dados hospedado no Azure (Banco de Dados SQLSQL Database ou SQL ServerSQL Server em execução em uma máquina virtual no Microsoft Azure).The application operates on sensitive data stored in a database hosted in Azure (Banco de Dados SQLSQL Database or SQL ServerSQL Server running in a virtual machine on Microsoft Azure). O cliente usa o Always Encrypted e armazena as chaves do Always Encrypted em um repositório de chaves confiável hospedado localmente, a fim de garantir que os administradores de nuvem da MicrosoftMicrosoft não tenham acesso a dados confidenciais.The customer uses Always Encrypted and stores Always Encrypted keys in a trusted key store hosted on-premises, to ensure MicrosoftMicrosoft cloud administrators have no access to sensitive data.

Cliente e dados no AzureClient and Data in Azure

Um cliente tem um aplicativo cliente, hospedado no Microsoft Azure (por exemplo, em uma função de trabalho ou uma função web), que opera em dados confidenciais armazenados em um banco de dados hospedado no Azure (Banco de Dados SQL ou SQL Server em execução em uma máquina virtual no Microsoft Azure).A customer has a client application, hosted in Microsoft Azure (for example, in a worker role or a web role), which operates on sensitive data stored in a database hosted in Azure (SQL Database or SQL Server running in a virtual machine on Microsoft Azure). Embora o Always Encrypted não forneça isolamento completo dos dados dos administradores de nuvem, como ambos os dados e chaves ficam expostos para os administradores da nuvem da plataforma de hospedagem no nível do cliente, o cliente ainda se beneficia com a redução da área de superfície de ataque à segurança (os dados são Always Encrypted no banco de dados).Although Always Encrypted doesn't provide complete isolation of data from cloud administrators, as both the data and keys are exposed to cloud administrators of the platform hosting the client tier, the customer still benefits from reducing the security attack surface area (the data is always encrypted in the database).

Como funcionaHow it Works

Você pode configurar o Always Encrypted para colunas individuais do banco de dados contendo dados confidenciais.You can configure Always Encrypted for individual database columns containing your sensitive data. Ao configurar a criptografia para uma coluna, você pode especificar as informações do algoritmo de criptografia e chaves de criptografia usadas para proteger os dados na coluna.When setting up encryption for a column, you specify the information about the encryption algorithm and cryptographic keys used to protect the data in the column. O Always Encrypted usa dois tipos de chave: chaves de criptografia de coluna e chaves mestras de coluna.Always Encrypted uses two types of keys: column encryption keys and column master keys. Uma chave de criptografia de coluna é usada para criptografar dados em uma coluna criptografada.A column encryption key is used to encrypt data in an encrypted column. Uma chave mestra de coluna é uma chave de proteção de chaves que criptografa uma ou mais chaves de criptografia de coluna.A column master key is a key-protecting key that encrypts one or more column encryption keys.

O Mecanismo de Banco de Dados armazena a configuração de criptografia para cada coluna nos metadados do banco de dados.The Database Engine stores encryption configuration for each column in database metadata. Observe, no entanto, que o Mecanismo de Banco de Dados nunca armazena ou usa as chaves de qualquer tipo em texto não criptografado.Note, however, the Database Engine never stores or uses the keys of either type in plaintext. Ele apenas armazena os valores criptografados das chaves de criptografia de coluna e as informações sobre o local das chaves mestras de coluna, as quais são armazenadas em repositórios de chaves confiáveis externos, como o Cofre de Chaves do Azure, o Repositório de Certificados do Windows em um computador cliente ou um módulo de segurança de hardware.It only stores encrypted values of column encryption keys and the information about the location of column master keys, which are stored in external trusted key stores, such as Azure Key Vault, Windows Certificate Store on a client machine, or a hardware security module.

Para acessar dados armazenados em uma coluna criptografada em texto não criptografado, um aplicativo deve usar um driver de cliente habilitado para Always Encrypted.To access data stored in an encrypted column in plaintext, an application must use an Always Encrypted enabled client driver. Quando um aplicativo emite uma consulta parametrizada, o driver colabora de modo transparente com o Mecanismo de Banco de Dados para determinar quais parâmetros de destino de colunas criptografadas e, portanto, devem ser criptografados.When an application issues a parameterized query, the driver transparently collaborates with the Database Engine to determine which parameters target encrypted columns and, thus, should be encrypted. Para cada parâmetro que precisa ser criptografado, o driver obtém as informações sobre o algoritmo de criptografia e o valor criptografado da chave de criptografia de coluna para a coluna, as metas de parâmetro, bem como o local da chave mestra de coluna correspondente.For each parameter that needs to be encrypted, the driver obtains the information about the encryption algorithm and the encrypted value of the column encryption key for the column, the parameter targets, as well as the location of its corresponding column master key.

Em seguida, o driver contata o repositório de chaves que contém a chave mestra de coluna para descriptografar o valor da chave de criptografia de coluna criptografada e usa a chave de criptografia da coluna de texto não criptografado para criptografar o parâmetro.Next, the driver contacts the key store, containing the column master key, in order to decrypt the encrypted column encryption key value and then, it uses the plaintext column encryption key to encrypt the parameter. A chave de criptografia de coluna de texto não criptografado resultante é armazenado em cache para reduzir o número de idas e voltas para o repositório de chaves em usos subsequentes da mesma chave de criptografia de coluna.The resultant plaintext column encryption key is cached to reduce the number of round trips to the key store on subsequent uses of the same column encryption key. O driver substitui os valores de texto não criptografado dos parâmetros de direcionamento colunas criptografadas com seus valores criptografados e envia a consulta para o servidor para processamento.The driver substitutes the plaintext values of the parameters targeting encrypted columns with their encrypted values, and it sends the query to the server for processing.

O servidor calcula o conjunto de resultados e, para as colunas criptografadas incluídas no conjunto de resultados, o driver anexa os metadados de criptografia da coluna, incluindo as informações sobre o algoritmo de criptografia e as chaves correspondentes.The server computes the result set, and for any encrypted columns included in the result set, the driver attaches the encryption metadata for the column, including the information about the encryption algorithm and the corresponding keys. O driver primeiro tentará encontrar a chave de criptografia da coluna de texto não criptografado no cache local e fará apenas uma rodada para a chave mestra de coluna se não for possível encontrar a chave no cache.The driver first tries to find the plaintext column encryption key in the local cache, and only makes a round to the column master key if it can't find the key in the cache. Em seguida, o driver descriptografa os resultados e retorna valores de texto não criptografado para o aplicativo.Next, the driver decrypts the results and returns plaintext values to the application.

Um driver cliente interage com um repositório de chaves que contém uma chave mestra de coluna usando um provedor de repositório de chaves mestras de coluna, que é um componente de software do cliente que encapsula um repositório de chaves que contém a chave mestra de coluna.A client driver interacts with a key store, containing a column master key, using a column master key store provider, which is a client-side software component that encapsulates a key store containing the column master key. Os provedores para tipos comuns de repositório de chaves estão disponíveis em bibliotecas de drivers do lado do cliente da Microsoft ou como um download autônomo.Providers for common types of key stores are available in client-side driver libraries from Microsoft or as standalone downloads. Você também pode implementar seu próprio provedor.You can also implement your own provider. Recursos Always Encrypted, incluindo provedores de repositório de chaves mestras de coluna internas, variam de acordo com uma biblioteca de drivers e sua versão.Always Encrypted capabilities, including built-in column master key store providers vary by a driver library and its version.

Para obter detalhes sobre como desenvolver aplicativos usando Always Encrypted com drivers cliente específicos, confira Desenvolver aplicativos usando Always Encrypted.For details of how to develop applications using Always Encrypted with particular client drivers, see Develop applications using Always Encrypted.

RemarksRemarks

A descriptografia ocorre por meio do cliente.Decryption occurs via the client. Isso significa que algumas ações que ocorrem somente no servidor não funcionarão ao usar Always Encrypted.This means that some actions that occur only server-side won't work when using Always Encrypted.

Aqui está um exemplo de uma atualização que tenta mover dados de uma coluna criptografada para uma coluna não criptografada sem retornar um conjunto de resultados para o cliente:Here's an example of an update that attempts to move data from an encrypted column to an unencrypted column without returning a result set to the client:

update dbo.Patients set testssn = SSN

Se o SSN for uma coluna criptografada usando Always Encrypted, a instrução de atualização acima falhará com um erro semelhante a:If SSN is a column encrypted using Always Encrypted, the above update statement will fail with an error similar to:

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

Para atualizar com êxito a coluna, faça o seguinte:To successfully update the column, do the following:

  1. SELECIONE os dados fora da coluna SSN e armazene-os como um conjunto de resultados no aplicativo.SELECT the data out of the SSN column, and store it as a result set in the application. Isso permitirá que o aplicativo (driver do cliente) descriptografe a coluna.This will allow for the application (client driver) to decrypt the column.
  2. INSIRA os dados do conjunto de resultados no SQL Server.INSERT the data from the result set into SQL Server.

Importante

Nesse cenário, os dados serão descriptografados quando enviados de volta para o servidor porque a coluna de destino é um varchar regular que não aceita dados criptografados.In this scenario, the data will be unencrypted when sent back to the server because the destination column is a regular varchar that does not accept encrypted data.

Seleção de criptografia determinística ou aleatóriaSelecting Deterministic or Randomized Encryption

O Mecanismo de Banco de dados nunca opera em dados de texto não criptografado armazenados em colunas criptografadas, mas ela ainda dá suporte a algumas consultas em dados criptografados, dependendo do tipo de criptografia para a coluna.The Database Engine never operates on plaintext data stored in encrypted columns, but it still supports some queries on encrypted data, depending on the encryption type for the column. O Sempre Criptografado dá suporte a dois tipos de criptografia: criptografia aleatória e criptografia determinística.Always Encrypted supports two types of encryption: randomized encryption and deterministic encryption.

  • A criptografia determinística sempre gera o mesmo valor criptografado para qualquer valor de texto sem formatação.Deterministic encryption always generates the same encrypted value for any given plain text value. Usar a criptografia determinística proporciona pesquisas de ponto, junções de igualdade, agrupamento e indexação em colunas criptografadas.Using deterministic encryption allows point lookups, equality joins, grouping and indexing on encrypted columns. No entanto, ela também pode permitir que usuários não autorizados estimem informações sobre os valores criptografados examinando padrões na coluna criptografada, especialmente se há um conjunto pequeno de valores criptografados possíveis, como Verdadeiro/Falso ou região Norte/Sul/Leste/Oeste.However, it may also allow unauthorized users to guess information about encrypted values by examining patterns in the encrypted column, especially if there's a small set of possible encrypted values, such as True/False, or North/South/East/West region. A criptografia determinística deve usar uma ordenação de colunas com uma ordem de classificação binary2 para as colunas de caracteres.Deterministic encryption must use a column collation with a binary2 sort order for character columns.

  • A criptografia aleatória usa um método que criptografa os dados de uma maneira menos previsível.Randomized encryption uses a method that encrypts data in a less predictable manner. A criptografia aleatória é mais segura, mas impede o uso de pesquisas, agrupamento, indexação e junção em colunas criptografadas.Randomized encryption is more secure, but prevents searching, grouping, indexing, and joining on encrypted columns.

Use a criptografia determinística para colunas que serão usadas como parâmetros de pesquisa ou de agrupamento.Use deterministic encryption for columns that will be used as search or grouping parameters. Por exemplo, um número de ID do governo.For example, a government ID number. Use a criptografia aleatória para dados como comentários de investigação confidencial, que não estão agrupados com outros registros e não são usados para unir tabelas.Use randomized encryption for data such as confidential investigation comments, which aren't grouped with other records and aren't used to join tables. Para obter detalhes sobre os algoritmos de criptografia Always Encrypted, confira Criptografia Always Encrypted.For details on Always Encrypted cryptographic algorithms, see Always Encrypted cryptography.

Configuração Always EncryptedConfiguring Always Encrypted

A configuração inicial do Always Encrypted em um banco de dados envolve a geração de chaves Always Encrypted, criação de metadados de chave, configurando as propriedades de criptografia de colunas do banco de dados selecionado e/ou criptografar dados que possam existir em colunas que precisam ser criptografados.The initial setup of Always Encrypted in a database involves generating Always Encrypted keys, creating key metadata, configuring encryption properties of selected database columns, and/or encrypting data that may already exist in columns that need to be encrypted. Observe que algumas dessas tarefas não têm suporte no Transact-SQL e exigem o uso de ferramentas de cliente.Please note that some of these tasks are not supported in Transact-SQL and require the use of client-side tools. Como chaves e dados confidenciais protegidos Always Encrypted nunca são reveladas em texto não criptografado para o servidor, o Mecanismo de Banco de Dados não pode ser envolvidos no provisionamento de chave e na execução de operações de criptografia ou descriptografia de dados.As Always Encrypted keys and protected sensitive data are never revealed in plaintext to the server, the Database Engine can't be involved in key provisioning and perform data encryption or decryption operations. Você pode usar o SQL Server Management Studio ou o PowerShell para realizar essas tarefas.You can use SQL Server Management Studio or PowerShell to accomplish such tasks.

TarefaTask SSMSSSMS PowerShellPowerShell T-SQLT-SQL
Provisionamento de chaves mestras de coluna, chaves de criptografia de coluna e chaves de criptografia de coluna criptografada com suas chaves mestras de coluna correspondentes.Provisioning column master keys, column encryption keys and encrypted column encryption keys with their corresponding column master keys. SimYes SimYes NãoNo
Criação de metadados de chave no banco de dados.Creating key metadata in the database. SimYes SimYes SimYes
Criando novas tabelas com colunas criptografadasCreating new tables with encrypted columns SimYes SimYes SimYes
Criptografar os dados existentes nas colunas do banco de dados selecionadoEncrypting existing data in selected database columns SimYes SimYes NãoNo

Observação

O Always Encrypted com enclaves seguros, introduzido no SQL Server 2019 (15.x)SQL Server 2019 (15.x), dá suporte à criptografia de dados existentes usando o Trasact-SQL.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), does support encrypting existing data using Trasact-SQL. Ele também elimina a necessidade de mover os dados para fora dos dados para operações criptográficas.It also eliminates the need to move the data outside of the data for cryptographic operations.

Observação

Lembre-se de executar as ferramentas de provisionamento de chaves ou de criptografia de dados em um ambiente seguro e em um computador diferente daquele que hospeda o banco de dados.Make sure you run key provisioning or data encryption tools in a secure environment, on a computer that is different from the computer hosting your database. Caso contrário, dados confidenciais ou as chaves podem vazar no ambiente de servidor, reduzindo os benefícios de usar o Always Encrypted.Otherwise, sensitive data or the keys could leak to the server environment, which would reduce the benefits of the using Always Encrypted.

Para obter detalhes sobre a configuração Always Encrypted, consulte:For details on configuring Always Encrypted see:

Introdução ao Sempre CriptografadoGetting Started with Always Encrypted

Use o Assistente do Always Encrypted para iniciar rapidamente o uso do Always Encrypted.Use the Always Encrypted Wizard to quickly start using Always Encrypted. O assistente provisionará as chaves necessárias e configurará a criptografia para colunas selecionadas.The wizard will provision the required keys and configure encryption for selected columns. Se as colunas para as quais você está definindo a criptografia já contêm alguns dados, o assistente as criptografa.If the columns you're setting encryption for already contain some data, the wizard will encrypt the data. O exemplo a seguir demonstra o processo de criptografia de uma coluna.The following example demonstrates the process for encrypting a column.

Observação

Para obter um vídeo que inclui o uso do assistente, confira Introdução ao Always Encrypted com SSMS.For a video that includes using the wizard, see Getting Started with Always Encrypted with SSMS.

  1. Conecte a um banco de dados existente que contém as tabelas com as colunas que você deseja criptografar usando o Pesquisador de Objetos do Management Studio ou crie um novo banco de dados, crie uma ou mais tabelas com colunas para criptografar e conecte-se a elas.Connect to an existing database that contains tables with columns you wish to encrypt using the Object Explorer of Management Studio, or create a new database, create one or more tables with columns to encrypt, and connect to it.
  2. Clique com o botão direito do mouse no banco de dados, aponte para Tarefas e clique em Criptografar Colunas para abrir o Assistente do Always Encrypted.Right-click your database, point to Tasks, and then click Encrypt Columns to open the Always Encrypted Wizard.
  3. Examine a página Introdução e, em seguida, clique em Avançar.Review the Introduction page, and then click Next.
  4. Na página Seleção de Coluna , expanda as tabelas e selecione as colunas que você deseja criptografar.On the Column Selection page, expand the tables, and select the columns that you want to encrypt.
  5. Para cada coluna selecionada para criptografia, defina o Tipo de Criptografia como Determinística ou Aleatória.For each column selected for encryption, set the Encryption Type to either Deterministic or Randomized.
  6. Para cada coluna selecionada para criptografia, selecione uma Chave de Criptografia.For each column selected for encryption, select an Encryption Key. Se você ainda não criou nenhuma chave de criptografia para esse banco de dados, selecione a opção padrão de uma nova chave gerada automaticamente e clique em Avançar.If you have not previously created any encryption keys for this database, select the default choice of a new autogenerated key, and then click Next.
  7. Na página Configuração da Chave Mestra , selecione um local para armazenar a nova chave e uma fonte de chave mestra e clique em Avançar.On the Master Key Configuration page, select a location to store the new key, and select a master key source, and then click Next.
  8. Na página Validação , escolha se deseja executar o script imediatamente ou criar um script do PowerShell e, em seguida, clique em Avançar.On the Validation page, choose whether to run the script immediately or create a PowerShell script, and then click Next.
  9. Na página Resumo, examine as opções que você selecionou e clique em Concluir.On the Summary page, review the options you've selected, and then click Finish. Feche o assistente após a conclusão.Close the wizard when completed.

Detalhes do recursoFeature Details

  • As consultas podem executar uma comparação de igualdade em colunas criptografadas usando a criptografia determinística, mas nenhuma outra operação (por exemplo, maior/menor que, correspondência de padrões usando o operador LIKE ou operações aritméticas).Queries can perform equality comparison on columns encrypted using deterministic encryption, but no other operations (for example, greater/less than, pattern matching using the LIKE operator, or arithmetical operations).

  • Consultas em colunas criptografadas usando a criptografia aleatória não podem executar operações em qualquer uma dessas colunas.Queries on columns encrypted by using randomized encryption can't perform operations on any of those columns. Não há suporte para a indexação de colunas criptografadas usando a criptografia aleatória.Indexing columns encrypted using randomized encryption isn't supported.

Observação

Always Encrypted com enclaves seguros, apresentado em SQL Server 2019 (15.x)SQL Server 2019 (15.x), aborda a limitação acima, permitindo a correspondência de padrões, operadores de comparação e indexação em colunas usando criptografia aleatória.Always Encrypted with secure enclaves, introduced in SQL Server 2019 (15.x)SQL Server 2019 (15.x), addresses the above limitation by enabling pattern matching, comparison operators and indexing on columns using randomized encryption.

  • Uma chave de criptografia de coluna pode ter até dois valores criptografados diferentes, cada um deles criptografado com uma chave mestra de coluna diferente.A column encryption key can have up to two different encrypted values, each encrypted with a different column master key. Isso facilita a rotação da chave mestra de coluna.This facilitates column master key rotation.

  • A criptografia determinística exige que uma coluna tenha uma das ordenações binary2.Deterministic encryption requires a column to have one of the binary2 collations.

  • Depois de alterar a definição de um objeto criptografado, execute sp_refresh_parameter_encryption para atualizar os metadados Always Encrypted para o objeto.After changing the definition of an encrypted object, execute sp_refresh_parameter_encryption to update the Always Encrypted metadata for the object.

Não há suporte para o Always Encrypted para as colunas com as características abaixo.Always Encrypted isn't supported for the columns with the below characteristics. Por exemplo, se alguma das condições a seguir se aplicar à coluna, a cláusula ENCRYPTED WITH não poderá ser usada em CREATE TABLE/ALTER TABLE para uma coluna:For example, if any of the following conditions apply to the column, the ENCRYPTED WITH clause can't be used in CREATE TABLE/ALTER TABLE for a column:

  • Colunas que usam um dos seguintes tipos de dados: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, tipos definidos pelo usuário.Columns using one of the following data types: xml, timestamp/rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user defined-types.
  • Colunas FILESTREAMFILESTREAM columns
  • Colunas com a propriedade IDENTITY.Columns with the IDENTITY property.
  • Colunas com propriedade ROWGUIDCOL.Columns with ROWGUIDCOL property.
  • Colunas de cadeia de caracteres (varchar, char etc.) com ordenações não bin2.String (varchar, char, etc.) columns with non-bin2 collations.
  • Colunas que são chaves para índices não clusterizados usando uma coluna criptografada de forma aleatória como uma coluna de chave (colunas criptografadas de forma determinística são permitidas).Columns that are keys for nonclustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Colunas que são chaves para índices clusterizados usando uma coluna criptografada de forma aleatória como uma coluna de chave (colunas criptografadas de forma determinística são permitidas).Columns that are keys for clustered indices using a randomized encrypted column as a key column (deterministic encrypted columns are fine).
  • Colunas que são chaves para índices de texto completo contendo colunas criptografadas, aleatórias e determinísticas.Columns that are keys for fulltext indices containing encrypted columns both randomized and deterministic.
  • Colunas computadas.Computed columns.
  • Colunas referenciadas por colunas computadas (quando a expressão realiza operações sem suporte para o Always Encrypted).Columns referenced by computed columns (when the expression does unsupported operations for Always Encrypted).
  • Conjunto de colunas esparsas.Sparse column set.
  • Colunas referenciadas por estatísticas.Columns that are referenced by statistics.
  • Colunas que usam o tipo de alias.Columns using alias type.
  • Colunas de particionamento.Partitioning columns.
  • Colunas com restrições padrão.Columns with default constraints.
  • Colunas referenciadas por restrições exclusivas ao usar a criptografia aleatória (há suporte para a criptografia determinística).Columns referenced by unique constraints when using randomized encryption (deterministic encryption is supported).
  • Colunas de chave primária ao usar a criptografia aleatória (há suporte para a criptografia determinística).Primary key columns when using randomized encryption (deterministic encryption is supported).
  • Fazer referência a colunas em restrições de chave estrangeira ao usar a criptografia aleatória (ou ao usar a criptografia determinística) se as colunas referenciadas e de referência usarem algoritmos ou chaves diferentes.Referencing columns in foreign key constraints when using randomized encryption or when using deterministic encryption, if the referenced and referencing columns use different keys or algorithms.
  • Colunas referenciadas por restrições de verificação.Columns referenced by check constraints.
  • Colunas em tabelas que usam a captura de dados de alterações.Columns in tables that use change data capture.
  • Colunas de chave primária em tabelas com controle de alterações.Primary key columns on tables that have change tracking.
  • Colunas mascaradas (usando a Máscara de Dados Dinâmicos).Columns that are masked (using Dynamic Data Masking).
  • Colunas em tabelas Stretch Database.Columns in Stretch Database tables. (Tabelas com colunas criptografadas com o Sempre Criptografado podem ser habilitadas para Stretch.)(Tables with columns encrypted with Always Encrypted can be enabled for Stretch.)
  • Colunas em tabelas externas (PolyBase) (observação: há suporte para o uso de tabelas externas e tabelas com colunas criptografadas na mesma consulta).Columns in external (PolyBase) tables (note: using external tables and tables with encrypted columns in the same query is supported).
  • Não há suporte para parâmetros com valor de tabela com direcionamento a colunas criptografadas.Table-valued parameters targeting encrypted columns aren't supported.

As cláusulas a seguir não podem ser usadas para colunas criptografadas:The following clauses can't be used for encrypted columns:

  • FOR XML
  • FOR JSON PATH

Os recursos a seguir não funcionam em colunas criptografadas:The following features don't work on encrypted columns:

  • Replicação transacional ou de mesclagemTransactional or merge replication
  • Consultas distribuídas (servidores vinculados, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))Distributed queries (linked servers, OPENROWSET(T-SQL), OPENDATASOURCE(T-SQL))

Requisitos da ferramentaTool Requirements

  • O SQL Server Management Studio versão 18 ou superior é recomendável para executar consultas que descriptografam os resultados recuperados de colunas criptografadas ou inserem, atualizam ou filtram colunas criptografadas.SQL Server Management Studio version 18 or higher is recommended to run queries that decrypt the results retrieved from encrypted columns or insert, update, or filter encrypted columns.
  • Requer o sqlcmd versão 13.1 ou superior, que está disponível no Centro de Download.Requires sqlcmd version 13.1 or higher, which is available from the Download Center.

Permissões de banco de dadosDatabase Permissions

Há quatro permissões para Always Encrypted:There are four permissions for Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY (Necessário para criar e excluir uma chave mestra de coluna).ALTER ANY COLUMN MASTER KEY (Required to create and delete a column master key.)

  • ALTER ANY COLUMN ENCRYPTION KEY (Necessário para criar e excluir uma chave de criptografia de coluna).ALTER ANY COLUMN ENCRYPTION KEY (Required to create and delete a column encryption key.)

  • VIEW ANY COLUMN MASTER KEY DEFINITION (Necessário para acessar e ler os metadados das chaves mestras de coluna para gerenciar as colunas criptografadas de chaves ou consultas).VIEW ANY COLUMN MASTER KEY DEFINITION (Required to access and read the metadata of the column master keys to manage keys or query encrypted columns.)

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Necessário para acessar e ler os metadados da chave de criptografia de coluna para gerenciar as colunas criptografadas de chaves ou consultas).VIEW ANY COLUMN ENCRYPTION KEY DEFINITION (Required to access and read the metadata of the column encryption key to manage keys or query encrypted columns.)

A tabela a seguir resume as permissões necessárias para ações comuns.The following table summarizes the permissions required for common actions.

CenárioScenario ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Gerenciamento de chaves (criar/alterar/analisar metadados de chave no banco de dados)Key management (creating/changing/reviewing key metadata in the database) XX XX XX XX
Consultando colunas criptografadasQuerying encrypted columns XX XX

Observações importantes;Important notes:

  • As permissões se aplicam às ações que usam Transact-SQLTransact-SQL, Management StudioManagement Studio (caixas de diálogo e assistente) ou o PowerShell.The permissions apply to actions using Transact-SQLTransact-SQL, Management StudioManagement Studio (dialog boxes and wizard), or PowerShell.

  • As duas permissões VIEW são necessárias ao selecionar colunas criptografadas, mesmo se o usuário não tem permissão para descriptografar as colunas.The two VIEW permissions are required when selecting encrypted columns, even if the user doesn't have permission to decrypt the columns.

  • No SQL ServerSQL Server, ambas as permissões VIEW são concedidas por padrão para a função de banco de dados fixa public .In SQL ServerSQL Server, both VIEW permissions are granted by default to the public fixed database role. Um administrador de banco de dados poderá revogar (ou negar) as permissões VIEW para a função public e conceder para funções específicas ou usuários para implementar o controle mais restrito.A database administrator may choose to revoke (or deny) the VIEW permissions to the public role and grant them to specific roles or users to implement more restricted control.

  • No Banco de Dados SQLSQL Database, as permissões VIEW não são concedidas por padrão para a função de banco de dados fixa public.In Banco de Dados SQLSQL Database, the VIEW permissions aren't granted by default to the public fixed database role. Isso permite que determinadas ferramentas existentes herdadas (usando versões anteriores do DacFx) funcionem corretamente.This enables certain existing, legacy tools (using older versions of DacFx) to work properly. Consequentemente, para trabalhar com colunas criptografadas (mesmo se não descriptografá-los) um administrador de banco de dados deve conceder explicitamente as duas permissões VIEW .Consequently, to work with encrypted columns (even if not decrypting them) a database administrator must explicitly grant the two VIEW permissions.

ExemploExample

O Transact-SQLTransact-SQL a seguir cria metadados de chave mestra de coluna, metadados de chave de criptografia de coluna e uma tabela com colunas criptografadas.The following Transact-SQLTransact-SQL creates column master key metadata, column encryption key metadata, and a table with encrypted columns. Para informações sobre como criar chaves, referenciadas nos metadados, consulte:For information how to create the keys, referenced in the metadata, see:

CREATE COLUMN MASTER KEY MyCMK  
WITH (  
     KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',   
     KEY_PATH = 'Current User/Personal/f2260f28d909d21c642a3d8e0b45a830e79a1420'  
   );  
---------------------------------------------  
CREATE COLUMN ENCRYPTION KEY MyCEK   
WITH VALUES  
(  
    COLUMN_MASTER_KEY = MyCMK,   
    ALGORITHM = 'RSA_OAEP',   
    ENCRYPTED_VALUE = 0x01700000016C006F00630061006C006D0061006300680069006E0065002F006D0079002F003200660061006600640038003100320031003400340034006500620031006100320065003000360039003300340038006100350064003400300032003300380065006600620063006300610031006300284FC4316518CF3328A6D9304F65DD2CE387B79D95D077B4156E9ED8683FC0E09FA848275C685373228762B02DF2522AFF6D661782607B4A2275F2F922A5324B392C9D498E4ECFC61B79F0553EE8FB2E5A8635C4DBC0224D5A7F1B136C182DCDE32A00451F1A7AC6B4492067FD0FAC7D3D6F4AB7FC0E86614455DBB2AB37013E0A5B8B5089B180CA36D8B06CDB15E95A7D06E25AACB645D42C85B0B7EA2962BD3080B9A7CDB805C6279FE7DD6941E7EA4C2139E0D4101D8D7891076E70D433A214E82D9030CF1F40C503103075DEEB3D64537D15D244F503C2750CF940B71967F51095BFA51A85D2F764C78704CAB6F015EA87753355367C5C9F66E465C0C66BADEDFDF76FB7E5C21A0D89A2FCCA8595471F8918B1387E055FA0B816E74201CD5C50129D29C015895CD073925B6EA87CAF4A4FAF018C06A3856F5DFB724F42807543F777D82B809232B465D983E6F19DFB572BEA7B61C50154605452A891190FB5A0C4E464862CF5EFAD5E7D91F7D65AA1A78F688E69A1EB098AB42E95C674E234173CD7E0925541AD5AE7CED9A3D12FDFE6EB8EA4F8AAD2629D4F5A18BA3DDCC9CF7F352A892D4BEBDC4A1303F9C683DACD51A237E34B045EBE579A381E26B40DCFBF49EFFA6F65D17F37C6DBA54AA99A65D5573D4EB5BA038E024910A4D36B79A1D4E3C70349DADFF08FD8B4DEE77FDB57F01CB276ED5E676F1EC973154F86  
);  
---------------------------------------------  
CREATE TABLE Customers (  
    CustName nvarchar(60)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = RANDOMIZED,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    SSN varchar(11)   
        COLLATE  Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,  
        ENCRYPTION_TYPE = DETERMINISTIC ,  
        ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'),   
    Age int NULL  
);  
GO  
  

Consulte TambémSee Also