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. Pode encriptar dados sensíveis dentro das aplicações clientes, garantindo que as chaves de encriptação nunca sejam expostas ao Motor de Base de Dados. Esta abordagem estabelece uma separação entre aqueles que possuem os dados e os podem visualizar, e aqueles que os gerem mas não deveriam ter acesso: administradores de bases de dados on-premises, operadores de bases de dados na nuvem ou outros utilizadores não autorizados de alto privilégio. 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.

O Always Encrypted tem certas restrições, como a incapacidade de realizar operações sobre dados encriptados, incluindo ordenação e filtragem (exceto para consultas por pontos usando encriptação determinística). Esta limitação significa que algumas consultas e aplicações podem não ser compatíveis com o Always Encrypted ou podem exigir alterações significativas à lógica da aplicação.

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 cliente, o controlador Always Encrypted-enabled encripta dados sensíveis antes de os enviar para o Motor de Base de Dados e reescreve automaticamente as consultas para manter a semântica da aplicação. Ele também descriptografa automaticamente os resultados da consulta de colunas de banco de dados criptografadas.

Configurar Sempre Criptografado

Observação

Para aplicações que precisam de realizar correspondência de padrões, use operadores de comparação, ordenação e indexação em colunas encriptadas, implemente o 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 encriptação de coluna encripta os dados dentro de uma coluna encriptada. Uma chave mestre de coluna é uma chave que protege chaves e criptografa uma ou mais chaves de criptografia de coluna.

    Armazenar chaves mestras de coluna num armazenamento de chaves de confiança fora do sistema de base de dados, como Azure Key Vault, armazenador de certificados do Windows ou um módulo de segurança de hardware. Após este passo, provisione chaves de encriptação de colunas e encripte cada chave 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. Esta etapa pode exigir a criação de novas tabelas com colunas encriptadas ou a encriptação das colunas e dados existentes. Ao configurar a encriptação para uma coluna, especifique detalhes sobre o algoritmo de encriptação, a chave de encriptação da coluna para proteger os dados e o tipo de encriptação. 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. Ao usar encriptação determinística, pode realizar consultas de pontos, junções de igualdade, agrupamento e indexação em colunas encriptadas. No entanto, utilizadores não autorizados podem adivinhar informações sobre valores encriptados ao examinar padrões na coluna encriptada, especialmente se houver um pequeno conjunto de possíveis valores encriptados, como Verdadeiro/Falso ou região Norte/Sul/Este/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. Este método melhora a segurança da encriptação aleatória.

Para realizar correspondência de padrões usando operadores de comparação, ordenação e indexação em colunas encriptadas, adote o Always Encrypted com enclaves seguros e aplique encriptação 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, você deve usar encriptação determinística. Este tipo de encriptação permite operações como consultas por pontos, junções de igualdade, agrupamento e indexação em colunas encriptadas.

Como o sistema de base de dados, por natureza, não tem acesso a chaves criptográficas, qualquer encriptação de colunas requer mover e encriptar dados para fora da base de dados. O processo de encriptação pode demorar muito tempo e é vulnerável a interrupções de rede. Além disso, se precisar de voltar a encriptar uma coluna mais tarde, como ao rodar a chave de encriptação ou mudar de tipo de encriptação, voltará a encontrar as mesmas dificuldades. O uso do Always Encrypted com enclaves seguros elimina a necessidade de mover dados para fora do banco de dados. Como o enclave é de confiança, um driver cliente dentro da sua aplicação ou uma ferramenta como o SQL Server Management Studio (SSMS) pode partilhar as chaves com o enclave em segurança 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.

Pode realizar os passos anteriores utilizando ferramentas SQL:

