Recomendar quando usar o Banco de Dados SQL do Azure Always Encrypted
O Always Encrypted é um recurso projetado 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 de segurança social dos EUA), armazenados no Banco de Dados SQL do Azure, na Instância Gerenciada de SQL do Azure e nos bancos de dados do SQL Server. O Always Encrypted permite que os clientes criptografem dados confidenciais dentro de aplicativos cliente e nunca revelem as chaves de criptografia para o Mecanismo de Banco de Dados. O Always Encrypted fornece uma separação entre aqueles que possuem os dados e podem exibi-los e aqueles que gerenciam os dados, mas não devem ter acesso – administradores de banco de dados locais, operadores de banco de dados de nuvem ou outros usuários não autorizados com privilégios altos. Como resultado, o Always Encrypted permite que os clientes armazenem com confiança seus dados confidenciais na nuvem e reduzam a probabilidade de roubo de dados por insiders mal-intencionados.
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 de consulta ou junções de igualdade. Essas consultas usam criptografia determinística.
Observação
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-place.
O Always Encrypted torna a criptografia transparente para aplicativos. Um driver habilitado para Always Encrypted instalado no computador cliente, criptografa e descriptografa automaticamente dados confidenciais no aplicativo cliente. O driver criptografa os dados em colunas confidenciais antes de passar os dados para o Mecanismo de Banco de Dados. Em seguida, o driver reescreve automaticamente as consultas para que a semântica para o aplicativo seja preservada. Da mesma forma, o driver descriptografa dados de forma transparente, armazenados em colunas de banco de dados criptografadas, contidos nos resultados da consulta.
Configurar o Always Encrypted
Para configurar o Always Encrypted em seu banco de dados, você precisa:
Implante 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 chave que criptografa uma ou mais chaves de criptografia de coluna. Você precisa armazenar chaves mestras de coluna em um repositório de chaves confiável fora do sistema de banco de dados. Os locais de armazenamento mais comuns são o Azure Key Vault, o repositório de certificados do Windows ou um módulo de segurança de hardware. Em seguida, você precisa implantar chaves de criptografia de coluna e criptografar cada uma delas com uma chave mestra de coluna. Por fim, você precisa armazenar os metadados sobre as chaves no banco de dados.
- Os metadados da chave mestra de coluna capturam 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 nunca armazena ou usa as chaves de qualquer tipo em texto sem formatação.
Configure a criptografia para colunas de banco de dados selecionadas que contêm dados confidenciais a serem protegidos. Você pode criar novas tabelas com colunas criptografadas ou criptografar colunas de banco de dados existentes e dados existentes. Ao configurar a criptografia para uma coluna, especifique as informações sobre um algoritmo de criptografia, uma chave de criptografia de coluna para proteger os dados na 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 um determinado valor de texto sem formatação. O uso da criptografia determinística permite pesquisas de ponto, junçõ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 True/False, ou região Norte/Sul/Leste/Oeste.
- A criptografia aleatória usa um método que criptografa dados de maneira menos previsível. A criptografia aleatória é mais segura, mas impede a pesquisa, agrupamento, indexação e junção em colunas criptografadas.
Use a criptografia determinística para colunas usadas como parâmetros de pesquisa ou agrupamento. Por exemplo, um número de ID do governo. Use criptografia aleatória para dados como comentários de investigação confidencial, que não são agrupados com outros registros e não são usados para unir tabelas. Para obter detalhes sobre os algoritmos criptográficos do Always Encrypted, consulte Criptografia Always Encrypted. Você pode executar as etapas acima usando as ferramentas SQL:
- SQL Server Management Studio (SSMS)
- SQL Server PowerShell
- sqlpackage – que automatiza o processo de instalação
Para garantir que as chaves Always Encrypted e que os dados confidenciais protegidos nunca sejam revelados em texto não criptografado para o ambiente do banco de dados, o Mecanismo de Banco de Dados não pode estar envolvido em provisionamento de chaves e criptografia de dados ou operações de descriptografia. Portanto, Transact-SQL (T-SQL) não dá suporte a provisionamento de chaves ou operações criptográficas. Pelo mesmo motivo, é necessário criptografar dados existentes ou criptografá-los novamente (com um tipo de criptografia diferente ou uma chave de criptografia de coluna) fora do banco de dados (as ferramentas de SQL podem automatizar isso).
Como funcionam as consultas em colunas criptografadas
Um conjunto de pré-requisitos deve ser atendido, se o usuário precisar executar qualquer uma dessas ações:
- Executar uma consulta em colunas de banco de dados criptografadas
- Inserir dados em colunas criptografadas
- Recuperar valores de texto em claro de colunas criptografadas
- Executar operações suportadas (por exemplo, pesquisas de consulta de ponto) em colunas usando criptografia determinística
Um usuário ou um aplicativo que emite a consulta deve atender aos seguintes pré-requisitos:
- Tenha acesso à chave mestra de coluna que protege os dados. O acesso à chave é necessário além das permissões no nível do banco de dados, como
SELECTna tabela que contém os dados. - Conecte-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á suporte à habilitação do Always Encrypted para conexões de banco de dados.
Observação
Se o usuário tiver as permissões de banco de dados necessárias para ler os dados, mas nenhum acesso às chaves que os protegem, ainda poderão ser realizadas ações. O usuário pode recuperar dados de criptografia (criptografados) conectando-se ao banco de dados sem habilitar o Always Encrypted na conexão de banco de dados.
Veja como funcionam as consultas em colunas criptografadas:
- Quando um aplicativo emite uma consulta parametrizada, o driver cliente SQL dentro do aplicativo entra em contato com o Mecanismo de Banco de Dados (chamando sp_describe_parameter_encryption (Transact-SQL) para determinar quais parâmetros visam 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 de chave, incluindo a chave de criptografia de coluna criptografada e o local de sua chave mestra de coluna correspondente.
- O driver chama o repositório de chaves, que contém as chaves mestras de coluna, para descriptografar os valores criptografados das chaves de criptografia de coluna. As chaves de criptografia de coluna de texto simples resultantes são armazenadas em cache para reduzir o número de acessos ao repositório de chaves em usos subsequentes das mesmas chaves de criptografia de coluna.
- O driver usa as chaves de criptografia de coluna de texto não criptografado obtidas para criptografar os parâmetros de consulta correspondentes às colunas criptografadas.
- O driver substitui os valores de texto sem formatação dos parâmetros direcionados a colunas criptografadas por seus valores criptografados e envia a consulta ao Mecanismo de Banco de Dados para processamento.
- O Mecanismo de Banco de Dados executa a consulta, que pode envolver comparações de igualdade em colunas usando criptografia determinística.
- Se os resultados da consulta incluem dados de colunas criptografadas, o Mecanismo de Banco de Dados anexa metadados de criptografia para cada coluna, incluindo as informações sobre o algoritmo de criptografia, o tipo de criptografia e metadados de chave ao conjunto de resultados.
- O Mecanismo de Banco de Dados envia o conjunto de resultados para o aplicativo cliente.
- Para cada coluna criptografada no conjunto de resultados recebidos, o driver primeiro tenta encontrar a chave de criptografia de coluna de texto não criptografado no cache local e só faz uma viagem de ida e volta a um repositório de chaves que contém a chave mestra de coluna se não conseguir encontrar a chave no cache.
- O driver descriptografa os resultados e retorna valores de texto sem formatação para o aplicativo.
Um driver de cliente interage com um armazenamento de chaves, contendo uma chave mestra de coluna e usando um provedor de armazenamento de chave mestra de coluna, que é um componente de software do lado do cliente que encapsula um armazenamento de chaves que contém a chave mestra de coluna. Os provedores para tipos comuns de repositórios de chaves estão disponíveis em bibliotecas de drivers do lado do cliente da Microsoft ou como downloads autônomos. Você também pode implementar seu provedor. Os recursos do Always Encrypted, incluindo provedores internos de armazenamentos de chaves mestras de coluna, variam de acordo com a biblioteca do driver e sua versão.
Consulte Desenvolver aplicativos usando o Always Encrypted para obter a lista de drivers 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, por exemplo, Azure Data Studio ou SSMS.
Limitações
As seguintes limitações se aplicam a consultas em colunas criptografadas:
A criptografia determinística dá suporte às seguintes operações que envolvem comparações de igualdade - nenhuma outra operação é permitida.
-
= (Igual) em pesquisas de ponto de consulta.
- IN.
- SELECT – GROUP BY.
- DISTINCT.
-
= (Igual) em pesquisas de ponto de consulta.
Nenhuma computação em colunas criptografadas usando criptografia aleatória é permitida.
Observação
O Always Encrypted com enclaves seguros relaxa a restrição permitindo correspondência de padrões, operadores de comparação, classificação e indexação em colunas usando criptografia aleatória.
Instruções de consulta que disparam cálculos envolvendo dados sem formatação e criptografados não são permitidas. Por exemplo:
- Comparando uma coluna criptografada com uma coluna de texto sem formatação ou literal.
- Copiando dados de uma coluna de texto sem formatação para uma coluna criptografada (ou o contrário) UPDATE, BULK INSERT, SELECT INTO ou INSERT..SELECT.
- Inserindo literais em colunas criptografadas.
- Comparando uma coluna criptografada com uma coluna de texto sem formatação ou literal.
Tais instruções resultam em erros de confronto de operandos como este:
Output
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 a passagem de literais ou variáveis T-SQL correspondentes a colunas criptografadas. Para obter mais informações específicas de um driver cliente que você está usando, consulte Desenvolver aplicativos usando o Always Encrypted.
Você deve usar a Parametrização para variáveis Always Encrypted no Azure Data Studio ou SSMS para emitir consultas que passam 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 direcionados a colunas criptografadas.
Não há suporte para consultas usando as seguintes cláusulas:
Depois de alterar a definição de uma coluna criptografada, execute sp_refresh_parameter_encryption para atualizar os metadados do Always Encrypted para o objeto.
O Always Encrypted não tem suporte para as colunas com as características abaixo:
- Colunas usando um dos seguintes tipos de dados: xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, tipos definidos pelo usuário.
- Colunas FILESTREAM
- Colunas com a propriedade IDENTITY.
- Colunas com a propriedade ROWGUIDCOL.
- Colunas de cadeia de caracteres (varchar, char etc.) com agrupamentos diferentes dos agrupamentos de ponto de código binário (_BIN2) ao usar criptografia determinística.
- Colunas que são chaves para índices clusterizados e não clusterizados ao usar criptografia aleatória (há suporte para índices em colunas usando criptografia determinística).
- Colunas incluídas em índices de texto completo (o Always Encrypted não dá suporte à Pesquisa de Texto Completo).
- Colunas computadas.
- Colunas referenciadas por colunas computadas (quando a expressão faz operações sem suporte para Always Encrypted).
- Conjunto de colunas esparsas.
- Colunas referenciadas por estatísticas ao usar criptografia aleatória (há suporte para criptografia determinística).
- Colunas de particionamento.
- Colunas com restrições padrão.
- Colunas referenciadas por restrições exclusivas ao usar criptografia aleatória (há suporte para criptografia determinística).
- Colunas de chave primária ao usar criptografia aleatória (há suporte para criptografia determinística).
- Colunas de referência em restrições de chave estrangeira ao usar criptografia aleatória ou ao usar criptografia determinística, se as colunas referenciadas e de referência usarem chaves ou algoritmos diferentes.
- Colunas referenciadas por restrições de verificação.
- Colunas capturadas/rastreadas usando a captura de dados de alteração.
- Colunas de chave primária em tabelas que têm controle de alterações.
- Colunas mascaradas (usando Máscara dinâmica de dados).
- Colunas nas tabelas de banco de dados. (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 um novo trabalho de desenvolvimento e planeje modificar aplicativos que atualmente usam esse recurso.
Os seguintes recursos não funcionam em colunas criptografadas:
- Replicação do SQL Server (replicação transacional, de mesclagem ou de instantâneo). Há suporte para recursos de replicação física, incluindo Always.
- Consultas distribuídas (servidores vinculados, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Consultas entre bancos de dados que executam junções em colunas (usando criptografia determinística) de bancos de dados diferentes.
Referência do 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.
Instruções
- CREATE COLUMN MASTER KEY (Transact-SQL)
- DROP COLUMN MASTER KEY (Transact-SQL)
- CREATE COLUMN ENCRYPTION KEY (Transact-SQL)
- ALTER COLUMN ENCRYPTION KEY (Transact-SQL)
- DROP COLUMN ENCRYPTION KEY (Transact-SQL)
- CRIAR TABELA (CRIPTOGRAFADO COM)
Exibições do catálogo do sistema e procedimentos armazenados
- sys.column_encryption_keys (Transact-SQL)
- sys.column_encryption_key_values (Transact-SQL)
- sys.column_master_keys (Transact-SQL)
- sp_refresh_parameter_encryption (Transact-SQL)
- sp_describe_parameter_encryption (Transact-SQL)
Consulte 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 Always Encrypted:
- ALTER ANY COLUMN MASTER KEY — necessário para criar e excluir 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 de coluna, que são necessários para consultar colunas criptografadas.
- VER QUALQUER DEFINIÇÃO DE CHAVE DE CRIPTAÇÃO DE COLUNA - necessário para acessar e ler os metadados da chave mestra da 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 DA COLUNA | ALTERAR QUALQUER CHAVE DE ENCRIPTAÇÃO DE COLUNA | EXIBIR QUALQUER DEFINIÇÃO DE CHAVE MESTRA DE COLUNA | EXIBIR TODAS AS DEFINIÇÕES DE CHAVE DE ENCRIPTAÇÃO DE COLUNA |
|---|---|---|---|---|
| Gerenciamento de chaves (criando/alterando/revisando 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 (em seus 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 público fixo. 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.
- 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 fixo público. Isso permite que determinadas ferramentas herdadas existentes (usando versões mais antigas do DacFx) funcionem corretamente. Para trabalhar com colunas criptografadas (mesmo que não as descriptografe), o administrador do banco de dados deve conceder explicitamente as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.