Esercitazione: Sviluppare un'applicazione .NET usando Always Encrypted con enclave sicuriTutorial: Develop a .NET application using Always Encrypted with secure enclaves

Si applica a:Applies to: sìSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Solo Windows Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL DatabaseSi applica a:Applies to: sìSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x) - Windows only Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL Database

SI APPLICA A: .NET Framework .NET Core .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.This tutorial teaches you how to develop an application that issues database queries that use a server-side secure enclave for Always Encrypted with secure enclaves.

Nota

Always Encrypted con enclave sicuri è supportato solo in Windows.Always Encrypted with secure enclaves is only supported on Windows.

PrerequisitiPrerequisites

Assicurarsi di aver completato una delle esercitazioni riportate di seguito prima di seguire le procedure in questa esercitazione:Make sure you've completed one of the below tutorials before following the below steps in this tutorial:

È necessario anche Visual Studio (è consigliata la versione 2019), che può essere scaricato da https://visualstudio.microsoft.com/.In addition, you need Visual Studio (version 2019 is recommended) - you can download it from 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.Your application development environment must use .NET Framework 4.6 or later or .NET Core 2.1 or later.

Passaggio 1: Configurare il progetto di Visual StudioStep 1: Set up your Visual Studio Project

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.To use Always Encrypted with secure enclaves in a .NET Framework application, you need to make sure your application targets .NET Framework 4.6 or higher. 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.To use Always Encrypted with secure enclaves in a .NET Core application, you need to make sure your application targets .NET Core 2.1 or higher.

Se si archivia la chiave master della colonna in Azure Key Vault, è anche necessario integrare l'applicazione con Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet.In addition, if you store your column master key in Azure Key Vault, you also need to integrate your application with the Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet.

  1. Aprire Visual Studio.Open Visual Studio.

  2. Creare un nuovo progetto di app console C# (.NET Framework/Core).Create a new C# Console App (.NET Framework / Core) project.

  3. Assicurarsi che il progetto sia destinato almeno a .NET Framework 4.6 o .NET Core 2.1.Make sure your project targets at least .NET Framework 4.6 or .NET Core 2.1. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, selezionare Proprietà e impostare il Framework di destinazione.Right-click on the project in Solution Explorer, select Properties and set the Target framework.

  4. Installare il pacchetto NuGet seguente passando a Strumenti (menu principale) > Gestione pacchetti NuGet > Console di Gestione pacchetti.Install the following NuGet package by going to Tools (main menu) > NuGet Package Manager > Package Manager Console. Eseguire il codice seguente nella Console di Gestione pacchetti.Run the following code in the Package Manager Console.

    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.If you use Azure Key Vault for storing your column master keys, install the following NuGet packages by going to Tools (main menu) > NuGet Package Manager > Package Manager Console. Eseguire il codice seguente nella Console di Gestione pacchetti.Run the following code in the Package Manager Console.

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

Passaggio 2: Implementare la logica dell'applicazioneStep 2: Implement your application logic

L'applicazione si connetterà al database di ContosoHR da esercitazione: Introduzione a always Encrypted con enclave sicure con SSMS o- esercitazione: introduzione always Encrypted con enclave sicure nel database SQL di Azure e verrà eseguita una query contenente il LIKE predicato nella colonna SSN e un confronto tra intervalli nella colonna Salary .Your application will connect to the ContosoHR database from Tutorial: Getting started with Always Encrypted with secure enclaves using SSMS or - Tutorial: Getting started with Always Encrypted with secure enclaves in Azure SQL Database and it will run a query that contains the LIKE predicate on the SSN column and a range comparison on the Salary column.

  1. Sostituire il contenuto del file Program.cs (generato da Visual Studio) con il codice seguente.Replace the content of the Program.cs file (generated by Visual Studio) with the following code.

    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 del database.Update the database connection string.

    1. Impostare il nome del server e le impostazioni di autenticazione del database validi.Set the valid server name and your database authentication settings.
    2. Impostare il valore della Attestation Protocol parola chiave su:Set the value of the Attestation Protocol keyword to:
      • HGS -Se si usa SQL ServerSQL Server e il servizio sorveglianza host (HGS).HGS - if you're using SQL ServerSQL Server and Host Guardian Service (HGS).
      • AAS -Se si sta usando database SQL di AzureAzure SQL Database e Microsoft Azure attestazione.AAS - if you're using database SQL di AzureAzure SQL Database and Microsoft Azure Attestation.
    3. Impostare Enclave Attestation URL su un URL di attestazione per l'ambiente.Set Enclave Attestation URL to an attestation URL for your environment.
  3. Compilare ed eseguire l'applicazione.Build and run the application.

Vedi ancheSee also