Always Encrypted

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

Diagram of Always Encrypted.

O Always Encrypted é um recurso criado para proteger dados confidenciais, como números de cartão de crédito ou números de identificação nacional/regional (por exemplo, números do seguro social dos EUA), armazenados no banco de dados SQL do Azure, na Instância Gerenciada de SQL do Azure ou nos bancos de dados SQL Server. O Always Encrypted permite que clientes criptografem dados confidenciais dentro de aplicativos cliente e nunca revelem as chaves de criptografia ao mecanismo de banco de dados. Isso diferencia aqueles que possuem os dados e podem visualizá-los e aqueles que gerenciam os dados, mas não devem ter acesso: administradores de banco de dados locais, operadores de banco de dados em nuvem ou outros usuários não autorizados de alto privilégio. Como resultado, com o Always Encrypted, os clientes podem armazenar seus dados confidenciais na nuvem com confiança e reduzir a probabilidade de roubo de dados por pessoas mal-intencionadas.

O Always Encrypted pode ser configurado para dar suporte a consultas confidenciais limitadas em dados criptografados, as consultas que envolvem comparações de igualdade. Por exemplo, pesquisas de ponto ou junções de igualdade. Essas consultas aproveitam a criptografia determinística.

Observação

Os enclaves seguros estendem os recursos de computação confidencial do Always Encrypted com correspondência de padrões, outros operadores de comparação e criptografia in-loco. Para obter mais informações, consulte Always Encrypted com enclaves seguros.

O Always Encrypted torna a criptografia transparente para os aplicativos. Um driver habilitado para Sempre criptografado instalado no computador cliente realiza isso automaticamente criptografando e descriptografando dados confidenciais no aplicativo cliente. O driver criptografa as colunas de dados confidenciais antes de passar os dados para o Mecanismo de Banco de Dadose reconfigura automaticamente as consultas para que a semântica do aplicativo seja preservada. Da mesma forma, o driver descriptografa os dados de maneira transparente, armazenados em colunas de banco de dados criptografadas, contidas nos resultados da consulta.

Configurar Always Encrypted

Esta seção traz uma visão geral da configuração do Always Encrypted. Para obter detalhes e uma introdução, veja Tutorial: Introdução ao Always Encrypted.

Para configurar o Always Encrypted no banco de dados, é necessário:

  1. Provisionar chaves criptográficas para proteger seus dados. O Always Encrypted usa dois tipos de chaves:

    • Chaves de criptografia de coluna.
    • Chaves mestras de coluna.

    Uma chave de criptografia de coluna é usada para criptografar dados em uma coluna criptografada. Uma chave mestra de coluna é uma chave de proteção de chaves que criptografa uma ou mais chaves de criptografia de coluna.

    É necessário armazenar chaves mestras de coluna em um repositório de chave confiável fora do sistema de banco de dados, como o Azure Key Vault, o repositório de certificados do Windows ou um módulo de segurança de hardware.

    Depois, é necessário provisionar chaves de criptografia de coluna e criptografar cada uma delas com uma chave mestra de coluna.

    Por fim, é necessário armazenar os metadados sobre as chaves no banco de dados.

    • Os metadados da chave mestra de coluna capturam a localização da chave mestra da coluna.
    • Os metadados da chave de criptografia de coluna contêm o valor criptografado da chave de criptografia de coluna. O mecanismo de banco de dados nunca armazena ou usa as chaves de qualquer tipo em texto não criptografado.

    Veja mais informações sobre as chaves do Always Encrypted em Visão geral do gerenciamento de chaves do Always Encrypted

  2. Configure a criptografia para colunas de banco de dados selecionadas que contenham os dados confidenciais a serem protegidos. Isso pode envolver criar novas tabelas com colunas criptografadas ou criptografar colunas de banco de dados e dados já existentes. Ao configurar a criptografia para uma coluna, você pode especificar as informações de um algoritmo de criptografia, de uma chave de criptografia de coluna para proteger os dados da coluna e um tipo de criptografia. O Always Encrypted dá suporte a dois tipos de criptografia:

    • A criptografia determinística sempre gera o mesmo valor criptografado para o valor de texto não criptografado fornecido. Usar a criptografia determinística proporciona pesquisas de ponto, junções de igualdade, agrupamento e indexação em colunas criptografadas. 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.

    • Criptografia aleatória usa um método que criptografa os dados de uma maneira menos previsível. A criptografia aleatória é mais segura, mas impede o uso de pesquisas, agrupamento, indexação e junção em colunas criptografadas.

    Use a criptografia determinística para colunas que serão usadas como parâmetros de pesquisa ou de agrupamento. Por exemplo, um número de ID do governo. 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.

