Always Encrypted

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

Diagrama de Sempre Criptografado.

Always Encrypted e Always Encrypted com enclaves seguros são recursos projetados para proteger informações confidenciais, incluindo números de cartão de crédito e números de identificação nacional ou regional (como números de previdência social dos EUA), no Banco de Dados SQL do Azure, na Instância Gerenciada de SQL do Azure e nos bancos de dados do SQL Server. Ele permite que os clientes criptografem dados confidenciais em aplicativos cliente, o que garante que as chaves de criptografia nunca sejam expostas 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 tem certas restrições, como a incapacidade de realizar operações em dados criptografados, incluindo classificação, filtragem (exceto para pesquisas de ponto usando criptografia determinística) etc. Isso significa que algumas consultas e aplicativos podem não ser compatíveis com o Always Encrypted ou podem exigir alterações significativas na lógica do aplicativo.

Para resolver essas limitações, o Always Encrypted com enclaves seguros permite que o mecanismo de banco de dados processe dados criptografados em uma área de memória protegida chamada enclave seguro. Os enclaves seguros aprimoram os recursos de computação confidencial do Always Encrypted com suporte a correspondência de padrões, outros operadores de comparação e criptografia in-loco.

O Always Encrypted garante que a criptografia seja perfeita para aplicativos. No lado do cliente, o driver habilitado para Always Encrypted criptografa dados confidenciais antes de enviá-los ao Mecanismo de Banco de Dados e reescreve automaticamente as consultas para manter a semântica do aplicativo. Ele também descriptografa automaticamente os resultados da consulta de colunas de banco de dados criptografadas.

Configurar Always Encrypted

Observação

Para aplicativos que precisam executar correspondência de padrões, usar operadores de comparação, classificar e indexar em colunas criptografadas, você deve implementar o Always Encrypted com enclaves seguros.

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 em seu banco de dados, siga estas etapas:

  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 incluem 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 não armazena nem usa nenhuma chave em texto sem formatação.

    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 específicas que incluem informações confidenciais para garantir a proteção. 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 houver um conjunto pequeno de valores criptografados possíveis, como Verdadeiro/Falso ou região Norte/Sul/Leste/Oeste.

    • A criptografia aleatória usa um método que criptografa os dados de modo imprevisível. Cada entrada de texto simples idêntica resulta em uma saída criptografada distinta. Isso melhora a segurança da criptografia aleatória.

Para usar operadores de comparação, classificar e indexar em colunas criptografadas, você deve implementar o Always Encrypted com enclaves seguros e aplicar a criptografia aleatória. A criptografia aleatória Always Encrypted (sem enclaves seguros) não dá suporte à pesquisa, agrupamento, indexação ou junção em colunas criptografadas. Em vez disso, para colunas destinadas a fins de pesquisa ou agrupamento, é essencial usar criptografia determinística. Isso permite operações como pesquisas de ponto, junções de igualdade, agrupamento e indexação em colunas criptografadas.

Como o sistema de banco de dados não tem, por design, acesso a chaves criptográficas, qualquer criptografia de coluna requer mover e criptografar dados para fora do banco de dados. Isso significa que esse processo de criptografia pode levar muito tempo e é vulnerável a interrupções na rede. Além disso, se você precisar criptografar novamente uma coluna posteriormente, como ao girar a chave de criptografia ou alterar os tipos de criptografia, encontrará as mesmas dificuldades novamente. O uso do Always Encrypted com enclaves seguros elimina a necessidade de mover dados para fora do banco de dados. Como o enclave é confiável, um driver cliente em seu aplicativo ou uma ferramenta como o Azure Data Studio ou o SQL Server Management Studio (SSMS) pode compartilhar com segurança as chaves com o enclave durante as operações criptográficas. O enclave pode criptografar ou recriptografar colunas no local, diminuindo significativamente o tempo necessário para essas ações.

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

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.

Limitações

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

  • Não é permitida a computação em colunas criptografadas usando criptografia aleatória. 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.

    Observação

    Para aplicativos que precisam executar correspondência de padrões, usar operadores de comparação, classificar e indexar em colunas criptografadas, você deve implementar o Always Encrypted com enclaves seguros.

  • 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 precisam usar parâmetros de consulta para fornecer valores para colunas criptografadas. Por exemplo, quando você está inserindo dados em colunas criptografadas ou filtrando-os usando criptografia determinística, os parâmetros de consulta devem ser usados. 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.

    No Azure Data Studio ou no SSMS, é essencial aplicar a parametrização para variáveis Always Encrypted para executar consultas que lidam com valores associados a colunas criptografadas. Isso inclui cenários como inserir dados em colunas criptografadas ou aplicar filtros nelas (nos casos em que a criptografia determinística é usada).

  • 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:

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

    Importante

    O banco de dados de ampliação foi preterido no SQL Server 2022 (16.x) e no Banco de Dados SQL do Azure. Esse recurso será removido em uma versão futura do mecanismo de banco de dados. 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.

Instruções

Instrução DDL Descrição
CREATE COLUMN MASTER KEY Cria um objeto de metadados de chave mestra de coluna em um banco de dados
DROP COLUMN MASTER KEY Remove uma chave mestra de banco de dados.
CREATE COLUMN ENCRYPTION KEY Cria um objeto de chave de criptografia de coluna no banco de dados.
ALTER COLUMN ENCRYPTION KEY Altera uma chave de criptografia de coluna em um banco de dados, adicionando ou removendo um valor criptografado.
DROP COLUMN ENCRYPTION KEY Remove uma chave de criptografia de coluna de um banco de dados.
CREATE TABLE (ENCRYPTED WITH) Especifica colunas de criptografia

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

Exibições do catálogo e procedimentos armazenados do sistema Descrição
sys.column_encryption_keys Retorna informações sobre chaves de criptografia de coluna (CEKs)
sys.column_encryption_key_values Retorna informações sobre valores criptografados de chaves de criptografia de coluna (CEKs)
sys.column_master_keys Retorna uma linha para cada chave mestra de banco de dados
sp_refresh_parameter_encryption Atualiza os metadados Always Encrypted dos parâmetros do procedimento armazenado não vinculado a esquema, da função definida pelo usuário, da exibição, do gatilho DML, do gatilho DDL no nível do banco de dados ou do gatilho DDL no nível do servidor especificados
sp_describe_parameter_encryption Analisa a instrução Transact-SQL especificada e seus parâmetros, para determinar quais parâmetros correspondem às colunas de banco de dados protegidas usando o recurso Always Encrypted.

Veja também sys.columns 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.

Exibições do catálogo e procedimentos armazenados do sistema Descrição
ALTER ANY COLUMN MASTER KEY Necessário para criar e excluir uma chave mestra de coluna.
ALTER ANY COLUMN ENCRYPTION KEY Necessário para criar e excluir uma 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 de criptografia 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 um 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. Para trabalhar com colunas criptografadas (mesmo se não descriptografá-las) o administrador de banco de dados deverá conceder explicitamente as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.

Próxima etapa