Partilhar via


Sempre criptografado

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

Diagrama de Always Encrypted.

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 nacionais ou regionais (como números de segurança social dos EUA), no Banco de Dados SQL do Azure, na Instância Gerenciada SQL do Azure e nos bancos de dados do SQL Server. Ele permite que os clientes criptografem dados confidenciais dentro de aplicativos cliente, garantindo que as chaves de criptografia nunca sejam expostas ao Mecanismo de Banco de Dados. Isso fornece uma separação entre 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 com privilégios elevados. Como resultado, o Always Encrypted permite que os clientes armazenem com segurança seus dados confidenciais na nuvem, reduzindo o risco de roubo de dados por insiders mal-intencionados.

Always Encrypted tem certas restrições, como a incapacidade de realizar operações em dados criptografados, incluindo classificação, filtragem (exceto para pesquisas de pontos 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 dentro de uma área de memória protegida chamada enclave seguro. Enclaves seguros melhoram as capacidades de computação confidencial do Always Encrypted, suportando a correspondência de padrões, vários operadores de comparação e encriptação in situ.

O Always Encrypted garante que a encriptação é perfeita para as aplicações. No lado do cliente, o driver habilitado para Always Encrypted criptografa dados confidenciais antes de enviá-los para o 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 Sempre Criptografado

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 Always Encrypted com enclaves seguros.

Esta seção fornece uma visão geral da configuração do Always Encrypted. Para obter detalhes e começar, consulte Tutorial: Introdução ao Always Encrypted.

Para configurar o Always Encrypted em seu banco de dados, siga estas etapas:

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

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

    Uma chave de criptografia de coluna é usada para criptografar os dados dentro de uma coluna criptografada. Uma chave mestre de coluna é uma chave que protege chaves e criptografa uma ou mais chaves de criptografia de coluna.

    Precisas armazenar chaves mestras de coluna em um armazenamento de chaves fidedignas fora do sistema de banco de dados, como no Cofre de Chaves do Azure, no armazenamento de certificados do Windows, ou um módulo de segurança de hardware. Depois disso, você deve provisionar chaves de criptografia de coluna e criptografar cada uma com uma chave mestra de coluna.

    Finalmente, salve os metadados sobre as chaves em seu banco de dados. Os metadados da chave mestra de coluna incluem o local da chave mestra de 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.

    Para obter mais informações sobre como gerenciar chaves Always Encrypted, consulte Visão geral do gerenciamento de chaves para Always Encrypted.

  2. Configure a criptografia para colunas de banco de dados específicas que incluam informações confidenciais para garantir proteção. Isso pode exigir a criação de novas tabelas com colunas criptografadas ou a criptografia das colunas e dos dados existentes. Ao configurar a criptografia para uma coluna, você precisa especificar detalhes sobre o algoritmo de criptografia, a chave de criptografia de coluna para proteger os dados e o tipo de criptografia. O Always Encrypted suporta dois tipos de encriptação:

    • Criptografia determinística sempre gera o mesmo valor criptografado para um determinado valor de texto simples. O uso da criptografia determinística permite pesquisas pontuais, uniões de igualdade, agrupamento e indexação em colunas criptografadas. No entanto, ele também pode permitir que usuários não autorizados adivinhem informações sobre valores criptografados examinando padrões na coluna criptografada, especialmente se houver um pequeno conjunto de possíveis valores criptografados, como Verdadeiro/Falso ou região Norte/Sul/Leste/Oeste.

    • de criptografia aleatória usa um método que criptografa dados de forma 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 executar a correspondência de padrões usando operadores de comparação, classificação e indexação em colunas criptografadas, você deve adotar Always Encrypted com enclaves seguros e aplicar criptografia aleatória. A encriptação aleatória Always Encrypted (sem enclaves seguros) não suporta pesquisa, agrupamento, indexação ou junção em colunas encriptadas. Em vez disso, para colunas destinadas a fins de pesquisa ou agrupamento, é essencial usar criptografia determinística. Isso permite operações como buscas pontuais, junções por 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 de rede. Além disso, se você precisar criptografar novamente uma coluna mais tarde, 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 de 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 operações criptográficas. O enclave pode então criptografar ou criptografar novamente as colunas no local, diminuindo significativamente o tempo necessário para essas ações.

Para obter detalhes sobre os algoritmos criptográficos do Always Encrypted, veja a seção Always Encrypted cryptography.

Você pode executar as etapas acima usando ferramentas SQL:

Para garantir que as chaves Always Encrypted e os dados confidenciais protegidos nunca sejam revelados em texto sem formatação para o ambiente de banco de dados, o Mecanismo de Banco de Dados não pode estar envolvido no provisionamento de chaves e criptografia de dados ou em operações de descriptografia. Portanto, o Transact-SQL (T-SQL) não oferece suporte a provisionamento de chaves ou operações criptográficas. Pelo mesmo motivo, criptografar dados existentes ou criptografá-los novamente (com um tipo de criptografia diferente ou uma chave de criptografia de coluna) precisa ser executado fora do banco de dados (as ferramentas SQL podem automatizar isso).

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

Limitações

As seguintes limitações aplicam-se a consultas em colunas encriptadas:

  • Não são permitidos cálculos em colunas criptografadas usando criptografia aleatória. A criptografia determinística suporta as seguintes operações envolvendo comparações de igualdade - nenhuma outra operação é permitida.

    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 Always Encrypted com enclaves seguros.

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

    • Comparando uma coluna criptografada com uma coluna de texto sem formatação ou um literal.
    • Copiar dados de uma coluna de texto simples para uma coluna encriptada (ou o contrário) UPDATE, BULK INSERT, SELECT INTOou INSERT..SELECT.
    • Inserção de literais em colunas encriptadas.

    Tais declarações resultam em erros de conflito de operandos 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 que correspondem a colunas criptografadas. Para obter mais informações específicas para um driver de cliente que você está usando, consulte Desenvolver aplicativos usando o Always Encrypted.

    No Azure Data Studio ou SSMS, é essencial aplicar parametrização para variáveis Always Encrypted para executar consultas que manipulam 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 de valor de tabela direcionados para colunas criptografadas.

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

  • A funcionalidade Always Encrypted não é suportada para as colunas com as características abaixo.

    • Colunas que usam um dos seguintes tipos de dados: xml, carimbo de data/hora, rowversion, imagem, ntext, texto, sql_variant, hierarchyid, geography, geometria, alias, tipos definidos pelo usuário.
    • colunas FILESTREAM
    • Colunas com a propriedade IDENTITY.
    • Colunas com ROWGUIDCOL propriedade.
    • String (varchar, char, etc.) colunas com agrupamentos diferentes de agrupamentos de ponto de código binário (_BIN2).
    • Colunas que são chaves para índices agrupados e não agrupados ao usar criptografia aleatória (índices em colunas usando criptografia determinística são suportados).
    • Colunas incluídas em índices de texto completo (Always Encrypted não suporta Full-Text Pesquisa).
    • Especifique colunas computadas em uma tabela.
    • Colunas referenciadas por colunas computadas (quando a expressão realiza operações não suportadas para Always Encrypted).
    • Use colunas esparsas.
    • Colunas referenciadas por estatísticas ao usar criptografia aleatória (criptografia determinística é suportada).
    • Particionamento de colunas.
    • Colunas com restrições padrão.
    • As colunas referenciadas por restrições exclusivas ao utilizarem criptografia aleatória (a criptografia determinística é suportada).
    • Colunas de chave primária ao usar criptografia aleatória (criptografia determinística é suportada).
    • Referência a colunas em restrições de chave estrangeira ao usar criptografia aleatória ou determinística, se as colunas que referenciam e as referenciadas utilizarem chaves ou algoritmos diferentes.
    • As colunas referenciadas por restrições de verificação .
    • Colunas capturadas e rastreadas usando a captura de dados de mudança .
    • Colunas de chave primária em tabelas que possuem rastreio de alterações.
    • Colunas mascaradas (usando Mascaramento de dados dinâmicos).
    • Colunas usadas em Procedimentos armazenados compilados nativamente.
    • As colunas nas tabelas de banco de dados estendem-se até. (Tabelas com colunas criptografadas com Always Encrypted podem ser habilitadas para Stretch.)

    Importante

    O Stretch Database 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 novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.

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

Referência de Always Encrypted Transact-SQL

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

Declarações

Declaração DDL Descrição
CRIAR CHAVE MESTRA DE COLUNA Cria um objeto de metadados de chave principal de coluna numa base de dados
SOLTAR A CHAVE MESTRA DA COLUNA Descarta uma chave mestra de coluna de um banco de dados.
CRIAR CHAVE DE CRIPTOGRAFIA DE COLUNA Cria um objeto de metadados de chave de criptografia de coluna.
ALTERAR CHAVE DE ENCRIPTAÇÃO DE COLUNA Altera uma chave de criptografia de coluna em um banco de dados, adicionando ou descartando um valor criptografado.
ELIMINAR CHAVE DE CRIPTOGRAFIA DE COLUNA Descarta uma chave de criptografia de coluna de um banco de dados.
CRIAR TABELA (CRIPTOGRAFADA COM) Especifica colunas de criptografia

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

Exibições do catálogo do sistema e procedimentos armazenados 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 para os parâmetros do procedimento armazenado não vinculado ao esquema especificado, função definida pelo usuário, exibição, gatilho DML, gatilho DDL no nível do banco de dados ou gatilho DDL no nível do servidor
sp_describe_parameter_encryption Analisa a instrução Transact-SQL especificada e seus parâmetros, para determinar quais parâmetros correspondem às colunas do banco de dados que são protegidas usando o recurso Always Encrypted.

Consulte 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 Always Encrypted.

Exibições do catálogo do sistema e procedimentos armazenados Descrição
ALTERAR QUALQUER CHAVE MESTRA DE COLUNA É necessário para criar e eliminar metadados de chave mestra de coluna.
ALTERAR QUALQUER CHAVE DE ENCRIPTAÇÃO DE COLUNA Necessário para criar e excluir metadados de chave de criptografia de coluna.
Visualizar a Definição de Chave Mestra de Quaisquer Colunas Necessário para acessar e ler os metadados da chave mestra da coluna, que são necessários para consultar colunas criptografadas.
EXIBIR DEFINIÇÃO DE QUALQUER CHAVE DE ENCRIPTAÇÃO DE COLUNA Necessário para acessar e ler os metadados da chave de criptografia de coluna, que são necessários para consultar colunas criptografadas.

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

Cenário ALTERAR QUALQUER CHAVE MESTRA DE COLUNA ALTERAR QUALQUER CHAVE DE CRIPTOGRAFIA DE COLUNA EXIBIR QUALQUER DEFINIÇÃO DE CHAVE MESTRA DE COLUNA EXIBIR QUALQUER DEFINIÇÃO DE CHAVE DE CRIPTOGRAFIA DE COLUNA
Gestão de chaves (criação/alteração/revisão de metadados chave na base de dados) X X X X
Consultando colunas criptografadas X X

Considerações importantes

  • O EXIBIR QUALQUER DEFINIÇÃO DE CHAVE MESTRA DE COLUNA e o EXIBIR QUALQUER DEFINIÇÃO DE CHAVE DE CRIPTOGRAFIA DE COLUNA são permissões necessárias ao selecionar colunas criptografadas, mesmo que o usuário não tenha permissão para as chaves mestras de coluna (nos seus armazenamentos de chaves), protegendo as colunas e evitando qualquer tentativa de acesso ao texto simples.

  • No SQL Server, as permissões de exibir qualquer definição de chave mestra de coluna e de exibir qualquer definição de chave de criptografia de coluna são concedidas por padrão à função fixa de banco de dados pública. Um administrador de banco de dados pode optar por revogar (ou negar) as permissões para a função pública e concedê-las a funções ou usuários específicos para implementar um controle mais restrito.

  • Na Base de Dados SQL, as permissões EXIBIR QUALQUER DEFINIÇÃO DE CHAVE MESTRA DE COLUNA e EXIBIR QUALQUER DEFINIÇÃO DE CHAVE DE CRIPTOGRAFIA DE COLUNA não são concedidas por padrão à função fixa de base de dados pública . Isso permite que certas ferramentas herdadas existentes (usando versões mais antigas do DacFx) funcionem corretamente. Para trabalhar com colunas encriptadas (mesmo que não as desencripte), um administrador de bases de dados deve conceder explicitamente a permissão para VISUALIZAR QUALQUER DEFINIÇÃO DE CHAVE MESTRA DE COLUNA e VISUALIZAR QUALQUER DEFINIÇÃO DE CHAVE DE CRIPTOGRAFIA DE COLUNA.

Próximo passo