Para obter detalhes sobre os algoritmos de criptografia Always Encrypted, confira Criptografia Always Encrypted.

Você pode executar as etapas acima usando ferramentas SQL:

Para garantir que chaves e dados confidenciais protegidos do Always Encrypted nunca são revelados em texto não criptografado para o ambiente de banco de dados, o mecanismo de banco de dados não pode ser envolvido no provisionamento de chave e nas operações de criptografia ou descriptografia de dados. Assim, o Transact-SQL (T-SQL) não dá suporte a provisionamento de chaves ou operações criptográficas. Pela mesma razão, a criptografia de dados já existentes ou criptografá-los novamente (com outro tipo de criptografia ou uma chave de criptografia de coluna) precisa ser executada fora do banco de dados (as ferramentas SQL podem automatizar isso).

Observação

O Always Encrypted com enclaves seguros elimina algumas das restrições acima, permitindo operações criptográficas em dados já existentes usando T-SQL, e elimina a necessidade de mover os dados para fora do banco de dados.

Como funcionam as consultas avançadas em colunas criptografadas

Para executar uma consulta em colunas de banco de dados criptografadas, inserir dados em colunas criptografadas, recuperar valores de texto não criptografado de colunas criptografadas ou executar operações com suporte (por exemplo, pesquisas de ponto) em colunas usando criptografia determinística, o usuário ou aplicativo que emite a consulta deve atender a estes pré-requisitos:

  • Tenha acesso à chave mestra de coluna que protege os dados. O acesso à chave é necessário com as permissões no nível do banco de dados, como SELECT na tabela que contém os dados.
  • Conectar-se ao banco de dados com o Always Encrypted habilitado na conexão de banco de dados. A maioria das ferramentas SQL e drivers de cliente SQL dão suporte à habilitação do Always Encrypted para conexões de banco de dados.

Observação

Caso tenha as permissões de banco de dados necessárias para ler os dados, mas nenhum acesso às chaves que os protegem, o usuário ainda poderá recuperar dados cyphertext (criptografados) conectando-se ao banco de dados sem habilitar Always Encrypted na conexão de banco de dados.

