Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server 2019 (15.x) e versões posteriores no Windows
Azure SQL Database
Este tutorial ensina-te a desenvolver uma aplicação que emite consultas à base de dados que utilizam um enclave seguro do lado do servidor para Always Encrypted com enclaves seguros.
Observação
O .NET Framework não suporta o uso do Always Encrypted com enclaves VBS sem atestado. Este tutorial só é aplicável se estiveres a usar atestação com o Microsoft Azure Attestation (com enclaves Intel SGX no Azure SQL Database) ou o Host Guardian Service (com enclaves VBS no SQL Server).
Pré-requisitos
Certifique-se de ter concluído um dos tutoriais indicados em , Introdução ao uso do Always Encrypted com enclaves seguros,, antes de seguir os passos abaixo neste tutorial.
Também vais precisar do Visual Studio (recomenda-se a versão 2022) – descarrega-o de https://visualstudio.microsoft.com/. A sua máquina de desenvolvimento de aplicações deve correr o .NET Framework 4.7.2 ou posterior.
Passo 1: Configurar o seu projeto Visual Studio
Para usar o Always Encrypted com enclaves seguros numa aplicação .NET Framework, é necessário garantir que a sua aplicação é construída com base no .NET Framework 4.7.2 e está integrada com o Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGet. Além disso, se guardar a sua chave mestre de coluna no Azure Key Vault, também precisa de integrar a sua aplicação com o Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet, versão 2.4.0 ou mais recente.
Abra o Visual Studio.
Crie um novo projeto de Aplicação de Consola C# (.NET Framework).
Certifica-te de que o teu projeto tem como objetivo pelo menos o .NET Framework 4.7.2. Clique com o botão direito no projeto no Explorador de Soluções, selecione Propriedades e defina o framework de destino para .NET Framework 4.7.2.
Instale o seguinte pacote NuGet indo a Ferramentas (menu principal) > Gestor de >Package Manager Console. Execute o código seguinte na Consola do Gestor de Pacotes.
Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrereleaseSe usar o Azure Key Vault para armazenar as suas chaves mestras de coluna, instale os seguintes pacotes NuGet indo a Ferramentas (menu principal) > Gestor de >Package Manager Console. Execute o código seguinte na Consola do Gestor de Pacotes.
Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0 Install-Package Microsoft.IdentityModel.Clients.ActiveDirectoryAbre o ficheiro App.config do teu projeto.
Localize a
<configuration>secção e adicione ou atualize as<configSections>secções.Se a secção
<configuration>não contiver a secção<configSections>, adicione o conteúdo seguinte imediatamente abaixo de<configuration>.<configSections> <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections>Se a
<configuration>secção já contiver a secção<configSections>, adicione a seguinte linha dentro da secção<configSections>.<section name="SqlColumnEncryptionEnclaveProviders" type="System. Data.SqlClient. SqlColumnEncryptionEnclaveProviderConfigurationSection, System. Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Dentro da
<configuration>secção, abaixo</configSections>, adicione uma nova secção, que especifica um fornecedor de enclave a ser usado para atestar e interagir com o seu enclave seguro do lado do servidor.Se estiver a usar SQL Server e Host Guardian Service (HGS) (está a usar a base de dados do Tutorial: Começar a usar o Always Encrypted com enclaves seguros no SQL Server), adicione a secção abaixo.
<SqlColumnEncryptionEnclaveProviders> <providers> <add name="VBS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.HostGuardianServiceEnclaveProvider, Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> </providers> </SqlColumnEncryptionEnclaveProviders>Aqui está um exemplo completo de um ficheiro app.config para uma aplicação simples de consola.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <SqlColumnEncryptionEnclaveProviders> <providers> <add name="VBS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.HostGuardianServiceEnclaveProvider, Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/> </providers> </SqlColumnEncryptionEnclaveProviders> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> </configuration>Se estiver a usar Azure SQL Database com enclaves SGX e Microsoft Azure Attestation (está a usar a base de dados do Tutorial: Começar com Always Encrypted com enclaves seguros Intel SGX no Azure SQL Database), adicione a secção abaixo.
<SqlColumnEncryptionEnclaveProviders> <providers> <add name="SGX" type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.AzureAttestationEnclaveProvider, Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> </providers> </SqlColumnEncryptionEnclaveProviders>Aqui está um exemplo completo de um ficheiro app.config para uma aplicação simples de consola.
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> </configSections> <SqlColumnEncryptionEnclaveProviders> <providers> <add name="SGX" type="Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders.AzureAttestationEnclaveProvider, Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders, Version=15.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" /> </providers> </SqlColumnEncryptionEnclaveProviders> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" /> </startup> </configuration>
Passo 2: Implemente a lógica da sua aplicação
A sua aplicação irá ligar-se à base de dados ContosoHR criada num dos tutoriais, veja Pré-requisitos e irá executar uma consulta que contém o LIKE predicado na coluna do SSN e uma comparação de intervalos na coluna Salário .
Substitua o conteúdo do ficheiro Program.cs (gerado pelo Visual Studio) pelo código abaixo. Atualize a cadeia de ligação à base de dados com o nome do seu servidor, as definições de autenticação da base de dados e o URL de atestação do enclave para o seu ambiente.
using System; using System.Data.SqlClient; using System.Data; namespace ConsoleApp1 { class Program { static void Main(string[] args) { string connectionString = "Data Source = myserver; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;Enclave Attestation Url = http://hgs.bastion.local/Attestation; Integrated Security = true"; //string connectionString = "Data Source = myserver.database.windows.net; Initial Catalog = ContosoHR; Column Encryption Setting = Enabled;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(); } } } }Compile e execute o aplicativo.