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 Not supported. .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.

Prerequisiti

Assicurarsi di aver completato una delle esercitazioni introduttive sull'uso di Always Encrypted con enclave sicuri prima di seguire i passaggi seguenti in questa esercitazione.

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

Passaggio 1: configurare il progetto di Visual Studio

Per usare Always Encrypted con enclavi sicuri in un'applicazione .NET Framework è necessario verificare che l'applicazione abbia come destinazione .NET Framework 4.6.1 o versione successiva. Per usare Always Encrypted con enclavi sicuri in un'applicazione .NET Core è necessario verificare che l'applicazione abbia come destinazione .NET Core 3.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 3.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 5.0.1
    
  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 3.0.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    

Passaggio 2: implementare la logica dell'applicazione

L'applicazione si connetterà al database ContosoHR creato in una delle esercitazioni, vedere Prerequisiti ed eseguirà una query contenente il predicato LIKE nella colonna SSN e un confronto tra intervalli nella 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 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. Aggiornare la stringa di connessione di database.

    1. Impostare il nome del server valido e le impostazioni di autenticazione del database.
    2. Se si usa l'attestazione per il database, impostare Enclave Attestation Protocol sul valore corretto per il servizio di attestazione (HGS per servizio Sorveglianza host o AAS per Microsoft attestazione di Azure). In caso contrario, impostare Il protocollo di attestazione dell'enclave su None.
  3. Compilare ed eseguire l'applicazione.

Vedi anche