Esercitazione: Sviluppare un'applicazione .NET usando Always Encrypted con enclave sicuri
Si applica a: SQL Server 2019 (15.x) e versioni successive - Solo Windows Database SQL di Azure
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.
Prerequisiti
Assicurarsi di aver completato una delle esercitazioni introduttive sull'uso di Always Encrypted con enclave sicuri prima di seguire i passaggi seguenti in questa esercitazione.
È necessario anche Visual Studio (è consigliata la versione 2022), che può essere scaricato da https://visualstudio.microsoft.com/. L'ambiente di sviluppo dell'applicazione deve usare .NET Framework 4.6.1 o versione successiva o .NET Core 3.1 o versione successiva.
Passaggio 1: configurare il progetto di Visual Studio
Per usare Always Encrypted con enclavi sicuri in un'applicazione .NET Framework è necessario verificare che l'applicazione abbia come destinazione .NET Framework 4.6.1 o versione successiva. Per usare Always Encrypted con enclavi sicuri in un'applicazione .NET Core è necessario verificare che l'applicazione abbia come destinazione .NET Core 3.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 3.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 5.0.1
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 3.0.0 Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
Passaggio 2: implementare la logica dell'applicazione
L'applicazione si connetterà al database ContosoHR creato in una delle esercitazioni, vedere Prerequisiti ed eseguirà una query contenente il predicato LIKE
nella colonna SSN e un confronto tra intervalli nella 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 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(); } } } }
Aggiornare la stringa di connessione di database.
- Impostare il nome del server valido e le impostazioni di autenticazione del database.
- Se si usa l'attestazione per il database, impostare Enclave Attestation Protocol sul valore corretto per il servizio di attestazione (
HGS
per servizio Sorveglianza host oAAS
per Microsoft attestazione di Azure). In caso contrario, impostare Il protocollo di attestazione dell'enclave suNone
.
Compilare ed eseguire l'applicazione.