Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2019 (15.x) e versões posteriores no Windows
Azure SQL Database
Este artigo descreve como criar e usar índices em colunas encriptadas usando chaves de encriptação de colunas com suporte a enclave com Always Encrypted com enclaves seguros.
O Always Encrypted com enclaves seguros suporta:
- Índices agrupados e não agrupados em colunas encriptadas usando encriptação determinística e chaves habilitadas pelo enclave.
- Tais índices são ordenados com base em texto cifrado. Não se aplicam considerações especiais a tais índices. Podes geri-los e usá-los da mesma forma que índices em colunas encriptadas usando encriptação determinística e chaves que não são ativadas por enclave (como no Always Encrypted).
- Índices não agrupados em colunas encriptadas utilizando encriptação aleatória e chaves com suporte de enclave.
- Os valores-chave na estrutura de dados índice (B-tree) são encriptados e ordenados com base nos seus valores de texto simples. Para mais informações, consulte Índices em colunas habilitadas por enclave.
Observação
O restante deste artigo discute índices não agrupados em colunas encriptadas usando encriptação aleatória e chaves habilitadas por enclave.
Como um índice numa coluna usando encriptação aleatória e uma chave de encriptação de coluna habilitada por enclave contém dados encriptados (texto cifrado) ordenados com base em texto simples, o SQL Server Engine deve usar o enclave para qualquer operação que envolva criar, atualizar ou pesquisar um índice, incluindo:
- Criar ou reconstruir um índice.
- Inserir, atualizar ou eliminar uma linha numa tabela (contendo uma coluna indexada/encriptada), o que desencadeia a inserção e/ou remoção de uma chave de índice para/do índice.
- Comandos de execução
DBCCque envolvem verificar a integridade dos índices, por exemplo DBCC CHECKDB (Transact-SQL) ou DBCC CHECKTABLE (Transact-SQL). - Recuperação da base de dados (por exemplo, após falhas e reinício do SQL Server), se o SQL Server precisar de desfazer alterações ao índice (mais detalhes abaixo).
Todas as operações acima exigem que o enclave tenha a chave de encriptação da coluna correspondente à coluna indexada. A chave é necessária para desencriptar as chaves de índice. Em geral, o enclave pode obter uma chave de encriptação de coluna de duas formas:
- Diretamente da aplicação do cliente.
- A partir do cache das chaves de encriptação de coluna.
Invocar operações de indexação com chaves de encriptação de colunas fornecidas diretamente pelo cliente
Para que este método de invocação de operações de indexação funcione, a aplicação (incluindo uma ferramenta, como o SQL Server Management Studio (SSMS)) que emite uma consulta que desencadeia uma operação num índice deve:
- Ligue-se à base de dados com as funcionalidades Always Encrypted e cálculos em enclave ativados para a ligação à base de dados.
- A aplicação deve ter acesso à chave mestra da coluna que protege a chave de encriptação da coluna indexada.
Uma vez que o SQL Server Engine analisa a consulta da aplicação e determina que será necessário atualizar um índice numa coluna encriptada para executar a consulta, instrui o controlador cliente a libertar a chave de encriptação da coluna necessária para o enclave através de um canal seguro. Este é exatamente o mesmo mecanismo que é usado para fornecer ao enclave chaves de encriptação de colunas para processar quaisquer outras consultas que não utilizem índices. Por exemplo, encriptação no local ou consultas usando correspondência de padrões e comparações de intervalos.
Este método é útil para garantir que a presença de índices em colunas encriptadas é transparente para aplicações já ligadas à base de dados com o Always Encrypted e os cálculos do enclave ativados. A ligação à aplicação pode usar o enclave para o processamento de consultas. Depois de criar um índice numa coluna, o driver dentro da sua aplicação fornecerá de forma transparente chaves de encriptação de colunas ao enclave para operações de indexação. Criar índices pode aumentar o número de consultas que exigem que a aplicação envie as chaves de encriptação das colunas para o enclave.
Para usar este método, siga as orientações gerais para executar instruções usando um enclave seguro em - Execute Transact-SQL instruções usando enclaves seguros.
Para instruções passo a passo sobre como usar este método, veja Tutorial: Criação e uso de índices em colunas habilitadas por enclave usando encriptação aleatória.
Invocar operações de indexação usando chaves de encriptação de colunas em cache
Assim que uma aplicação cliente envia uma chave de encriptação de colunas para o enclave para processar qualquer consulta que exija cálculos do enclave, o enclave armazena em cache a chave de encriptação da coluna numa cache interna. Este cache está localizado dentro do enclave e é inacessível do exterior.
Se a mesma ou outra aplicação cliente usada pelo mesmo utilizador ou por outro disparar uma operação num índice sem fornecer diretamente a encriptação da coluna necessária, o enclave irá procurar a chave de encriptação da coluna na cache. Como resultado, a operação no índice tem sucesso, embora a aplicação cliente não tenha fornecido a chave.
Para que este método de invocação das operações de indexação funcione, a aplicação deve ligar-se à base de dados sem o Always Encrypted ativado para a ligação e a chave de encriptação da coluna necessária deve estar disponível na cache dentro do enclave.
Este método de invocação de operações é suportado apenas para consultas que não requerem chaves de encriptação de coluna para outras operações, não relacionadas com índices. Por exemplo, uma aplicação que insere uma linha usando uma INSERT instrução numa tabela que contém uma coluna encriptada, é obrigada a ligar-se à base de dados com o Always Encrypted ativado na cadeia de ligação e deve ter acesso às chaves, independentemente de a coluna encriptada ter ou não um índice.
Este método é útil para:
Garantir que a presença de índices em colunas habilitadas pelo enclave usando encriptação aleatória é transparente para aplicações e utilizadores que não têm acesso às chaves e aos dados em texto simples.
Garante que criar um índice numa coluna encriptada não interrompe consultas existentes. Se uma aplicação emitir uma consulta numa tabela contendo colunas encriptadas sem ter acesso às chaves, a aplicação pode continuar a correr sem ter acesso às chaves após o DBA criar um índice. Por exemplo, considere uma aplicação que executa a consulta abaixo na tabela Employees que contém colunas encriptadas. O DBA não criou um índice em nenhuma coluna encriptada.
DELETE FROM [dbo].[Employees] WHERE [EmployeeID] = 1; GOSe a aplicação submeter a consulta por uma ligação sem Always Encrypted e os cálculos do enclave ativados, a consulta terá sucesso. A consulta não desencadeia quaisquer cálculos em colunas encriptadas. Depois de um DBA criar um índice em quaisquer colunas encriptadas, a consulta desencadeia a remoção das chaves de índice dos índices. O enclave precisa das chaves de encriptação das colunas nesta situação. No entanto, a aplicação poderá continuar a executar esta consulta pela mesma ligação, desde que o proprietário dos dados tenha fornecido as chaves de encriptação da coluna ao enclave.
Alcançar a separação de funções na gestão de índices, pois permite aos DBAs criar e alterar índices em colunas encriptadas, sem acesso a dados sensíveis.
Sugestão
sp_enclave_send_keys (Transact-SQL) permite-lhe enviar facilmente todas as chaves de encriptação de colunas habilitadas pelo enclave usadas para índices para o enclave, e preencher o cache de chaves.
Para instruções passo a passo sobre como usar este método, veja Tutorial: Criação e uso de índices em colunas habilitadas por enclave usando encriptação aleatória.