Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Banco de Dados SQL do Azure
Instância Gerenciada do SQL do Azure
O Always Encrypted e o 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 nacional ou regional (como números de segurança social dos EUA), no Banco de Dados SQL do Azure, na Instância Gerenciada de SQL do Azure e nos bancos de dados do SQL Server. Você pode criptografar dados confidenciais em aplicativos cliente, garantindo que as chaves de criptografia nunca sejam expostas ao Mecanismo de Banco de Dados. Essa abordagem 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, com o Always Encrypted, os clientes podem armazenar seus dados confidenciais na nuvem com confiança e reduzir a probabilidade de roubo de dados por pessoas mal-intencionadas.
O Always Encrypted tem determinadas restrições, como a incapacidade de executar operações em dados criptografados, incluindo classificação e filtragem (exceto para pesquisas de ponto usando criptografia determinística). Essa limitação 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 em uma área de memória protegida chamada enclave seguro. Os enclaves seguros aprimoram os recursos de computação confidencial do Always Encrypted com suporte a correspondência de padrões, outros operadores de comparação e criptografia in-loco.
O Always Encrypted garante que a criptografia seja perfeita para aplicativos. No cliente, o driver habilitado para Always Encrypted criptografa dados confidenciais antes de enviá-los ao 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 Always Encrypted
Observação
Para aplicativos que precisam executar a correspondência de padrões, use operadores de comparação, classificação e índice em colunas criptografadas, implemente o Always Encrypted com enclaves seguros.
Esta seção traz 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:
Provisione 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 criptografa os 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.
Armazene chaves mestras de coluna em um repositório de chaves confiável fora do sistema de banco de dados, como o Azure Key Vault, o repositório de certificados do Windows ou um módulo de segurança de hardware. Após essa etapa, provisione chaves de criptografia de coluna e criptografe cada chave com uma chave mestra de coluna.
Por fim, é necessário armazenar os metadados sobre as chaves no banco de dados. Os metadados da chave mestra de coluna incluem a localização da chave mestra da 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.
Configure a criptografia para colunas de banco de dados específicas que incluem informações confidenciais para garantir a proteção. Essa etapa pode exigir a criação de novas tabelas com colunas criptografadas ou a criptografia das colunas e dados existentes. Ao configurar a criptografia para uma coluna, especifique detalhes sobre o algoritmo de criptografia, a chave de criptografia de coluna para proteger os dados e o 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. Usando criptografia determinística, você pode executar pesquisas de ponto, junções de igualdade, agrupamento e indexação em colunas criptografadas. No entanto, usuários não autorizados podem adivinhar 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 forma imprevisível. Cada entrada de texto simples idêntica resulta em uma saída criptografada distinta. Esse método 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, adote Always Encrypted com enclaves seguros e aplique criptografia randomizada. A criptografia aleatória Always Encrypted (sem enclaves seguros) não dá suporte à pesquisa, agrupamento, indexação ou junção em colunas criptografadas. Em vez disso, para colunas destinadas a fins de pesquisa ou agrupamento, você deve usar criptografia determinística. Esse tipo de criptografia permite operações como pesquisas de ponto, uniões baseadas em igualdade, agrupamento e indexação em colunas criptografadas.
Como o sistema de banco de dados por design não tem acesso a chaves criptográficas, qualquer criptografia de coluna requer mover e criptografar dados fora do banco de dados. O 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, você encontrará as mesmas dificuldades novamente. Usar o Always Encrypted com enclaves seguros elimina a necessidade de mover dados para fora do banco de dados. Como o enclave é confiável, um driver cliente em seu aplicativo ou uma ferramenta como o SSMS (SQL Server Management Studio) pode compartilhar com segurança as chaves com o enclave durante operações criptográficas. O enclave pode criptografar ou recriptografar colunas no local, diminuindo significativamente o tempo necessário para essas ações.
Para obter detalhes sobre os algoritmos criptográficos do Always Encrypted, consulte Criptografia Always Encrypted.
Você pode executar as etapas anteriores usando ferramentas SQL:
- Provisionar chaves Always Encrypted usando o SQL Server Management Studio
- Configurar o Always Encrypted usando o 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 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. Assim, o Transact-SQL (T-SQL) não dá suporte a provisionamento de chaves ou operações criptográficas. Pela mesma razão, a criptografia de dados já existentes ou criptografá-los novamente (com outro tipo de criptografia ou uma chave de criptografia de coluna) precisa ser executada 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 do Always Encrypted para o objeto.
Limitações
Estas limitações se aplicam a consultas em colunas criptografadas:
Não é possível executar cálculos em colunas criptografadas com criptografia aleatória. A criptografia determinística dá suporte às operações a seguir que envolvem comparações de igualdade. Nenhuma outra operação é permitida:
- = (Iguais) (Transact-SQL) nas pesquisas de pesquisa de ponto.
- IN (Transact-SQL).
- SELECT - GROUP BY- Transact-SQL.
- DISTINCT.
Observação
Para aplicativos que precisam executar a correspondência de padrões, use operadores de comparação, classificação e índice em colunas criptografadas, implemente o Always Encrypted com enclaves seguros.
Você não pode usar instruções de consulta que disparam cálculos envolvendo dados sem formatação e criptografados. Por exemplo:
- Comparar uma coluna criptografada a uma coluna de texto não criptografado ou literal.
- Copiando dados de uma coluna de texto sem formatação para uma coluna criptografada (ou o contrário)
UPDATE,BULK INSERTouSELECT INTOINSERT..SELECT. - Inserir literais em colunas criptografadas.
Essas instruções resultam em erros de conflito 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 charOs aplicativos precisam usar parâmetros de consulta para fornecer valores para colunas criptografadas. Por exemplo, quando você estiver inserindo dados em colunas criptografadas ou filtrando-os usando criptografia determinística, use parâmetros de consulta. Não há suporte para a passagem de literais ou variáveis T-SQL que correspondam 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.
No SSMS, é essencial aplicar a parametrização de variáveis Always Encrypted para executar consultas que lidam com valores associados a colunas criptografadas. Esse requisito 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 com valor de tabela direcionados a colunas criptografadas.
Não há suporte para consultas que usam as seguintes cláusulas:
O Always Encrypted não tem suporte para as colunas com as seguintes características:
- Colunas usando um dos seguintes tipos de dados: xml, carimbo de data/hora, rowversion, imagem, ntext, texto, sql_variant, hierarchyid, geography, geometria, vetor, alias, tipos definidos pelo usuário.
- Colunas FILESTREAM .
- Colunas com a propriedade IDENTITY.
- Colunas com a propriedade ROWGUIDCOL.
- Colunas de String (varchar, char e outras) com ordenações diferentes de ordenações de ponto de código binário (
_BIN2). A ordenação não deve ser diferente da ordenação padrão do banco de dados. - Colunas que são chaves para índices clusterizados e não clusterizados ao usar a criptografia aleatória (há suporte para índices em colunas que usam criptografia determinística).
- Colunas incluídas em índices de texto completo (o Always Encrypted não dá suporte Full-Text Pesquisa).
- Especifique colunas computadas em uma tabela.
- Colunas referenciadas por colunas computadas quando a expressão faz operações sem suporte para Always Encrypted.
- Usar 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 a criptografia aleatória (há suporte para a 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 ou controladas usando captura de dados de mudança.
- Colunas de chave primária em tabelas que têm controle de alterações.
- Colunas mascaradas usando máscara de dados dinâmicos.
- Quando uma coluna em uma tabela com otimização de memória é referenciada em um módulo compilado nativamente, a criptografia não pode ser aplicada a nenhuma das colunas nessa tabela.
- Colunas nas tabelas de banco de dados. (Tabelas com colunas criptografadas com o Sempre Criptografado podem ser habilitadas para Stretch.)
Importante
O banco de dados de ampliação 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 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:
- Replicação do SQL Server (replicação transacional, replicação de mesclagem ou replicação instantânea). Há suporte para recursos de replicação física, incluindo grupos de disponibilidade Always On.
- Consultas distribuídas (servidores vinculados, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Consultas entre bancos de dados que executam junções em colunas criptografadas de bancos de dados diferentes.
Referência Transact-SQL do Always Encrypted
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
| instrução DDL | Description |
|---|---|
| CRIAR CHAVE MESTRE DE COLUNA | Cria um objeto de metadados de chave mestra de coluna em um banco de dados |
| DROP COLUMN MASTER KEY | Remove uma chave mestra de banco de dados. |
| CRIAR CHAVE DE CRIPTOGRAFIA DE COLUNA | Cria um objeto de chave de criptografia de coluna no banco de dados. |
| ALTERAR CHAVE DE CRIPTOGRAFIA DA COLUNA | Altera uma chave de criptografia de coluna em um banco de dados, adicionando ou removendo um valor criptografado. |
| EXCLUIR CHAVE DE CRIPTOGRAFIA DE COLUNA | Remove uma chave de criptografia de coluna de um banco de dados. |
| CRIAR TABELA (CRIPTOGRAFADO COM) | Especifica colunas de criptografia |
Exibições do catálogo e procedimentos armazenados do sistema
| Exibições do catálogo e procedimentos armazenados do sistema | 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 dos parâmetros do procedimento armazenado não vinculado a esquema, da função definida pelo usuário, da exibição, do gatilho DML, do gatilho DDL no nível do banco de dados ou do gatilho DDL no nível do servidor especificados |
| sp_describe_parameter_encryption | Analisa a instrução Transact-SQL especificada e seus parâmetros, para determinar quais parâmetros correspondem às colunas de banco de dados protegidas usando o recurso Always Encrypted. |
Para obter informações sobre metadados de criptografia armazenados para cada coluna, consulte sys.columns.
Permissões de banco de dados
O Always Encrypted usa quatro permissões de banco de dados.
| Exibições do catálogo e procedimentos armazenados do sistema | Description |
|---|---|
ALTER ANY COLUMN MASTER KEY |
Necessário para criar e excluir uma chave mestra de coluna. |
ALTER ANY COLUMN ENCRYPTION KEY |
Necessário para criar e excluir uma chave de criptografia de coluna. |
VIEW ANY COLUMN MASTER KEY DEFINITION |
Necessária para acessar e ler os metadados das chaves mestras de coluna, que são necessárias para consultar colunas criptografadas. |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
Necessária para acessar e ler os metadados das chaves de criptografia de coluna, que são necessárias 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 (criando, alterando ou 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 DEFINITIONeVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONsão necessárias ao selecionar colunas criptografadas. Essas permissões protegem as colunas mesmo que o usuário não tenha permissão para as chaves mestras de coluna em seus repositórios de chaves e impedem o acesso ao texto sem formatação.No SQL Server, o papel fixo de banco de dados pública concede permissões
VIEW ANY COLUMN MASTER KEY DEFINITIONeVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONpor padrão. Um administrador de banco de dados pode optar por revogar ou negar essas permissões à 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, a função de banco de dados fixa pública não concede
VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONpermissões por padrão. Essa alteração permite que determinadas ferramentas herdadas existentes que usam versões mais antigas do DacFx funcionem corretamente. Para trabalhar com colunas criptografadas (mesmo que não as descriptografem), um administrador de banco de dados deve conceder explicitamente as permissõesVIEW ANY COLUMN MASTER KEY DEFINITIONeVIEW ANY COLUMN ENCRYPTION KEY DEFINITION.