Partilhar via


Tutorial: Começar a usar o Always Encrypted com enclaves seguros no SQL Server

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores no Windows

Este tutorial ensina-te como começar com o Always Encrypted com enclaves seguros no SQL Server. Irá mostrar-lhe:

  • Como criar um ambiente básico para testar e avaliar o Always Encrypted utilizando enclaves seguros, sem que a atestação esteja configurada para esses enclaves.
  • Como criptografar dados no próprio local e realizar consultas avançadas e confidenciais em colunas criptografadas usando o SQL Server Management Studio (SSMS).

Se quiser aprender a configurar o Always Encrypted com enclaves seguros usando o Host Guardian Service para atestação de enclaves, veja o Tutorial: Como começar a usar o Always Encrypted com enclaves seguros em SQL Server com atestação usando HGS

Pré-requisitos

O computador que aloja a sua instância SQL Server (referido como computador SQL Server) precisa de cumprir os seguintes requisitos:

  • SQL Server 2019 (15.x) ou posterior.
  • Windows 10 ou posterior, Windows Server 2019 ou posterior.
  • Suporte de CPU para tecnologias de virtualização:
    • Intel VT-x com Tabelas de Páginas Estendidas.
    • AMD-V com Indexação Rápida de Virtualização.
    • Se estiveres a correr SQL Server numa VM:
      • No Azure, use um tamanho de VM de Geração 2 (recomendado) ou tamanho de VM de Geração 1 com a virtualização aninhada ativada. Consulte a documentação de tamanhos individuais de VMs para determinar quais os tamanhos de VM da Geração 1 que suportam virtualização aninhada.
      • Em Hyper-V de 2016 ou posterior (fora do Azure), certifique-se de que a sua VM é de Geração 2 (recomendada) ou que é uma VM de Geração 1 com virtualização aninhada ativada. Para mais informações, veja Devo criar uma máquina virtual de geração 1 ou 2 em Hyper-V? e Configurar a virtualização aninhada.
      • No VMware vSphere 6.7 ou posterior, ative o suporte de Segurança Baseada em Virtualização para a VM conforme descrito na documentação do VMware.
      • Outros hipervisores e nuvens públicas podem suportar capacidades de virtualização aninhada que permitem Always Encrypted com VBS Enclaves. Verifique a documentação da sua solução de virtualização para compatibilidade e instruções de configuração.
  • A versão mais recente do SQL Server Management Studio (SSMS). Como alternativa, pode instalar o SSMS noutra máquina.

Advertência

Em ambientes de produção, executar SSMS ou outras ferramentas de gestão de chaves no computador SQL Server pode reduzir os benefícios de segurança de usar o Always Encrypted. Em geral, recomenda-se executar essas ferramentas numa máquina diferente. Para mais informações, consulte Considerações de Segurança para a Gestão de Chaves.

Passo 1: Certifique-se de que a segurança baseada em virtualização (VBS) está ativada

  1. Inicie sessão no seu computador SQL Server como administrador, abra uma consola PowerShell elevada do Windows e execute msinfo32.exe. Verifica se o VBS está em execução. Se o VBS estiver a funcionar, salta os passos restantes desta secção e passa para a secção seguinte.

    Captura de ecrã dos detalhes de segurança baseados na virtualização de Informação do Sistema.

  2. Ative o VBS executando o seguinte cmdlet na sessão PowerShell.

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name EnableVirtualizationBasedSecurity -Value 1
    
  3. Se o seu computador SQL Server for uma máquina virtual, uma máquina física que não suporta UEFI Secure Boot, ou uma máquina física sem IOMMU, precisa de remover o requisito VBS para funcionalidades de segurança da plataforma. Elimine a exigência de Secure Boot e IOMMU executando o seguinte comando no seu computador SQL Server numa consola PowerShell elevada:

    Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\DeviceGuard -Name RequirePlatformSecurityFeatures -Value 0
    
  4. Reinicie novamente o computador do SQL Server para que o VBS volte a funcionar.

    Restart-Computer
    
  5. Repita o passo 1 para verificar se o VBS está a funcionar.

Passo 2: Ative o Always Encrypted com enclaves seguros no SQL Server

Neste passo, irá ativar a funcionalidade do Always Encrypted usando enclaves na sua instância do SQL Server.

  1. Usando SSMS, liga-te à tua instância SQL Server como sysadmin sem o Always Encrypted ativado para a ligação à base de dados.

    1. Inicia o SSMS.

    2. No diálogo Ligar ao Servidor , especifique o nome do seu servidor, selecione um método de autenticação e especifique as suas credenciais.

    3. Selecione Opções >> e selecione o separador de Sempre Encriptado.

    4. Verifique se a caixa de seleção Ativar sempre criptografado (criptografia de coluna)não está marcada.

      Captura de ecrã da opção de ligação SSMS para Sempre Encriptado desativada.

    5. Selecione Conectar.

  2. Abra uma nova janela de consulta e execute a instrução abaixo para definir o tipo de enclave seguro para segurança baseada em virtualização (VBS).

    EXEC sys.sp_configure 'column encryption enclave type', 1;
    RECONFIGURE;
    
  3. Reinicie a sua instância do SQL Server para que a alteração anterior tenha efeito. Podes reiniciar a instância no SSMS clicando com o botão direito no Explorador de Objetos e selecionando Reiniciar. Quando a instância reiniciar, volta a ligar-se a ela.

  4. Confirme que o enclave seguro está agora carregado executando a seguinte consulta:

    SELECT [name], [value], [value_in_use] FROM sys.configurations
    WHERE [name] = 'column encryption enclave type';
    

    A consulta deve devolver o seguinte resultado:

    nome valor valor_em_uso
    tipo de enclave de encriptação de coluna 1 1

