Always Encrypted
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada de SQL do Azure
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, Instância Gerenciada de SQL do Azure e SQL Server Bancos. 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. Isso 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 elevados. Como resultado, Always Encrypted permite que os clientes armazenem com confiança seus dados confidenciais na nuvem e reduzam a probabilidade de roubo de dados por pessoas mal-intencionadas.
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 ou junções de igualdade. Essas consultas aproveitam a criptografia determinística.
Observação
Enclaves seguros estendem recursos de computação confidencial de Always Encrypted com correspondência de padrões, outros operadores de comparação e criptografia in-loco. Para obter mais informações, consulte Always Encrypted com enclaves seguros.
O Always Encrypted torna a criptografia transparente para os aplicativos. Um driver habilitado para Sempre criptografado instalado no computador cliente realiza isso automaticamente criptografando e descriptografando dados confidenciais no aplicativo cliente. O driver criptografa as colunas de dados confidenciais antes de passar os dados para o Mecanismo de Banco de Dadose reconfigura automaticamente as consultas para que a semântica do aplicativo seja preservada. Da mesma forma, o driver descriptografa os dados de maneira transparente, armazenados em colunas de banco de dados criptografadas, contidas nos resultados da consulta.
Configurar Always Encrypted
Esta seção fornece uma visão geral da configuração de Always Encrypted. Para obter detalhes e para começar, consulte Tutorial: Introdução ao Always Encrypted.
Para configurar Always Encrypted no banco de dados, você precisa:
Provisione chaves criptográficas para proteger seus dados. O Always Encrypted usa dois tipos de chaves:
- Chaves de criptografia de coluna.
- Chaves de master 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.
Você precisa armazenar chaves de master de coluna em um repositório de chaves confiável fora do sistema de banco de dados, como Key Vault do Azure, repositório de certificados do Windows ou um módulo de segurança de hardware.
Em seguida, você precisa provisionar chaves de criptografia de coluna e criptografar cada uma delas com uma coluna master chave.
Por fim, você precisa armazenar os metadados sobre as chaves no banco de dados.
- A coluna master metadados de chave captura o local da coluna master chave.
- 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.
Para obter mais informações sobre como gerenciar chaves de Always Encrypted, consulte Visão geral do gerenciamento de chaves para Always Encrypted
Configure a criptografia para colunas de banco de dados selecionadas que contêm dados confidenciais a serem protegidos. Isso pode envolver a criação de novas tabelas com colunas criptografadas ou a criptografia de colunas de banco de dados existentes e dados 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. 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. 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 há um conjunto pequeno de valores criptografados possíveis, como Verdadeiro/Falso ou região Norte/Sul/Leste/Oeste.
Criptografia aleatória usa um método que criptografa os dados de uma maneira menos previsível. A criptografia aleatória é mais segura, mas impede o uso de pesquisas, agrupamento, indexação e junção em colunas criptografadas.
Use a criptografia determinística para colunas que serão usadas como parâmetros de pesquisa ou de agrupamento. Por exemplo, um número de ID do governo. Use a criptografia aleatória para dados como comentários de investigação confidencial, que não estão agrupados com outros registros e não são usados para unir tabelas.
Para obter detalhes sobre os algoritmos de criptografia Always Encrypted, confira Criptografia Always Encrypted.
Você pode executar as etapas acima usando as ferramentas do SQL:
- SQL Server Management Studio (SSMS)
- SQL Server PowerShell
- sqlpackage – que automatiza o processo de instalação
Para garantir que Always Encrypted chaves e dados confidenciais protegidos nunca sejam revelados em texto não criptografado para o ambiente de 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, o Transact-SQL (T-SQL) não dá suporte ao provisionamento de chaves nem a 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 SQL podem automatizar isso).
Observação
Always Encrypted com enclaves seguros levanta algumas das restrições acima, permitindo operações criptográficas em dados existentes usando T-SQL e elimina a necessidade de mover os dados para fora do banco de dados.
Como funcionam as consultas em colunas criptografadas
Para executar uma consulta em colunas de banco de dados criptografadas, insira dados em colunas criptografadas, recupere valores de texto sem formatação de colunas criptografadas ou execute operações com suporte (por exemplo, pesquisas de ponto) em colunas usando criptografia determinística, um usuário ou um aplicativo que emite a consulta deve atender aos seguintes pré-requisitos:
- Ter acesso à coluna master chave que protege os dados. O acesso à chave é necessário além das permissões no nível do banco de dados, como
SELECT
na tabela que contém os dados. - Conecte-se ao banco de dados com Always Encrypted habilitado na conexão de banco de dados. A maioria das ferramentas SQL e drivers de cliente SQL dão suporte à habilitação de Always Encrypted para conexões de banco de dados.
Observação
Se o usuário tiver permissões de banco de dados necessárias para ler os dados, mas não tiver acesso às chaves que os protegem, o usuário ainda poderá recuperar dados de cyphertext (criptografado) conectando-se ao banco de dados sem habilitar 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 do cliente SQL dentro do aplicativo entra em contato de forma transparente com o Mecanismo de Banco de Dados (chamando sp_describe_parameter_encryption (Transact-SQL) para determinar quais parâmetros se destinam a 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 coluna correspondente master chave.
- O driver chama o repositório de chaves, contendo chaves de master de coluna para descriptografar os valores de chave de criptografia de coluna criptografada. As chaves de criptografia de coluna de texto não criptografado resultantes são armazenadas em cache para reduzir o número de viagens de ida e volta para o 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 sem formatação obtidas para criptografar os parâmetros de consulta correspondentes a colunas criptografadas.
- O driver substitui os valores de texto sem formatação dos parâmetros direcionados às 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, o que pode envolver comparações de igualdade em colunas usando criptografia determinística.
- Se os resultados da consulta incluirem 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 de chave para o 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 faz apenas uma viagem de ida e volta para um repositório de chaves que contém a coluna master chave se não encontrar a chave no cache.
- O driver descriptografa os resultados e retorna valores de texto sem formatação para o aplicativo.
Um driver cliente interage com um repositório de chaves que contém uma chave mestra de coluna usando um provedor de repositório de chaves mestras de coluna, que é um componente de software do cliente que encapsula um repositório de chaves que contém a chave mestra de coluna. Provedores para tipos comuns de repositórios de chaves estão disponíveis em bibliotecas de driver do lado do cliente da Microsoft ou como downloads autônomos. Você também pode implementar seu próprio provedor. Recursos Always Encrypted, incluindo provedores de repositório de chaves mestras de coluna internas, 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 dão suporte a 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 pesquisa de ponto.
- IN.
- SELECT – AGRUPAR POR.
- DISTINCT.
Nenhuma computação em colunas criptografadas usando criptografia aleatória é permitida.
Observação
Always Encrypted com enclaves seguros relaxa a restrição acima, 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 que envolvem 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 um 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.. SELECIONE.
- Inserindo literais em colunas criptografadas.
Essas instruções resultam em erros de confronto 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 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 a 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 de cliente que você está usando, consulte Desenvolver aplicativos usando Always Encrypted.
Você deve usar a Parametrização para Always Encrypted variáveis 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 a criptografia determinística).
Não há suporte para parâmetros com valor de tabela direcionados a 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 do objeto.
Always Encrypted não tem suporte para as colunas com as características abaixo:
- Colunas que usam um dos seguintes tipos de dados: xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, alias, user-defined types.
- Colunas FILESTREAM
- Colunas com a propriedade IDENTITY .
- Colunas com a propriedade ROWGUIDCOL .
- Colunas de cadeia de caracteres (varchar, char etc.) com ordenações diferentes de ordenações de ponto de código binário (_BIN2) ao usar a criptografia determinística.
- Colunas que são chaves para índices clusterizados e não clusterizados ao usar a criptografia aleatória (há suporte para índices em colunas usando criptografia determinística).
- Colunas incluídas em índices de texto completo (Always Encrypted não dá suporte à Pesquisa de Texto Completo).
- Colunas computadas.
- Colunas referenciadas por colunas computadas (quando a expressão realiza operações sem suporte para o Always Encrypted).
- Conjunto de colunas esparsas.
- Colunas referenciadas por estatísticas ao usar criptografia aleatória (há suporte para criptografia determinística).
- Particionamento de colunas.
- 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 a criptografia aleatória (há suporte para a criptografia determinística).
- Referenciando colunas em restrições de chave estrangeira ao usar criptografia aleatória ou ao usar criptografia determinística, se as colunas referenciadas e referenciadas usarem chaves ou algoritmos diferentes.
- Colunas referenciadas por restrições marcar.
- Colunas capturadas/rastreadas usando a captura de dados de alterações.
- Colunas de chave primária em tabelas que têm controle de alterações.
- Colunas mascaradas (usando Máscara Dinâmica de Dados).
- Colunas em tabelas de banco de dados estendido. (Tabelas com colunas criptografadas com o Sempre Criptografado podem ser habilitadas para Stretch.)
Importante
O Stretch Database foi preterido no SQL Server 2022 (16.x). Esse recurso será removido em uma versão futura do Microsoft SQL Server. 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:
- SQL Server replicação (replicação transacional, mesclagem ou 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.
Always Encrypted referência do Transact-SQL
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)
- CREATE TABLE (ENCRYPTED WITH)
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 a coluna master metadados de chave.
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 a coluna master metadados de chave, que são necessários para consultar colunas criptografadas.
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION – necessário para acessar e ler a coluna master metadados de chave, 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 |
---|---|---|---|---|
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 a coluna master chaves (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 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 determinadas ferramentas herdadas existentes (usando versões mais antigas do DacFx) funcionem corretamente. Consequentemente, para trabalhar com colunas criptografadas (mesmo que não as descriptografem), um administrador de banco de dados deve conceder explicitamente as permissões VIEW ANY COLUMN MASTER KEY DEFINITION e VIEW ANY COLUMN ENCRYPTION KEY DEFINITION .
Próximas etapas
- Para experimentar Always Encrypted, consulte Tutorial: Introdução ao Always Encrypted.