Tutorial: Entwickeln einer .NET-Anwendung mithilfe von Always Encrypted mit Secure Enclaves

Gilt für: SQL Server 2019 (15.x) und höher – nur Windows Azure SQL-Datenbank

Gilt für: .NET Framework .NET Core Not supported. .NET Standard

In diesem Tutorial erfahren Sie, wie Sie eine Anwendung entwickeln, die Datenbankabfragen ausgibt, die eine serverseitige Secure Enclave für Always Encrypted mit Secure Enclaves verwendet.

Voraussetzungen

Sie sollten unbedingt eines der Tutorials Erste Schritte mit Always Encrypted mit Secure Enclaves abgeschlossen haben, bevor Sie die folgenden Schritte in diesem Tutorial ausführen.

Darüber hinaus benötigen Sie Visual Studio (Version 2022 wird empfohlen). Den Download finden Sie unter https://visualstudio.microsoft.com/. In Ihrer Anwendungsentwicklungsumgebung muss .NET Framework 4.6.1 oder höher oder .NET Core 3.1 oder höher verwendet werden.

Schritt 1: Einrichten Ihres Visual Studio-Projekts

Damit Sie Always Encrypted mit Secure Enclaves in einer .NET Framework-Anwendung verwenden können, müssen Sie sicherstellen, dass Ihre Anwendung auf .NET Framework 4.6.1 oder höher ausgerichtet ist. Damit Sie Always Encrypted mit Secure Enclaves in einer .NET Core-Anwendung verwenden können, müssen Sie sicherstellen, dass Ihre Anwendung auf .NET Core 3.1 oder höher ausgerichtet ist.

Wenn Sie Ihren Spaltenhauptschlüssel im Azure Key Vault speichern, müssen Sie außerdem Ihre Anwendung und das NuGet-Paket Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider integrieren.

  1. Öffnen Sie Visual Studio.

  2. Erstellen Sie ein neues C#-Konsolen-App-Projekt (.NET Framework/Core).

  3. Stellen Sie sicher, dass das Projekt mindestens auf .NET Framework 4.6 oder .NET Core 3.1 ausgerichtet ist. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf das Projekt, wählen Sie Eigenschaften aus, und legen Sie das Zielframework fest.

  4. Installieren Sie das folgende NuGet-Paket, indem Sie zu Tools (Hauptmenü) >NuGet-Paket-Manager>Paket-Manager-Konsole navigieren. Führen Sie den folgenden Code in der Paket-Manager-Konsole aus.

    Install-Package Microsoft.Data.SqlClient -Version 5.0.1
    
  5. Wenn Sie Azure Key Vault für die Speicherung Ihrer Spaltenhauptschlüssel verwenden, installieren Sie die folgenden NuGet-Pakete, indem Sie zu Tools (Hauptmenü) >NuGet-Paket-Manager>Paket-Manager-Konsole navigieren. Führen Sie den folgenden Code in der Paket-Manager-Konsole aus.

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

Schritt 2: Implementieren Ihrer Anwendungslogik

Ihre Anwendung stellt eine Verbindung mit der Datenbank ContosoHR her, die in einem der Tutorials erstellt wurde (siehe Voraussetzungen), und führt eine Abfrage aus, die das Prädikat LIKE in der Spalte SSN sowie einen Bereichsvergleich in der Spalte Salary enthält.

  1. Ersetzen Sie den Inhalt der (von Visual Studio generierten) Datei „Program.cs“ durch folgenden 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 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. Aktualisieren Sie die Datenbank-Verbindungszeichenfolge.

    1. Legen Sie einen gültigen Servernamen und die Authentifizierungseinstellungen für Ihre Datenbank fest.
    2. Wenn Sie für Ihre Datenbank einen Nachweis verwenden, legen Sie „Enclave-Nachweisprotokoll“ auf den richtigen Wert für Ihren Nachweisdienst fest (HGS für Host Guardian Service oder AAS für Microsoft Azure Attestation). Legen Sie andernfalls „Enclave-Nachweisprotokoll“ auf None fest.
  3. Erstellen Sie die Anwendung, und führen Sie sie aus.

Weitere Informationen