Passo 3: Criar uma base de dados de exemplo

Neste passo, irá criar uma base de dados com alguns dados de exemplo, que irá encriptar mais tarde.

  1. Usando a instância SSMS do passo anterior, execute a instrução abaixo numa janela de consulta para criar uma nova base de dados, chamada ContosoHR.

    CREATE DATABASE [ContosoHR];
    
  2. Crie uma nova tabela, chamada Colaboradores.

    USE [ContosoHR];
    GO
    
    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    
  3. Adicione alguns registos de colaboradores à tabela de Colaboradores .

    USE [ContosoHR];
    GO
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Etapa 4: Provisionar chaves habilitadas para enclave

Nesta etapa, você criará uma chave mestra de coluna e uma chave de criptografia de coluna que permitem cálculos de enclave.

  1. Usando a instância do SSMS da etapa anterior, em Explorador de Objetos, expanda a sua base de dados e navegue até Segurança>Chaves Sempre Criptografadas.

  2. Configure uma nova chave mestra de coluna com suporte para enclave.

    1. Clique com o botão direito do mouse Chaves Sempre Criptografadas e selecione Nova Chave Mestra de Coluna....

    2. Selecione o nome da chave mestra da sua coluna: CMK1.

    3. Certifica-te de que escolhes ou Windows Certificate Store (Utilizador Atual ou Máquina Local) ou Azure Key Vault.

    4. Selecione Permitir cálculos de enclave.

    5. Se selecionaste Azure Key Vault, inicia sessão no Azure e seleciona o teu cofre de chaves. Para mais informações sobre como criar um cofre de chaves para o Always Encrypted, consulte Gerir os seus cofres de chaves a partir do portal Azure.

    6. Selecione o seu certificado ou a chave Azure Key Value se já existir, ou selecione o botão Gerar Certificado para criar uma nova.

    7. Selecione OK.

      Captura de ecrã da seleção de permitir cálculos de enclave no SSMS ao criar uma nova chave mestra de coluna.

  3. Crie uma nova chave de criptografia de coluna com suporte para enclave

    1. Clique com o botão direito do rato em Chaves Sempre Encriptadas e selecione Nova Chave de Encriptação de Coluna .
    2. Insira um nome para a nova chave de encriptação da coluna: CEK1.
    3. No menu suspenso da chave mestra da coluna , selecione a chave mestra da coluna que criou nos passos anteriores.
    4. Selecione OK.

Etapa 5: criptografar algumas colunas no local

Neste passo, irá encriptar os dados armazenados nas colunas SSN e Salário dentro do enclave do lado do servidor, e depois testar uma consulta SELECT sobre os dados.

  1. Abra uma nova instância do SSMS e ligue-se à sua instância do SQL Server com Always Encrypted ativado para a ligação à base de dados.

    1. Inicie uma nova instância do SSMS.

    2. No diálogo Ligar ao Servidor , especifique o nome do seu servidor, selecione um método de autenticação e especifique as suas credenciais.

    3. Selecione Opções >> e selecione o separador de Sempre Encriptado.

    4. Marque a caixa de seleção Ativar Sempre Criptografado (criptografia de coluna).

    5. Selecione Ativar enclaves seguros.

    6. Defina Protocolo como Nenhum.

      Captura de ecrã do separador 'Always Encrypted' para ligação ao servidor sem atestação usando SSMS.

    7. Selecione Conectar.

    8. Se lhe for pedido para ativar a Parametrização para consultas Sempre Encriptadas, selecione Ativar.

  2. Usando a mesma instância SSMS (com Sempre Encriptado ativado), abra uma nova janela de consulta e encripte as colunas SSN e Salário executando as consultas abaixo.

    USE [ContosoHR];
    GO
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Observação

    Observe a instrução ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE para limpar a cache de planos de execução da base de dados no script acima. Depois de alterar a tabela, precisa de eliminar os planos de todos os batches e procedimentos armazenados que acedam à tabela, para atualizar a informação de encriptação dos parâmetros.

  3. Para verificar se as colunas SSN e Salário estão agora encriptadas, abra uma nova janela de consulta na instância SSMS sem o Always Encrypted ativado para a ligação à base de dados e execute a instrução abaixo. A janela de consulta deve devolver valores encriptados nas colunas SSN e Salário . Se você executar a mesma consulta usando a instância do SSMS com Always Encrypted habilitado, verá os dados descriptografados.

    SELECT * FROM [HR].[Employees];
    

Etapa 6: Executar consultas avançadas em colunas criptografadas

Agora, pode executar consultas detalhadas contra as colunas encriptadas. Algum processamento de consulta será realizado dentro do seu enclave do lado do servidor.

  1. Na instância do SSMS com Always Encrypted habilitado, verifique se a Parametrização para Always Encrypted também 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.
  2. Abra uma nova janela de consulta, cole e execute a consulta abaixo. A consulta deve retornar valores de texto sem formatação e linhas que atendam aos critérios de pesquisa especificados.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Tenta a mesma consulta novamente na instância SSMS que não tem o Always Encrypted ativado, e nota a falha que ocorre.

Próximos passos

Depois de concluir este tutorial, você pode ir para um dos seguintes tutoriais:

Consulte também