Tutorial: Desenvolver um aplicativo .NET usando o 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

Aplica-se a: .NET Framework .NET Core Not supported. .NET Standard

Este tutorial ensina como desenvolver um aplicativo que emite consultas de banco de dados que usam um enclave seguro no lado do servidor para o Always Encrypted com enclaves seguros.

Pré-requisitos

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

Além disso, você precisa do Visual Studio (a versão 2022 é recomendada) – você pode baixá-lo em https://visualstudio.microsoft.com/. O ambiente de desenvolvimento de aplicativo deve usar o .NET Framework 4.6.1 ou posterior ou o .NET Core 3.1 ou posterior.

Etapa 1: Configure seu projeto do Visual Studio

Para usar o Always Encrypted com enclaves seguros em um aplicativo .NET Framework, você precisa verificar se o seu aplicativo tem como destino o .NET Framework 4.6.1 ou posterior. Para usar o Always Encrypted com enclaves seguros em um aplicativo .NET Core, você precisa verificar se o seu aplicativo tem como destino o .NET Core 3.1 ou posterior.

Além disso, se armazenar a chave mestra da coluna no Azure Key Vault, você também precisará integrar seu aplicativo ao NuGet Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.

  1. Abra o Visual Studio.

  2. Crie um projeto de Aplicativo do Console C# (.NET Framework / Core).

  3. Verifique se o seu projeto tem como destino pelo menos o .NET Framework 4.6 ou o .NET Core 3.1. Clique com o botão direito do mouse no projeto no Gerenciador de Soluções, selecione Propriedades e defina a Estrutura de destino.

  4. Instale o seguinte pacote NuGet acessando Ferramentas (menu principal) >Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes. Execute o seguinte código no Console do Gerenciador de Pacotes.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. Se você usa o Azure Key Vault para armazenar chaves mestras de coluna, instale os seguintes pacotes NuGet acessando Ferramentas (menu principal) >Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes. Execute o seguinte código no Console do Gerenciador de Pacotes.

    Install-Package Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider -Version 3.0.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    

Etapa 2: Implementar a lógica do aplicativo

Seu aplicativo se conectará ao banco de dados ContosoHR que foi criado em um dos tutoriais (confira Pré-requisitos) e executará uma consulta que contém o predicado LIKE na coluna SSN e uma comparação de intervalo na coluna Salário.

  1. Substitua o conteúdo do arquivo Program.cs (gerado pelo Visual Studio) pelo código a seguir.

    using System;
    using Microsoft.Data.SqlClient;
    using System.Data;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                // Connection string for SQL Server
                string connectionString = "Data Source = myserver; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Attestation Protocol = HGS; Enclave Attestation Url = http://hgs.bastion.local/Attestation; Integrated Security = true";
    
                // Connection string for Azure SQL Database with Intel SGX enclaves
                //string connectionString = "Data Source = myserver.database.windows.net; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Attestation Protocol = AAS; Enclave Attestation Url = https://myattestationprovider.uks.attest.azure.net/attest/SgxEnclave; User ID=user; Password=password";
    
                // Connection string for Azure SQL Database with VBS enclaves
                //string connectionString = "Data Source = myserver.database.windows.net; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Attestation Protocol = None; User ID=user; Password=password";
    
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
    
                    SqlCommand cmd = connection.CreateCommand();
                    cmd.CommandText = @"SELECT [SSN], [FirstName], [LastName], [Salary] FROM [HR].[Employees] WHERE [SSN] LIKE @SSNPattern AND [Salary] > @MinSalary;";
    
                    SqlParameter paramSSNPattern = cmd.CreateParameter();
    
                    paramSSNPattern.ParameterName = @"@SSNPattern";
                    paramSSNPattern.DbType = DbType.AnsiStringFixedLength;
                    paramSSNPattern.Direction = ParameterDirection.Input;
                    paramSSNPattern.Value = "%9838";
                    paramSSNPattern.Size = 11;
    
                    cmd.Parameters.Add(paramSSNPattern);
    
                    SqlParameter MinSalary = cmd.CreateParameter();
    
                    MinSalary.ParameterName = @"@MinSalary";
                    MinSalary.DbType = DbType.Currency;
                    MinSalary.Direction = ParameterDirection.Input;
                    MinSalary.Value = 20000;
    
                    cmd.Parameters.Add(MinSalary);
                    cmd.ExecuteNonQuery();
    
                    SqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
    
                    {
                        Console.WriteLine(reader[0] + ", " + reader[1] + ", " + reader[2] + ", " + reader[3]);
                    }
                    Console.ReadKey();
                }
            }
        }
    }
    
  2. Atualize a cadeia de conexão de banco de dados.

    1. Defina o nome do servidor válido e as configurações de autenticação do banco de dados.
    2. Se você estiver usando o atestado para seu banco de dados, defina o Protocolo de Atestado de Enclave como o valor correto para o serviço de atestado (HGS para o Serviço Guardião de Host ou AAS para o Atestado do Microsoft Azure). Caso contrário, defina o Protocolo de Atestado de Enclave como None.
  3. Compile e execute o aplicativo.

Veja também