Veja como as consultas em colunas criptografadas funcionam:

  1. Quando um aplicativo emite uma consulta parametrizada, o driver do cliente SQL dentro do aplicativo entra em contato de forma transparente com o mecanismo de banco de dados (chamando sp_describe_parameter_encryption (Transact-SQL) para determinar quais parâmetros têm como destino colunas criptografadas e devem ser criptografados. Para cada parâmetro que precisa ser criptografado, o driver recebe o algoritmo de criptografia, o tipo de criptografia e os metadados da chave, como a chave de criptografia de coluna criptografada e a localização da chave mestra de coluna correspondente.
  2. O driver chamará o repositório de chaves, que contém as chaves mestras da coluna apara descriptografar os valores da chave de criptografia de coluna criptografados. As chaves de criptografia de coluna de texto não criptografado resultantes são armazenadas em cache para reduzir o número de viagens de ida e volta para o repositório de chaves em usos subsequentes das mesmas chaves de criptografia de coluna.
  3. O driver usa as chaves de criptografia de coluna de texto não criptografado obtidas para criptografar os parâmetros de consulta correspondentes a colunas criptografadas.
  4. 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 ao mecanismo de banco de dados para processamento.
  5. O mecanismo de banco de dados executa a consulta, que pode envolver comparações de igualdade em colunas usando criptografia determinística.
  6. Se os resultados da consulta incluírem dados de colunas criptografadas, o mecanismo de banco de dados anexará metadados de criptografia para cada coluna, como informações sobre o algoritmo de criptografia, tipo de criptografia e metadados de chave ao conjunto de resultados.
  7. O mecanismo de banco de dados envia o conjunto de resultados ao aplicativo cliente.
  8. Para cada coluna criptografada no conjunto de resultados recebido, o driver primeiro tentará encontrar a chave de criptografia da coluna de texto não criptografado no cache local e fará apenas uma viagem de ida e volta ao repositório de chaves que contém a chave mestra de coluna, se não for possível encontrar a chave no cache.
  9. O driver descriptografa os resultados e retorna valores de texto não criptografado para o aplicativo.

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. 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 download autônomo. Você também pode implementar seu próprio provedor. 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.

Confira Desenvolver aplicativos usando o Always Encrypted para obter a lista de drivers de cliente que dão suporte ao Always Encrypted e para obter informações sobre como desenvolver aplicativos que consultam colunas criptografadas.

Você também pode consultar colunas criptografadas usando ferramentas SQL, como Azure Data Studio ou SSMS.

Limitações

Estas limitações se aplicam a consultas em colunas criptografadas:

  • A criptografia determinística dá suporte às operações a seguir que envolvem comparações de igualdade; outras operações não são permitidas.

  • Não é permitida a computação em colunas criptografadas usando criptografia aleatória.

    Observação

    Always Encrypted com enclaves seguros ameniza a restrição acima, permitindo a correspondência de padrões, operadores de comparação, classificação e indexação em colunas usando criptografia aleatória.

  • Não são permitidas instruções de consulta que acionam cálculos envolvendo texto não criptografado e dados criptografados. Por exemplo:

    • Comparar uma coluna criptografada a uma coluna de texto não criptografado ou literal.
    • Copiar dados de uma coluna de texto não criptografado para uma coluna criptografada (ou o contrário) UPDATE, BULK INSERT, SELECT INTO ou INSERT..SELECT.
    • Inserir literais em colunas criptografadas.

    Essas instruções resultam em erros de conflito de operando como este:

    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
    
  • Os aplicativos devem usar parâmetros de consulta para passar valores que correspondam a colunas criptografadas. Por exemplo, ao inserir dados em colunas criptografadas ou filtrar por colunas criptografadas (ao usar criptografia determinística). Não há suporte para passar literais ou variáveis T-SQL correspondentes a colunas criptografadas. Para obter mais informações específicas sobre um driver cliente que você está usando, veja Desenvolver aplicativos usando o Always Encrypted.

  • Você deve usar variáveis de parametrização do Always Encrypted no Azure Data Studio ou no SSMS para emitir consultas que transmitam valores correspondentes a colunas criptografadas nessas ferramentas. Por exemplo, ao inserir dados em colunas criptografadas ou filtrar por colunas criptografadas (ao usar criptografia determinística).

  • Não há suporte para parâmetros com valor de tabela com direcionamento a colunas criptografadas.

  • Não há suporte para consultas que usam as seguintes cláusulas:

  • Depois de alterar a definição de uma coluna criptografado, execute sp_refresh_parameter_encryption para atualizar os metadados do Always Encrypted para o objeto.

  • Não há suporte para o Always Encrypted para as colunas com as características abaixo:

    Importante

    O Stretch Database foi preterido no SQL Server 2022 (16.x). Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam.

    • Colunas em tabelas externas (PolyBase) (observação: há suporte para o uso de tabelas externas e tabelas com colunas criptografadas na mesma consulta).
  • Os recursos a seguir não funcionam em colunas criptografadas:

Referência Transact-SQL do Always Encrypted

O Always Encrypted usa as seguintes instruções Transact-SQL, exibições do catálogo do sistema, procedimentos armazenados do sistema e permissões.

Demonstrativos

Exibições do catálogo e procedimentos armazenados do sistema

Veja também sys.columns (Transact-SQL) para obter informações sobre metadados de criptografia armazenados para cada coluna.

Permissões de banco de dados

Há quatro permissões de banco de dados para o Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY: necessária para criar e excluir metadados de chave mestra de coluna.

  • ALTER ANY COLUMN ENCRYPTION KEY: necessária para criar e excluir metadadosda chave de criptografia de coluna.

  • VIEW ANY COLUMN MASTER KEY DEFINITION: necessária para acessar e ler os metadados das chaves mestras de coluna, que são necessárias para consultar colunas criptografadas.

  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION: necessária para acessar e ler os metadados das chaves mestras de coluna, que são necessárias para consultar colunas criptografadas.

A tabela a seguir resume as permissões necessárias para ações comuns.

Cenário 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) X X X X
Consultando colunas criptografadas X X

Considerações importantes

  • As permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION são necessárias ao selecionar colunas criptografadas, mesmo que o usuário não tenha permissão para as chaves mestras de coluna (nos repositórios de chaves), protegendo as colunas e não acessando a tentativa de texto não criptografado.

  • No SQL Server, as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION são concedidas por padrão à função de banco de dados fixa public. Um administrador de banco de dados poderá revogar (ou negar) as permissões para a função public e conceder para funções específicas ou usuários para implementar o controle mais restrito.

  • No banco de dados SQL, as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION não são concedidas por padrão à função de banco de dados fixa public. Isso permite que determinadas ferramentas herdadas (usando versões anteriores do DacFx) funcionem corretamente. Consequentemente, para trabalhar com colunas criptografadas (mesmo se não descriptografá-las) o administrador de banco de dados deve conceder explicitamente as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.

Próximas etapas

Confira também