Tutorial: Desarrollo de una aplicación de .NET mediante Always Encrypted con enclaves seguros

Se aplica a: SQL Server 2019 (15.x) y versiones posteriores: solo Windows Azure SQL Database

Se aplica a: .NET Framework .NET Core Not supported. .NET Standard

En este tutorial aprenderá a desarrollar una aplicación que emite consultas de base de datos que usan un enclave seguro del lado servidor para Always Encrypted con enclaves seguros.

Requisitos previos

Asegúrese de que ha completado uno de los tutoriales Introducción a Always Encrypted con enclaves seguros en Azure SQL Database antes de seguir los pasos de este tutorial que se indican a continuación.

Además, se necesita Visual Studio (se recomienda la versión 2022); puede descargarlo desde https://visualstudio.microsoft.com/. El entorno de desarrollo de la aplicación debe usar .NET Framework 4.6.1 o posterior o .NET Core 3.1 o posterior.

Paso 1: Configuración de su proyecto de Visual Studio

Para usar Always Encrypted con enclaves seguros en una aplicación .NET Framework, debe asegurarse de que la aplicación tiene como destino .NET Framework 4.6.1 o superior. Para usar Always Encrypted con enclaves seguros en una aplicación .NET Core, debe asegurarse de que la aplicación tiene como destino .NET Core 3.1 o superior.

Además, si almacena su clave maestra de columna en Azure Key Vault, también debe integrar su aplicación con el NuGet Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider.

  1. Abra Visual Studio.

  2. Cree un proyecto de aplicación de consola de C# (.NET Framework/Core).

  3. Asegúrese de que su proyecto tenga como destino al menos .NET Framework 4.6 o .NET Core 3.1. Haga clic con el botón derecho en el proyecto en el Explorador de soluciones, seleccione Propiedades y establezca el marco de destino.

  4. Instale el siguiente paquete NuGet yendo a Herramientas (menú principal)>Administrador de paquetes NuGet>Consola del administrador de paquetes. Ejecute el siguiente código en la Consola del Administrador de paquetes.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. Si usa Azure Key Vault para almacenar sus claves maestras de columna, instale los siguientes paquetes NuGet yendo a Herramientas (menú principal) > >Administrador de paquetes NuGet>Consola del administrador de paquetes. Ejecute el siguiente código en la Consola del Administrador de paquetes.

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

Paso 2: Implementar la lógica de la aplicación

La aplicación se conectará a la base de datos ContosoHR que se creó en uno de los tutoriales (consulte Requisitos previos) y ejecutará una consulta que contiene el predicado LIKE en la columna SSN y una comparación de rangos en la columna Salary.

  1. Reemplace el contenido del archivo Program.cs (generado por Visual Studio) por el siguiente código.

    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. Actualice la cadena de conexión de base de datos.

    1. Establezca el nombre de servidor válido y la configuración de autenticación de base de datos.
    2. Si usa la atestación para la base de datos, establezca Protocolo de atestación de enclave en el valor correcto para el servicio de atestación (HGS para el Servicio de protección de host o AAS para Microsoft Azure Attestation). De lo contrario, establezca Protocolo de atestación de enclave en None.
  3. Compile y ejecute la aplicación.

Consulte también