Esercitazione: Sviluppare un'applicazione .NET usando Always Encrypted con enclave sicuri

Si applica a: SQL Server 2019 (15.x) e versioni successive - Solo Windows Database SQL di Azure

Si applica a: .NET Framework .NET Core Non supportato .NET Standard

Questa esercitazione illustra come sviluppare un'applicazione che esegue query di database che usano un'enclave sicura sul lato server per Always Encrypted con enclave sicure.

Nota

Always Encrypted con enclave sicuri è supportato solo in Windows.

Prerequisiti

Assicurarsi di aver completato una delle esercitazioni riportate di seguito prima di seguire le procedure in questa esercitazione:

È necessario anche Visual Studio (è consigliata la versione 2019), che può essere scaricato da https://visualstudio.microsoft.com/. L'ambiente di sviluppo dell'applicazione deve usare .NET Framework 4.6 o versione successiva o .NET Core 2.1 o versione successiva.

Passaggio 1: Configurare il progetto di Visual Studio

Per usare Always Encrypted con enclave sicuri in un'applicazione .NET Framework è necessario verificare che l'applicazione abbia come destinazione .NET Framework 4.6 o versione successiva. Per usare Always Encrypted con enclave sicuri in un'applicazione .NET Core è necessario verificare che l'applicazione abbia come destinazione .NET Core 2.1 o versione successiva.

Se si archivia la chiave master della colonna in Azure Key Vault, è anche necessario integrare l'applicazione con Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet.

  1. Aprire Visual Studio.

  2. Creare un nuovo progetto di app console C# (.NET Framework/Core).

  3. Assicurarsi che il progetto sia destinato almeno a .NET Framework 4.6 o .NET Core 2.1. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, scegliere Proprietà e impostare il framework di destinazione.

  4. Installare il pacchetto NuGet seguente passando a Strumenti (menu principale) >Gestione pacchetti NuGet>Console di Gestione pacchetti. Eseguire il codice seguente nella Console di Gestione pacchetti.

    Install-Package Microsoft.Data.SqlClient -Version 1.1.0
    
  5. Se si usa Azure Key Vault pe l'archiviazione delle chiavi master della colonna, installare i pacchetti NuGet seguenti passando a Strumenti (menu principale) >Gestione pacchetti NuGet>Console di Gestione pacchetti. Eseguire il codice seguente nella Console di Gestione pacchetti.

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

Passaggio 2: Implementare la logica dell'applicazione

L'applicazione si connetterà al database ContosoHR creato in Esercitazione: Introduzione ad Always Encrypted con enclave sicuri tramite SSMS o Introduzione ad Always Encrypted con enclave sicure nel database SQL di Azure ed eseguirà una query che contiene il predicato LIKE sulla colonna SSN e un confronto di intervalli sulla colonna Salary.

  1. Sostituire il contenuto del file Program.cs (generato da Visual Studio) con il codice seguente.

    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
                //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";
    
                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. Aggiornare la stringa di connessione di database.

    1. Impostare il nome del server valido e le impostazioni di autenticazione del database.
    2. Impostare il valore della parola chiave Attestation Protocol su:
      • HGS se si usano SQL Server e il servizio Sorveglianza host (HGS).
      • AAS se si usano il database SQL di Azure e Attestazione di Microsoft Azure.
    3. Impostare Enclave Attestation URL su un URL di attestazione per l'ambiente.
  3. Compilare ed eseguire l'applicazione.

Vedi anche