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 nacionais/regionais (por exemplo, números de segurança social dos EUA), armazenados no Banco de Dados SQL do Azure, na Instância Gerenciada 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 proporciona uma separação entre aqueles que possuem os dados e os podem visualizar, e aqueles que gerem os dados mas não deveriam ter acesso – administradores de bases de dados locais, 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 confiança seus dados confidenciais na nuvem e reduzam a probabilidade de roubo de dados por insiders mal-intencionados.
Always Encrypted pode ser configurado para suportar consultas confidenciais limitadas em dados criptografados, as consultas que envolvem comparações de igualdade. Por exemplo, pesquisas de pesquisa de pontos ou associações de igualdade. Estas consultas utilizam encriptação determinística.
Observação
Enclaves seguros estendem as capacidades confidenciais de computação do Always Encrypted com correspondência de padrões, outros operadores de comparação e encriptação no local.
O Always Encrypted torna a encriptação transparente para as aplicações. Um driver com Always Encrypted instalado no computador cliente encripta e desencripta automaticamente dados sensíveis na aplicação cliente. O driver encripta os dados em colunas sensíveis antes de os passar para o Motor de Base de Dados. Depois, o driver reescreve automaticamente as consultas para que a semântica da aplicação 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 Sempre Criptografado
Para configurar o Always Encrypted em seu banco de dados, você precisa:
Implemente chaves criptográficas para proteger os 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 dados em uma coluna criptografada. Uma chave mestre de coluna é uma chave que protege chaves e criptografa uma ou mais chaves de criptografia de coluna. É necessário armazenar chaves mestras de coluna num armazenamento de chaves seguro fora do sistema de gestão de bases de dados. Os locais de armazenamento mais comuns são Azure Key Vault, armazenamento de certificados do Windows ou um módulo de segurança de hardware. Depois, tens de implementar chaves de encriptação de colunas e encriptar cada uma delas com uma chave mestra de coluna. Finalmente, você precisa armazenar os metadados sobre as chaves em seu banco de dados.
- Os metadados da chave-mestra de coluna registam a localização 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 contenham dados confidenciais a serem protegidos. Pode criar novas tabelas com colunas encriptadas ou encriptar colunas de base de dados existentes e dados já existentes. Ao configurar a criptografia para uma coluna, você especifica 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 suporta dois tipos de encriptação:
- A criptografia determinística sempre gera o mesmo valor criptografado para um determinado valor de texto sem formatação. O uso de criptografia determinística permite pesquisas pontuais, uniões de igualdade, agrupamento e indexação em colunas criptografadas. No entanto, também pode permitir que utilizadores não autorizados adivinhem 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.
- A criptografia aleatória usa um método que criptografa dados de maneira menos previsível. A criptografia aleatória é mais segura, mas impede pesquisa, agrupamento, indexação e junção em colunas criptografadas.
Use encriptação determinística para colunas usadas como parâmetros de pesquisa ou agrupamento. Por exemplo, um número de identificação do governo. Use criptografia aleatória para dados como comentários confidenciais de investigação, 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, veja a seção Always Encrypted cryptography. Você pode executar as etapas acima usando 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 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, Transact-SQL (T-SQL) não suportam 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).
Como funcionam as consultas em colunas criptografadas
Um conjunto de pré-requisitos deve ser cumprido, caso o utilizador precise de realizar alguma destas ações:
- Executar uma consulta em colunas de base de dados encriptadas
- Inserir dados em colunas encriptadas
- Recuperar valores de texto simples a partir de colunas encriptadas
- Realizar operações suportadas (por exemplo, pesquisas pontuais) em colunas usando criptografia determinística
Um utilizador ou uma aplicação que emite a consulta deve cumprir os seguintes pré-requisitos:
- Tenha acesso à chave mestra da 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 Always Encrypted habilitado na conexão do banco de dados. A maioria das ferramentas SQL e drivers de cliente SQL oferecem suporte à habilitação do Always Encrypted para conexões de banco de dados.
Observação
Se o utilizador tiver as permissões necessárias para a base de dados para ler os dados, mas não tiver acesso às chaves que os protegem, as ações são possíveis. O utilizador pode recuperar dados cifrados (encriptados) ligando-se à base de dados sem ativar o modo Sempre Encriptado na ligação à base de dados.
Veja como funcionam as consultas em colunas criptografadas:
- Quando um aplicativo emite uma consulta parametrizada, o driver do cliente SQL dentro do aplicativo contata de forma transparente 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 da chave, incluindo a chave de criptografia de coluna criptografada e o local de sua chave mestra de coluna correspondente.
- O driver chama o armazenamento de chaves, contendo chaves mestras de coluna para desencriptar os valores das chaves de criptografia de colunas criptografadas. As chaves de criptografia de coluna de texto não cifrado resultantes são armazenadas em cache para reduzir o número de acessos ao armazenamento de chaves em usos posteriores das mesmas.
- O driver usa as chaves de criptografia de coluna de texto simples 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 que visam colunas criptografadas por seus valores criptografados e envia a consulta ao Mecanismo de Banco de Dados para processamento.
- O Motor de Base de Dados executa a consulta, que pode envolver comparações de igualdade em colunas usando encriptação determinística.
- Se os resultados da consulta incluírem dados de colunas criptografadas, o Mecanismo de Banco de Dados anexará metadados de criptografia para cada coluna, incluindo as informações sobre o algoritmo de criptografia, o tipo de criptografia e os metadados da 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 recebido, o driver primeiro tenta encontrar a chave de criptografia de coluna de texto simples no cache local e só faz uma viagem de ida e volta a um armazenamento de chaves que contém a chave mestra da 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, usando um provedor de armazenamento de chaves mestras 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 armazenamentos de chaves estão disponíveis em bibliotecas de drivers cliente da Microsoft ou como downloads autónomos. Você também pode implementar seu próprio provedor. Os recursos Sempre criptografados, incluindo provedores de armazenamento de chaves mestras de coluna integrados, variam de acordo com uma biblioteca de drivers e sua versão.
Consulte Desenvolver aplicativos usando Always Encrypted para obter a lista de drivers de cliente que suportam 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 aplicam-se a consultas em colunas encriptadas:
A criptografia determinística suporta as seguintes operações envolvendo comparações de igualdade - nenhuma outra operação é permitida.
-
= (Igual) em pesquisas de localização de pontos.
- IN.
- SELECIONAR - AGRUPAR POR.
- DISTINTO.
-
= (Igual) em pesquisas de localização de pontos.
Não são permitidos cálculos em colunas criptografadas usando criptografia aleatória.
Observação
O Always Encrypted com enclaves seguros relaxa a restrição ao permitir correspondência de padrões, operadores de comparação, ordenação e indexação em colunas usando encriptação aleatória.
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.
- Comparando uma coluna criptografada com uma coluna de texto sem formatação ou um literal.
Tais declarações resultam em erros de conflito 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 correspondem 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 para um driver de cliente que você está usando, consulte Desenvolver aplicativos usando o Always Encrypted.
Você deve usar a Parametrização para variáveis Sempre Criptografadas no Azure Data Studio ou no 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 de valor de tabela direcionados para colunas criptografadas.
Não há suporte para consultas que usam as seguintes cláusulas:
Depois de alterar a definição de uma coluna criptografada, execute sp_refresh_parameter_encryption para atualizar os metadados Always Encrypted para o objeto.
A funcionalidade Always Encrypted não é suportada 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 utilizador.
- colunas FILESTREAM
- Colunas com a propriedade IDENTITY.
- Colunas com ROWGUIDCOL propriedade.
- Colunas de cadeia de caracteres (varchar, char, etc.) com agrupamentos que não sejam agrupamentos de ponto de código binário (_BIN2) ao utilizar criptografia determinística.
- 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 Pesquisa de Texto Completo).
- Colunas computadas.
- Colunas referenciadas por colunas computadas (quando a expressão realiza operações não suportadas para Always Encrypted).
- Conjunto de colunas esparso.
- Colunas referenciadas por estatísticas quando se utiliza encriptação aleatória (é suportada encriptação determinística).
- 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 dinâmico de dados).
- 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.
Os seguintes recursos não funcionam em colunas criptografadas:
- Replicação do SQL Server (replicação transacional, de mesclagem ou instantânea). 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 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
- CRIAR CHAVE MESTRA DE COLUNA (Transact-SQL)
- ELIMINAR A CHAVE MESTRA DA COLUNA (Transact-SQL)
- CRIAR CHAVE DE ENCRIPTAÇÃO DE COLUNA (Transact-SQL)
- ALTERAR A CHAVE DE ENCRIPTAÇÃO DA COLUNA (Transact-SQL)
- SOLTAR CHAVE DE CRIPTOGRAFIA DE COLUNA (Transact-SQL)
- CRIAR TABELA (CRIPTOGRAFADA 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:
- ALTERAR QUALQUER CHAVE MESTRA DE COLUNA - necessário para criar e eliminar os metadados da chave mestra de coluna.
- ALTER ANY COLUMN ENCRYPTION KEY - necessário para criar e excluir metadados de chave de criptografia de coluna.
- EXIBIR QUALQUER DEFINIÇÃO DE CHAVE MESTRA DE COLUNA - 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 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 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
- 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 armazenamentos de chaves), protegendo as colunas e não acesse a tentativa de texto sem formatação.
- 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 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.
- 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 pública. Isso permite que certas ferramentas herdadas existentes (usando versões mais antigas do DacFx) funcionem corretamente. Para trabalhar com colunas criptografadas (mesmo que não as descodifique), um administrador de banco de dados deve conceder explicitamente as permissões para VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.