Tutoriel : Développer une application .NET en utilisant Always Encrypted avec enclaves sécurisées

S’applique à : SQL Server 2019 (15.x) et versions ultérieures - Windows uniquement Azure SQL Database

S’applique à : .NET Framework .NET Core Not supported. .NET Standard

Ce tutoriel vous apprend à développer une application qui émet des requêtes de base de données utilisant une enclave sécurisée côté serveur pour Always Encrypted avec enclaves sécurisées.

Prérequis

Vérifiez que vous avez effectué un des tutoriels Bien démarrer dans l’utilisation d’Always Encrypted avec enclaves sécurisées avant de suivre les étapes ci-dessous de ce tutoriel.

En outre, vous avez besoin de Visual Studio (la version 2022 est recommandée), que vous pouvez télécharger depuis https://visualstudio.microsoft.com/. Votre environnement de développement d’applications doit utiliser .NET Framework 4.6.1 ou ultérieur, ou .NET Core 3.1 ou ultérieur.

Étape 1 : Configurez votre projet Visual Studio

Pour utiliser Always Encrypted avec des enclaves sécurisées dans une application .NET Framework, vous devez vérifier que votre application cible .NET Framework 4.6.1 ou ultérieur. Pour utiliser Always Encrypted avec des enclaves sécurisées dans une application .NET Core, vous devez vérifier que votre application cible .NET Core 3.1 ou ultérieur.

En outre, si vous stockez votre clé principale de colonne dans Azure Key Vault, vous devez également intégrer votre application à Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet.

  1. Ouvrez Visual Studio.

  2. Créez un nouveau projet (.NET Framework / Core) d’application console C#.

  3. Vérifiez que votre projet cible au moins .NET Framework 4.6 ou .NET Core 3.1. Cliquez avec le bouton de droite sur le projet dans l’Explorateur de solutions, sélectionnez Propriétés et définissez la version cible de .Net Framework.

  4. Installez le package NuGet suivant en accédant à Outils (menu principal) >Gestionnaire de Package NuGet>Console du gestionnaire de package. Exécutez le code suivant dans la Console du gestionnaire de Package.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. Si vous utilisez Azure Key Vault pour stocker vos clés principales de colonne, installez les packages NuGet suivants en accédant à Outils (menu principal) >Gestionnaire de package NuGet>Console de gestionnaire de package. Exécutez le code suivant dans la Console du gestionnaire de Package.

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

Étape 2 : Implémentez votre logique d’application

Votre application va se connecter à la base de données ContosoHR qui a été créée dans un des tutoriels (consultez les Prérequis), et elle va exécuter une requête qui contient le prédicat LIKE sur la colonne SSN et une comparaison de plage sur la colonne Salary.

  1. Remplacez le contenu du fichier Program.cs (généré par Visual Studio) par le code ci-dessous.

    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. Mise à jour de la chaîne de connexion de base de données.

    1. Définissez le nom du serveur valide et les paramètres d’authentification de votre base de données.
    2. Si vous utilisez l’attestation pour votre base de données, définissez Protocole d’attestation d’enclave sur la valeur correcte pour votre service d’attestation (HGSpour Service Guardian hôte ou AAS pour Microsoft Azure Attestation). Sinon, définissez Protocole d’attestation d’enclave sur None.
  3. Générez et exécutez l’application.

Voir aussi