Partilhar via


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

Aplica-se a: SQL Server 2019 (15.x) e posterior - somente Windows Banco de Dados SQL do Azure

Este tutorial ensina como criar e usar índices em colunas com enclave habilitado usando criptografia aleatória suportada no Always Encrypted com enclaves seguros. Irá mostrar-lhe:

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

Pré-requisitos

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

Certifique-se de ter concluído um dos tutoriais indicados em , Introdução ao uso do Always Encrypted com enclaves seguros,, antes de seguir os passos abaixo neste tutorial.

Etapa 1: Habilitar a recuperação acelerada de banco de dados (ADR) em seu banco de dados

Observação

Esta etapa se aplica somente ao SQL Server. Se estiver a utilizar a Base de Dados SQL do Azure ou a Instância Gerida SQL do Azure, ignore este passo. O ADR está sempre habilitado no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure.

A Microsoft recomenda enfaticamente que você habilite o ADR em seu banco de dados antes de criar o primeiro índice em uma coluna habilitada para enclave usando criptografia aleatória. Consulte a secção Recuperação da Base de Dados em Sempre Criptografado com enclaves seguros.

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

  2. Abra uma nova instância do SSMS e conecte-se à sua instância do SQL Server como sysadmin sem "Always Encrypted" ativado para a conexão à base 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 selecione o separador Sempre Criptografado.
    4. Verifique se a caixa de seleção Ativar sempre criptografado (criptografia de coluna)não está marcada.
    5. Selecione Conectar.
  3. Abra uma nova janela de consulta e execute a instrução abaixo para ativar o 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ê estará agindo como um único usuário que está assumindo as funções de um DBA, que gerencia o banco de dados, e o proprietário dos dados que tem acesso às chaves, protegendo os dados.

  1. Abra uma nova instância do SSMS e conecte-se à sua instância do SQL Server com "Sempre Criptografado" habilitada 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 selecione o separador Sempre Criptografado.
    4. Marque as caixas de seleção Ativar Sempre Criptografado (criptografia de coluna) e Habilitar Enclaves Seguros
    5. Se você estiver usando o atestado para seu banco de dados, selecione um valor de do Enclave Attestation Protocol que represente seu serviço de atestado (Host Guardian Service ou Microsoft Azure Attestation) e preencha a URL de atestado do enclave. Caso contrário, selecione Nenhum.
    6. Selecione Conectar.
    7. Se for solicitado a habilitar a parametrização para consultas Always Encrypted , selecione Enable.
  2. Se você não foi solicitado a habilitar a Parametrização para Sempre Criptografado, verifique se ela está habilitada.

    1. Selecione Ferramentas no menu principal do SSMS.
    2. Selecione Opções....
    3. Navegue até Execução de Consulta>SQL Server>Avançado.
    4. Certifique-se de que a opção Habilitar Parametrização para Always Encrypted está 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 Sobrenome. Como está conectado ao banco de dados com o Always Encrypted habilitado, o driver do cliente dentro do SSMS fornece de forma transparente CEK1 (a chave de criptografia de coluna, protegendo a coluna LastName) para o enclave, que é necessário 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 do e verifique se o SQL Server usa o índice ao executar a consulta.

    1. Na mesma janela ou em uma nova janela de consulta, verifique se o botão Incluir Estatísticas de Consulta ao Vivo na 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 Live Query Statistics, observe se 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 criar um índice, mas não tem acesso às chaves. O outro usuário é um proprietário de dados, que tem acesso às chaves.

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

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

    Observação

    A menos que você tenha reiniciado sua instância do SQL Server após Etapa 2: Criar e testar um índice sem separação de função, esta etapa é redundante, pois o CEK1 já está presente no cache. Adicionámo-lo para demonstrar como um proprietário de dados pode fornecer uma chave para o enclave, caso não estiver já presente no enclave.

    1. Na instância do SSMS com Always Encrypted habilitado, execute as instruções abaixo em uma janela de consulta. A instrução envia todas as chaves de encriptação de coluna habilitadas para o enclave. Consulte sp_enclave_send_keys para obter detalhes.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Como alternativa à execução do procedimento armazenado acima, pode executar uma consulta DML que utiliza o enclave contra a coluna LastName. Isso preencherá o enclave apenas com CEK1.

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

    1. Na instância do SSMS sem 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 Include Live Query Statistics na 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. Nas Estatísticas do Live Query, observe que a consulta usa o índice.

Próximos passos

Ver também