Megosztás a következőn keresztül:


Oktatóanyag: .NET-keretrendszeralkalmazás fejlesztése az Always Encrypted használatával biztonságos enklávékkal

A következőkre vonatkozik: SQL Server 2019 (15.x) és újabb verziók Windows Azure SQL Database-en

Ez az oktatóanyag bemutatja, hogyan fejleszthet olyan alkalmazásokat, amelyek az Always Encrypted kiszolgálóoldali biztonságos enklávéját biztonságos enklávékkal használó adatbázis-lekérdezéseket bocsátanak ki.

Megjegyzés:

A .NET-keretrendszer nem támogatja az Always Encrypted használatát VBS-enklávékkal igazolás nélkül. Ez az oktatóanyag csak akkor alkalmazható, ha a Microsoft Azure-igazolással (az Azure SQL Database-ben intel SGX-enklávékkal) vagy a Host Guardian Service-tel (az SQL Server VBS-enklávéival) rendelkező igazolást használ.

Előfeltételek

Mielőtt követné az alábbi lépéseket ebben az oktatóanyagban, győződjön meg arról, hogy elvégezte az Always Encrypted biztonságos enklávékkal való használatának valamelyik vagy oktatóanyagát.

Szüksége lesz a Visual Studio-ra is (a 2022-es verzió ajánlott) – töltse le innen https://visualstudio.microsoft.com/. Az alkalmazásfejlesztő gépnek a .NET-keretrendszer 4.7.2-s vagy újabb verzióját kell futtatnia.

1. lépés: A Visual Studio Project beállítása

Ha az Always Encryptedt biztonságos enklávékkal szeretné használni egy .NET-keretrendszeralkalmazásban, győződjön meg arról, hogy az alkalmazás a .NET-keretrendszer 4.7.2-ben készült, és integrálva van a Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders NuGettel. Ezenkívül ha az oszlop főkulcsát az Azure Key Vaultban tárolja, integrálnia kell az alkalmazást a Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider NuGet 2.4.0-s vagy újabb verziójával.

  1. Nyissa meg a Visual Studiót.

  2. Hozzon létre egy új C#-konzolalkalmazási (.NET-keretrendszer) projektet.

  3. Győződjön meg arról, hogy a projekt legalább a .NET Framework 4.7.2-et célozza meg. Kattintson a jobb gombbal a projektre a Megoldáskezelőben, válassza a Tulajdonságok lehetőséget , és állítsa be a Cél keretrendszert a .NET-keretrendszer 4.7.2-be.

  4. Telepítse a következő NuGet-csomagot az Eszközök (főmenü) >NuGet Package Manager>. Futtassa a következő kódot a Package Manager konzolon.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.EnclaveProviders -IncludePrerelease
    
  5. Ha az Azure Key Vaultot használja az oszlop főkulcsainak tárolásához, telepítse a következő NuGet-csomagokat az Eszközök (főmenü) >NuGet Package>. Futtassa a következő kódot a Package Manager konzolon.

    Install-Package Microsoft.SqlServer.Management.AlwaysEncrypted.AzureKeyVaultProvider -IncludePrerelease -Version 2.4.0
    Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
    
  6. Nyissa meg a projekt App.config fájlját.

  7. Keresse meg a szakaszt <configuration> , és adja hozzá vagy frissítse a <configSections> szakaszokat.

    1. Ha a <configuration> szakasz nem tartalmazza a szakaszt <configSections> , közvetlenül alább <configuration>adja hozzá a következő tartalmat.

      <configSections>
        <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      </configSections>
      
    2. Ha a <configuration> szakasz már tartalmazza a szakaszt <configSections> , adja hozzá a következő sort a szakaszon <configSections> belül:

      <section name="SqlColumnEncryptionEnclaveProviders"  type="System.   Data.SqlClient.   SqlColumnEncryptionEnclaveProviderConfigurationSection, System.   Data,  Version=4.0.0.0, Culture=neutral,    PublicKeyToken=b77a5c561934e089" />
      
  8. <configuration> szakaszon belül, a </configSections> alatti szakaszban adjon hozzá egy új szakaszt, amely meghatározza az igazolásra és interakcióra használni kívánt enklávészolgáltatót a kiszolgálóoldali biztonságos enklávéhoz.

    1. Ha az SQL Servert és a Host Guardian Service (HGS) szolgáltatást használja (az októanyag: Az Always Encrypted használatának első lépései biztonságos enklávékkal az SQL Serverben alapján használja az adatbázist), adja hozzá az alábbi szakaszt.

      <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>
      

      Íme egy teljes példa egy egyszerű konzolalkalmazás app.config fájljára.

      <?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>
      
    2. Ha az Azure SQL Database-t SGX-enklávékkal és Microsoft Azure-igazolásokkal használja (az oktatóanyagból származó adatbázist használja : Az Always Encrypted használatának első lépései biztonságos Intel SGX-enklávékkal az Azure SQL Database-ben), adja hozzá az alábbi szakaszt.

      <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>
      

      Íme egy teljes példa egy egyszerű konzolalkalmazás app.config fájljára.

      <?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>
      

2. lépés: Az alkalmazáslogika megvalósítása

Az alkalmazás csatlakozni fog az egyik oktatóanyagban létrehozott ContosoHR-adatbázishoz , lásd : Előfeltételek , és egy olyan lekérdezést fog futtatni, amely tartalmazza az LIKESSN oszlop predikátumát és egy tartomány-összehasonlítást a Fizetés oszlopban.

  1. Cserélje le a Program.cs fájl tartalmát (amelyet a Visual Studio hozott létre) az alábbi kódra. Frissítse az adatbázis kapcsolati sztringet a kiszolgáló nevével, az adatbázis-hitelesítési beállításokkal és a környezet enklávé igazolási URL-címével.

    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();
                }
            }
        }
    }
    
  2. Hozza létre és futtassa az alkalmazást.

Lásd még