Tutorial: Criar e usar índices em colunas habilitadas para enclave com criptografia aleatória

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores – Somente Windows Banco de Dados SQL do Azure

Este tutorial ensina como criar e usar índices em colunas habilitadas para enclave usando a criptografia aleatória com suporte em Always Encrypted com enclaves seguros. Ela mostrará a você:

  • Como criar um índice quando você tem acesso às chaves (à chave mestra de coluna e à chave de criptografia de coluna) que protegem a coluna.
  • Como criar um índice quando você não tem acesso às chaves de proteção da coluna.

Pré-requisitos

Baixe a versão mais recente do SSMS (SQL Server Management Studio).

Verifique se você concluiu um dos tutoriais Introdução ao uso de Always Encrypted com enclaves seguros antes de seguir as etapas abaixo neste tutorial.

Etapa 1: Habilitar ADR (Recuperação de Banco de Dados Acelerada) no banco de dados

Observação

Esta etapa se aplica apenas ao SQL Server. Se você estiver usando o Banco de Dados SQL do Azure, ignore esta etapa. A ADR é habilitada automaticamente no Banco de Dados SQL do Azure e não é possível desabilitá-la.

A Microsoft recomenda habilitar a ADR em seu banco de dados antes de criar o primeiro índice em uma coluna habilitada para enclave usando a criptografia aleatória. Confira a seção Recuperação de banco de dados em Always Encrypted com enclaves seguros.

  1. Feche todas as instâncias do SSMS usadas no tutorial anterior. O fechamento do SSMS fechará as conexões de banco de dados que você abriu, o que é necessário para habilitar a ADR.

  2. Abra uma nova instância do SSMS e conecte-se à instância do SQL Server como sysadmin sem Always Encrypted habilitado para a conexão de banco de dados.

    1. Inicie o SSMS.
    2. Na caixa de diálogo Conectar ao servidor, especifique o nome do servidor, selecione um método de autenticação e especifique suas credenciais.
    3. Selecione Opções >> e escolha a guia Always Encrypted.
    4. Verifique se a caixa de seleção Habilitar o Always Encrypted (criptografia de coluna)não está selecionada.
    5. Selecione Conectar.
  3. Abra uma nova janela de consulta e execute a instrução abaixo para habilitar a ADR.

    ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
    

Etapa 2: Criar e testar um índice sem separação de funções

Nesta etapa, você criará e testará um índice em uma coluna criptografada. Você atuará como um único usuário que assume as funções de DBA, que gerencia o banco de dados e é o proprietário dos dados com acesso às chaves de proteção de dados.

  1. Abra uma nova instância do SSMS e conecte-se à instância do SQL Server com Always Encrypted habilitado para a conexão de banco de dados.

    1. Inicie uma nova instância do SSMS.
    2. Na caixa de diálogo Conectar ao servidor, especifique o nome do servidor, selecione um método de autenticação e especifique suas credenciais.
    3. Selecione Opções >> e escolha a guia Always Encrypted.
    4. Marque as caixas de seleção Habilitar Always Encrypted (criptografia de coluna) e Habilitar Enclaves Seguros
    5. Se você estiver usando o atestado para seu banco de dados, selecione um valor de Enclave Attestation Protocol que representa seu serviço de atestado (Serviço Guardião do Host ou Microsoft Atestado do Azure) e preencha a URL de atestado do enclave. Caso contrário, selecione Nenhum.
    6. Selecione Conectar.
    7. Se solicitado a habilitar a parametrização para consultas Always Encrypted, selecione Habilitar.
  2. Se você não receber a solicitação para habilitar Parametrização para consultas Always Encrypted, verifique se a opção está habilitada.

    1. Selecione Ferramentas no menu principal do SSMS.
    2. Selecione Opções... .
    3. Navegue para Execução da Consulta>SQL Server>Avançado.
    4. A opção Habilitar Parametrização do Always Encrypted precisa estar marcada.
    5. Selecione OK.
  3. Abra uma janela de consulta e execute as instruções abaixo para criptografar a coluna LastName na tabela Funcionários. Você criará e usará um índice nessa coluna em etapas posteriores.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
    GO   
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    GO
    
  4. Crie um índice na coluna LastName. Uma vez que você esteja conectado ao banco de dados com o Always Encrypted habilitado, o driver do cliente dentro do SSMS fornecerá para o enclave, de forma transparente, a CEK1 (a chave de criptografia de coluna que protege a coluna LastName), que é necessária para criar o índice.

    CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
    INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
    GO
    
  5. Execute uma consulta avançada na coluna LastName e verifique se o SQL Server usa o índice ao executar a consulta.

    1. Na mesma janela de consulta ou em uma nova, verifique se o botão Incluir estatísticas de consulta ao vivo da barra de ferramentas está ativado.

    2. Execute a consulta abaixo.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Na guia Estatísticas de Consulta Dinâmica , observe que a consulta usa o índice.

Etapa 3: Criar um índice com separação de funções

Nesta etapa, você criará um índice em uma coluna criptografada, fingindo ser dois usuários diferentes. Um usuário é um DBA que precisa para criar um índice, mas não tem acesso às chaves. O outro usuário é um proprietário de dados com acesso às chaves.

  1. Usando a instância do SSMS sem Always Encrypted habilitado, execute a instrução abaixo para descartar o índice na coluna LastName.

    DROP INDEX IX_LastName ON [HR].[Employees]; 
    GO
    
  2. Atuando como um proprietário de dados (ou um aplicativo que tenha acesso às chaves), popule o cache dentro de enclave com CEK1.

    Observação

    A menos que você tenha reiniciado a instância do SQL Server depois da Etapa 2: Criar e testar um índice sem separação de funções, essa etapa é redundante, pois o CEK1 já está presente no cache. Ela foi adicionada para demonstrar como um proprietário de dados pode fornecer uma chave para o enclave, se ainda não estiver presente no enclave.

    1. Na instância de SSMS com o Always Encrypted habilitado, execute as instruções abaixo em uma janela de consulta. A instrução envia ao enclave todas as chaves de criptografia da coluna habilitada para o enclave. Confira sp_enclave_send_keys para obter os detalhes.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Como alternativa para executar o procedimento armazenado acima, você pode executar uma consulta DML que usa o enclave em comparação com a coluna LastName. Isso preencherá o enclave somente com CEK1.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
  3. Agindo como um DBA, crie o índice.

    1. Na instância de SSMS sem o Always Encrypted habilitado, execute as instruções abaixo em uma janela de consulta.

      CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
      INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
      GO
      
  4. Como proprietário de dados, execute uma consulta avançada na coluna LastName e verifique se o SQL Server usa o índice ao executar a consulta.

    1. Na instância do SSMS com Always Encrypted habilitado, selecione uma janela de consulta existente ou abra uma nova janela de consulta e verifique se o botão Incluir estatísticas de consulta ao vivo está habilitado na barra de ferramentas.

    2. Execute a consulta abaixo.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Nas Estatísticas de Consulta Dinâmica, observe que a consulta usa o índice.

Próximas etapas

Confira também