Para garantir que as chaves Always Encrypted e os dados sensíveis protegidos nunca sejam revelados em texto simples ao ambiente da base de dados, o Motor de Base de Dados não pode estar envolvido em operações de provisionamento de chaves e encriptação ou desencriptação de dados. 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 podes fazer cálculos em colunas encriptadas com encriptação aleatória. A encriptação determinística suporta as seguintes operações que envolvem comparações de igualdade. Não são permitidas outras operações:

    Observação

    Para aplicações que precisam de realizar correspondência de padrões, use operadores de comparação, ordenação e indexação em colunas encriptadas, implemente o Always Encrypted com enclaves seguros.

  • Não pode usar instruções de consulta que desencadeiam cálculos envolvendo tanto texto simples como dados encriptados. 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 vice-versa) UPDATE, BULK INSERT, SELECT INTO, ou 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 está a inserir dados em colunas encriptadas ou filtrá-los usando encriptação determinística, use parâmetros de consulta. Não é suportado passar literais ou variáveis T-SQL que correspondam a colunas encriptadas. Para obter mais informações específicas para um driver de cliente que você está usando, consulte Desenvolver aplicativos usando o Always Encrypted.

    No SSMS, é essencial aplicar parametrização para variáveis Always Encrypted para executar consultas que tratem valores associados a colunas encriptadas. Este requisito inclui cenários como inserir dados em colunas encriptadas ou aplicar filtros sobre elas (nos casos em que é usada encriptação determinística).

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

  • Consultas que utilizam as seguintes cláusulas não são suportadas:

  • O Always Encrypted não é suportado para as colunas com as seguintes características:

    • Colunas usando um dos seguintes tipos de dados: xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, vetor, alias, user-defined types.
    • colunas FILESTREAM .
    • Colunas com a propriedade IDENTITY.
    • Colunas com ROWGUIDCOL propriedade.
    • Colunas string (varchar, char e outras) com colações diferentes das colações de ponto de código binário (_BIN2). A colação não pode diferir da colação padrão da base de dados.
    • 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 calculadas 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 de chave primária em tabelas que possuem rastreio de alterações.
    • Quando uma coluna numa tabela otimizada para memória é referenciada num módulo compilado nativamente, a encriptação não pode ser aplicada a nenhuma das colunas dessa tabela.
      • 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 Description
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 Description
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.

Para informações sobre metadados de encriptação armazenados para cada coluna, consulte sys.columns.

Permissões de banco de dados

O Always Encrypted utiliza quatro permissões de base de dados.

Exibições do catálogo do sistema e procedimentos armazenados Description
ALTER ANY COLUMN MASTER KEY É necessário para criar e eliminar metadados de chave mestra de coluna.
ALTER ANY COLUMN ENCRYPTION KEY Necessário para criar e excluir metadados de chave de criptografia de coluna.
VIEW ANY COLUMN MASTER KEY DEFINITION Necessário para acessar e ler os metadados da chave mestra da coluna, que são necessários para consultar colunas criptografadas.
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION 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 ALTER ANY COLUMN MASTER KEY ALTER ANY COLUMN ENCRYPTION KEY VIEW ANY COLUMN MASTER KEY DEFINITION VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
Gestão de chaves (criação, alteração ou revisão de metadados chave na base de dados) X X X X
Consultando colunas criptografadas X X

Considerações importantes

  • As VIEW ANY COLUMN MASTER KEY DEFINITION permissões e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION são necessárias ao selecionar colunas encriptadas. Estas permissões protegem as colunas mesmo que o utilizador não tenha permissão para as chaves mestras das colunas nos seus armazenamentos de chaves, e impedem o acesso ao texto simples.

  • No SQL Server, o papel fixo de base de dados pública concede permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION por defeito. Um administrador de base de dados pode optar por revogar ou negar estas permissões ao papel público e concedê-las a papéis ou utilizadores específicos para implementar controlos mais restritos.

  • Em SQL Database, o papel fixo público da base de dados não concede as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION por defeito. Esta alteração permite que certas ferramentas legadas existentes que usam versões antigas do DacFx funcionem corretamente. Para trabalhar com colunas encriptadas (mesmo que não as decifre), um administrador de base de dados deve conceder explicitamente as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.

Próximo passo