Esercitazione: Sviluppare un'applicazione .NET usando Always Encrypted con enclave sicuri
Si applica a: SQL Server 2019 (15.x) e versioni successive - Windows solo
Azure 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.
Nota
Always Encrypted con enclave sicuri è supportato solo in Windows.
Prerequisiti
Assicurarsi di aver completato una delle esercitazioni riportate di seguito prima di seguire le procedure in questa esercitazione:
- Esercitazione: Introduzione ad Always Encrypted con enclave sicure in SQL Server
- Esercitazione: Introduzione ad Always Encrypted con enclave sicure nel database SQL di Azure
È necessario anche Visual Studio (è consigliata la versione 2019), che può essere scaricato da 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.
Passaggio 1: Configurare il progetto di Visual Studio
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. 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.
Se si archivia la chiave master della colonna in Azure Key Vault, è anche necessario integrare l'applicazione con Microsoft.Data.SqlClient.AlwaysEncrypted.AzureKeyVaultProvider NuGet.
Aprire Visual Studio.
Creare un nuovo progetto di app console C# (.NET Framework/Core).
Assicurarsi che il progetto sia destinato almeno a .NET Framework 4.6 o .NET Core 2.1. Fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni, scegliere Proprietà e impostare il framework di destinazione.
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 1.1.0
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 1.0.0 Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
Passaggio 2: Implementare la logica dell'applicazione
L'applicazione si connetterà al database ContosoHR creato in Esercitazione: Introduzione ad Always Encrypted con enclave sicuri tramite SSMS o Introduzione ad Always Encrypted con enclave sicure nel database SQL di Azure ed eseguirà una query che contiene il predicato LIKE
sulla colonna SSN e un confronto di intervalli sulla colonna Salary.
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 //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(); } } } }
Aggiornare la stringa di connessione di database.
- Impostare il nome del server valido e le impostazioni di autenticazione del database.
- Impostare il valore della parola chiave
Attestation Protocol
su:HGS
se si usano SQL Server e il servizio Sorveglianza host (HGS).AAS
se si usano il database SQL di Azure e Attestazione di Microsoft Azure.
- Impostare
Enclave Attestation URL
su un URL di attestazione per l'ambiente.
Compilare ed eseguire l'applicazione.