Solução de problemas comuns do Always Encrypted com enclaves seguros
Aplica-se a: SQL Server 2019 (15.x) e versões posteriores – Somente Windows Banco de Dados SQL do Azure
Este artigo descreve como identificar e resolver problemas comuns que você pode encontrar ao executar instruções do T-SQL (Transact-SQL) usando Always Encrypted com enclaves seguros.
Para obter informações sobre como executar consultas usando enclaves seguros, confira Executar instruções Transact-SQL usando enclaves seguros.
Erros de conexão do banco de dados
Para executar instruções usando um enclave seguro, você precisa habilitar o Always Encrypted, especificar um protocolo de atestado e, se aplicável, um URL de atestado, para a conexão de banco de dados, conforme explicado em Pré-requisitos para execução de instruções usando enclaves seguros. No entanto, a conexão falhará se você especificar um protocolo de atestado, mas seu Banco de Dados SQL do Azure ou sua instância do SQL Server de destino não der suporte a enclaves seguros ou estiver configurado incorretamente.
- Se você está usando Banco de Dados SQL do Azure com enclaves Intel SGX, verifique se o banco de dados usa a configuração de hardware série DC. Para obter mais informações, confira Habilitar enclaves do Intel SGX para o banco de dados SQL do Azure.
- Se você está usando o Banco de Dados SQL do Azure com enclaves VBS, verifique se a propriedade de banco de dados preferredEnclaveType está definida como VBS. Para obter mais informações, confira Habilitar enclaves SBV para seu Banco de Dados SQL do Azure.
- Se você está usando o SQL Server 2019 (15.x) ou posterior, verifique se o enclave seguro está configurado corretamente para sua instância. Para obter mais informações, confira Configurar o enclave seguro no SQL Server.
Erros de atestado ao usar o Atestado do Microsoft Azure
Observação
Esta seção se aplica apenas ao Banco de Dados SQL do Azure com enclaves Intel SGX.
Antes que um driver de cliente envie uma instrução T-SQL para o servidor lógico do SQL do Azure para execução, o driver dispara o fluxo de trabalho de atestado de enclave a seguir usando o Atestado do Microsoft Azure.
- O driver do cliente passa a URL de atestado, especificada na conexão de banco de dados, para o servidor lógico do SQL do Azure.
- O servidor lógico do SQL do Azure coleta a evidência sobre o enclave, o ambiente de hospedagem dele e o código em execução dentro do enclave. Em seguida, o servidor envia uma solicitação de atestado para o provedor de atestado, referenciado na URL de atestado.
- O provedor de atestado valida a evidência em relação à política configurada e emite um token de atestado para o servidor lógico do SQL do Azure. O provedor de atestado assina o token de atestado com a respectiva chave privada.
- O servidor lógico do SQL do Azure envia o token de atestado para o driver do cliente.
- O cliente entra em contato com o provedor de atestado na URL de atestado especificada para recuperar a chave pública dele e verifica a assinatura no token de atestado.
Os erros podem ocorrer em várias etapas do fluxo de trabalho acima devido a configurações incorretas. Aqui estão os erros comuns de atestado, suas causas raiz e as etapas de solução de problemas recomendadas:
- O servidor lógico do SQL do Azure não pode se conectar ao provedor de atestado no Atestado do Azure (etapa 2 do fluxo de trabalho acima), especificado na URL de atestado. As causas prováveis incluem:
- A URL de atestado está incorreta ou incompleta. Para obter mais informações, confira Determinar a URL de atestado para sua política de atestado.
- O provedor de atestado foi excluído acidentalmente.
- O firewall foi configurado para o provedor de atestado, mas não permite o acesso aos serviços da Microsoft.
- Um erro de rede intermitente faz com que o provedor de atestado fique indisponível.
- Seu servidor lógico do SQL do Azure não está autorizado a enviar solicitações de atestado para o provedor de atestado. Verifique se o administrador do seu provedor de atestado adicionou o servidor de banco de dados à função de Leitor de Atestado.
- A validação da política de atestado falha (na etapa 3 do fluxo de trabalho acima).
- Uma política de atestado incorreta é a causa raiz provável. Verifique se você está usando a política recomendada pela Microsoft. Para obter mais informações, confira Criar e configurar um provedor de atestado.
- A validação da política também pode falhar como resultado de uma violação de segurança que compromete o enclave do lado do servidor.
- O aplicativo cliente não consegue se conectar ao provedor de atestado e recuperar a chave de assinatura pública (na etapa 5). As causas prováveis incluem:
- A configuração de firewalls entre seu aplicativo e o provedor de atestado pode bloquear as conexões. Para solucionar problemas na conexão bloqueada, verifique se você pode conectar-se ao ponto de extremidade de OpenID do provedor de atestado. Por exemplo, use um navegador da Web do computador que hospeda o aplicativo para ver se você pode conectar-se ao ponto de extremidade OpenID. Para obter mais informações, confira Configuração de Metadados – Get.
Erros de atestado ao usar o Serviço Guardião de Host
Observação
Esta seção se aplica apenas ao SQL Server 2019 (15.x) e posteriores.
Antes que um driver de cliente envie uma instrução T-SQL para o SQL Server para execução, o driver dispara o fluxo de trabalho de atestado de enclave a seguir usando o HGS (Serviço Guardião de Host).
- O driver de cliente chama o SQL Server para iniciar o atestado.
- O SQL Server coleta a evidência sobre o enclave, o ambiente de hospedagem dele e o código em execução dentro do enclave. O SQL Server solicita um certificado de integridade da instância do HGS com a qual o computador que hospeda o SQL Server foi registrado. Para obter mais informações, confira Registrar computador com o Serviço Guardião de Host.
- O HGS valida a evidência e emite o certificado de integridade para SQL Server. O HGS assina o certificado de integridade com a chave privada dele.
- O SQL Server envia o certificado de integridade para o driver do cliente.
- O driver do cliente contata o HGS na URL de atestado, especificada para a conexão de banco de dados, a fim de recuperar a chave pública do HGS. O driver do cliente verifica a assinatura no certificado de integridade.
Os erros podem ocorrer em várias etapas no fluxo de trabalho acima devido a configurações incorretas. Aqui estão alguns erros comuns de atestado, suas causas raiz e as etapas de solução de problemas recomendadas:
- O SQL Server não pode se conectar ao HGS (etapa 2 do fluxo de trabalho acima) devido a um erro de rede intermitente. Para solucionar problemas de conexão, o administrador do computador SQL Server deve verificar se o computador pode se conectar ao computador do HGS.
- A validação na etapa 3 falha. Para solucionar problemas de validação:
- O administrador do computador SQL Server deve trabalhar com o administrador de aplicativos cliente para verificar se o computador SQL Server está registrado com a mesma instância de HGS que a instância referenciada na URL de atestado no lado do cliente.
- O administrador do computador SQL Server deve confirmar se o computador SQL Server pode atestar com êxito seguindo as instruções na Etapa 5: Confirmar que o host pode atestar com sucesso.
- O aplicativo cliente não pode se conectar ao HGS nem recuperar a chave de assinatura pública dele (na etapa 5). A causa provável é:
- A configuração de um dos firewalls entre seu aplicativo e o provedor de atestado pode bloquear as conexões. Verifique se o computador que hospeda o aplicativo pode se conectar ao computador do HGS.
Erros de criptografia in-loco
Esta seção lista os erros comuns que você pode encontrar ao usar ALTER TABLE
/ALTER COLUMN
para criptografia in-loco (além dos erros de atestado descritos nas seções anteriores). Para obter mais informações, confira Configurar a criptografia de coluna in-loco usando o Always Encrypted com enclaves seguros.
- A chave de criptografia de coluna que você está tentando usar para criptografar, descriptografar ou criptografar novamente os dados não é uma chave habilitada para enclave. Para obter mais informações sobre os pré-requisitos para criptografia in-loco, confira Pré-requisitos. Para obter informações sobre como provisionar chaves habilitadas para enclave, confira Provisionar chaves habilitadas para enclave.
- Você não habilitou o Always Encrypted e os cálculos de enclave para a conexão de banco de dados. Confira Pré-requisitos para executar instruções usando enclaves seguros.
- A instrução
ALTER TABLE
/ALTER COLUMN
dispara uma operação criptográfica e altera o tipo de dados da coluna ou define uma ordenação com uma página de código diferente da página de código de ordenação atual. Não é permitido combinar operações criptográficas com alterações em tipos de dados ou páginas de ordenação. Para resolver o problema, use instruções separadas; uma instrução para alterar o tipo de dados ou a página de código de ordenação e outra instrução para criptografia in-loco.
Erros ao executar consultas DML confidenciais usando enclaves seguros
Esta seção lista os erros comuns que você pode encontrar ao executar consultas DML confidenciais usando enclaves seguros (além dos erros de atestado descritos nas seções anteriores).
- A chave de criptografia de coluna configurada para a coluna que você está consultando não é uma chave habilitada para enclave.
- Você não habilitou o Always Encrypted e os cálculos de enclave para a conexão de banco de dados. Para obter mais informações, confira Pré-requisitos para executar instruções usando enclaves seguros.
- A coluna que você está consultando usa criptografia determinística. Consultas DML confidenciais usando enclaves seguros não são compatíveis com criptografia determinística. Para obter mais informações sobre como alterar o tipo de criptografia para aleatório, confira Habilitar o Always Encrypted com enclaves seguros para as colunas criptografadas existentes.
- A coluna de cadeia de caracteres que você está consultando usa uma ordenação que não é BIN2 nem UTF-8. Altere a ordenação para BIN2 ou UTF-8. Para obter mais informações, confira Instruções DML usando enclaves seguros.
- Sua consulta dispara uma operação incompatível. Para obter a lista das operações compatíveis dentro dos enclaves, confira Instruções DML usando enclaves seguros.