Esercitazione: Introduzione ad Always Encrypted con enclave sicure nel database SQL di AzureTutorial: Getting started with Always Encrypted with secure enclaves in Azure SQL Database

SI APPLICA A: Database SQL di Azure

Nota

Always Encrypted con enclave sicure per il database SQL di Azure è attualmente disponibile in anteprima pubblica.Always Encrypted with secure enclaves for Azure SQL Database is currently in public preview.

Questa esercitazione illustra come iniziare a usare Always Encrypted con le enclave sicure nel database SQL di Azure.This tutorial teaches you how to get started with Always Encrypted with secure enclaves in Azure SQL Database. L'esercitazione spiega:It will show you:

  • Come creare un ambiente per il test e la valutazione di Always Encrypted con enclave sicure.How to create an environment for testing and evaluating Always Encrypted with secure enclaves.
  • Come crittografare i dati in locale ed eseguire query avanzate riservate su colonne crittografate usando SQL Server Management Studio (SSMS).How to encrypt data in-place and issue rich confidential queries against encrypted columns using SQL Server Management Studio (SSMS).

PrerequisitiPrerequisites

Questa esercitazione richiede Azure PowerShell e SSMS.This tutorial requires Azure PowerShell and SSMS.

Requisiti di PowerShellPowerShell requirements

Per informazioni su come installare ed eseguire Azure PowerShell, vedere Panoramica di Azure PowerShell.See Overview of Azure PowerShell for information on how to install and run Azure PowerShell.

Versione minima dei moduli Az necessaria per supportare le operazioni di attestazione:Minimum version of Az modules required to support attestation operations:

  • Az 4.5.0Az 4.5.0
  • Az.Accounts 1.9.2Az.Accounts 1.9.2
  • Az.Attestation 0.1.8Az.Attestation 0.1.8

Eseguire il comando seguente per verificare la versione installata di tutti i moduli AZ:Run the below command to verify the installed version of all Az modules:

Get-InstalledModule

Se le versioni non corrispondono al requisito minimo, eseguire il Update-Module comando.If the versions aren't matching with the minimum requirement, run the Update-Module command.

Il PowerShell Gallery ha deprecato Transport Layer Security (TLS) versioni 1,0 e 1,1.The PowerShell Gallery has deprecated Transport Layer Security (TLS) versions 1.0 and 1.1. È consigliabile usare TLS 1.2 o versione successiva.TLS 1.2 or a later version is recommended. Se si usa una versione di TLS precedente alla 1,2, è possibile che vengano visualizzati gli errori seguenti:You may receive the following errors if you are using a TLS version lower than 1.2:

  • WARNING: Unable to resolve package source 'https://www.powershellgallery.com/api/v2'
  • PackageManagement\Install-Package: No match was found for the specified search criteria and module name.

Per continuare a interagire con PowerShell Gallery, eseguire il comando seguente prima dei comandi Install-ModuleTo continue to interact with the PowerShell Gallery, run the following command before the Install-Module commands

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

Requisiti di SSMSSSMS requirements

Per informazioni su come scaricare SSMS, vedere scaricare SQL Server Management Studio (SSMS) .See Download SQL Server Management Studio (SSMS) for information on how to download SSMS.

La versione minima richiesta di SSMS è 18,8.The required minimum version of SSMS is 18.8.

Passaggio 1: creare e configurare un server e un database della serie DCStep 1: Create and configure a server and a DC-series database

In questo passaggio si creerà un nuovo server logico di database SQL di Azure e un nuovo database usando la generazione hardware della serie DC, necessaria per Always Encrypted con enclave sicure.In this step, you will create a new Azure SQL Database logical server and a new database using the DC-series hardware generation, required for Always Encrypted with secure enclaves. Per ulteriori informazioni, vedere la serie DC.For more information see DC-series.

  1. Aprire una console di PowerShell e importare la versione richiesta di AZ.Open a PowerShell console and import the required version of Az.
Import-Module "Az" -MinimumVersion "4.5.0"
  1. Accedere ad Azure.Sign into Azure. Se necessario, passare alla sottoscrizione usata per questa esercitazione.If needed, switch to the subscription you are using for this tutorial.
Connect-AzAccount
$subscriptionId = "<your subscription ID>"
Set-AzContext -Subscription $subscriptionId
  1. Creare un nuovo gruppo di risorse.Create a new resource group.

Importante

È necessario creare il gruppo di risorse in un'area (percorso) che supporta sia la generazione dell'hardware della serie DC che l'attestazione Microsoft Azure.You need to create your resource group in a region (location) that supports both the DC-series hardware generation and Microsoft Azure Attestation. Per l'elenco delle aree che supportano la serie DC, vedere disponibilità della serie DC.For the list of regions supporting DC-series, see DC-series availability. Di seguito è illustrata la disponibilità a livello di area dell'attestazione Microsoft Azure.Here is the regional availability of Microsoft Azure Attestation.

$resourceGroupName = "<your new resource group name>"
$location = "<Azure region supporting DC-series and Microsoft Azure Attestation>"
New-AzResourceGroup -Name $resourceGroupName -Location $location
  1. Creare un server logico SQL di Azure.Create an Azure SQL logical server. Quando richiesto, immettere il nome dell'amministratore del server e una password.When prompted, enter the server administrator name and a password. Assicurarsi di ricordare il nome dell'amministratore e la password, che sarà necessario in seguito per la connessione al server.Make sure you remember the admin name and the password - you will need them later to connect to the server.
$serverName = "<your server name>" 
New-AzSqlServer -ServerName $serverName -ResourceGroupName $resourceGroupName -Location $location 
  1. Creare una regola del firewall del server che consenta l'accesso dall'intervallo di indirizzi IP specificato.Create a server firewall rule that allows access from the specified IP range.
$startIp = "<start of IP range>"
$endIp = "<end of IP range>"
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
  -ServerName $serverName `
  -FirewallRuleName "AllowedIPs" -StartIpAddress $startIp -EndIpAddress $endIp
  1. Assegnare un'identità del sistema gestito al server.Assign a managed system identity to your server.
$server = Set-AzSqlServer -ServerName $serverName -ResourceGroupName $resourceGroupName -AssignIdentity
$serverObjectId = $server.Identity.PrincipalId
  1. Creare un database della serie DC.Create a DC-series database.
$databaseName = "ContosoHR"
$edition = "GeneralPurpose"
$vCore = 2
$generation = "DC"
New-AzSqlDatabase -ResourceGroupName $resourceGroupName `
  -ServerName $serverName `
  -DatabaseName $databaseName `
  -Edition $edition `
  -Vcore $vCore `
  -ComputeGeneration $generation
  1. Recuperare e salvare le informazioni relative al server e al database.Retrieve and save the information about your server and the database. Queste informazioni sono necessarie, nonché il nome dell'amministratore e la password del passaggio 4 in questa sezione, nelle sezioni successive.You will need this information, as well as the admin name and the password from step 4 in this section, in later sections.
Write-Host 
Write-Host "Fully qualified server name: $($server.FullyQualifiedDomainName)" 
Write-Host "Server Object Id: $serverObjectId"
Write-Host "Database name: $databaseName"

Passaggio 2: configurare un provider di attestazioneStep 2: Configure an attestation provider

In questo passaggio verrà creato e configurato un provider di attestazione in Microsoft Azure attestazione.In this step, You'll create and configure an attestation provider in Microsoft Azure Attestation. Questa operazione è necessaria per attestare l'enclave protetta utilizzata dal database.This is needed to attest the secure enclave your database uses.

  1. Copiare i criteri di attestazione seguenti e salvarli in un file di testo (txt).Copy the below attestation policy and save the policy in a text file (txt). Per informazioni sui criteri seguenti, vedere creare e configurare un provider di attestazione.For information about the below policy, see Create and configure an attestation provider.
version= 1.0;
authorizationrules 
{
     [ type=="x-ms-sgx-is-debuggable", value==false ]
      && [ type=="x-ms-sgx-product-id", value==4639 ]
      && [ type=="x-ms-sgx-svn", value>= 0 ]
      && [ type=="x-ms-sgx-mrsigner", value=="e31c9e505f37a58de09335075fc8591254313eb20bb1a27e5443cc450b6e33e5"] 
  => permit();
};
  1. Importare la versione richiesta di Az.Attestation .Import the required version of Az.Attestation.
Import-Module "Az.Attestation" -MinimumVersion "0.1.8"
  1. Creare un provider di attestazione.Create an attestation provider.
$attestationProviderName = "<your attestation provider name>" 
New-AzAttestation -Name $attestationProviderName -ResourceGroupName $resourceGroupName -Location $location
  1. Configurare i criteri di attestazione.Configure your attestation policy.
$policyFile = "<the pathname of the file from step 1 in this section>"
$teeType = "SgxEnclave"
$policyFormat = "Text"
$policy=Get-Content -path $policyFile -Raw
Set-AzAttestationPolicy -Name $attestationProviderName `
  -ResourceGroupName $resourceGroupName `
  -Tee $teeType `
  -Policy $policy `
  -PolicyFormat  $policyFormat
  1. Concedere al server logico SQL di Azure l'accesso al provider di attestazione.Grant your Azure SQL logical server access to your attestation provider. In questo passaggio si usa l'ID oggetto dell'identità del servizio gestito assegnata in precedenza al server.In this step, you're using the object ID of the managed service identity that you assigned to your server earlier.
New-AzRoleAssignment -ObjectId $serverObjectId `
  -RoleDefinitionName "Attestation Reader" `
  -ResourceName $attestationProviderName `
  -ResourceType "Microsoft.Attestation/attestationProviders" `
  -ResourceGroupName $resourceGroupName  
  1. Recuperare l'URL di attestazione che punta a un criterio di attestazione configurato per l'enclave SGX.Retrieve the attestation URL that points to an attestation policy you configured for the SGX enclave. Salvare l'URL, perché sarà necessario in un secondo momento.Save the URL, as you will need it later.
$attestationProvider = Get-AzAttestation -Name $attestationProviderName -ResourceGroupName $resourceGroupName 
$attestationUrl = $attestationProvider.AttestUri + “/attest/SgxEnclave”
Write-Host
Write-Host "Your attestation URL is: $attestationUrl"

L'URL di attestazione dovrebbe essere simile al seguente: https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclaveThe attestation URL should look like this: https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave

Passaggio 3: popolare il databaseStep 3: Populate your database

In questo passaggio verrà creata una tabella che verrà popolata con alcuni dati che verranno successivamente crittografati ed eseguiranno una query.In this step, you'll create a table and populate it with some data that you'll later encrypt and query.

  1. Aprire SSMS e connettersi al database ContosoHR nel server logico di Azure SQL creato senza always Encrypted abilitato nella connessione al database.Open SSMS and connect to the ContosoHR database in the Azure SQL logical server you created without Always Encrypted enabled in the database connection.

    1. Nella finestra di dialogo Connetti al server specificare il nome completo del server (ad esempio, myserver123.database.Windows.NET) e immettere il nome utente dell'amministratore e la password specificata al momento della creazione del server.In the Connect to Server dialog, specify the fully qualified name of your server (for example, myserver123.database.windows.net), and enter the administrator user name and the password you specified when you created the server.

    2. Fare clic su opzioni >> e selezionare la scheda Proprietà connessione . Assicurarsi di selezionare il database ContosoHR (non il database master predefinito).Click Options >> and select the Connection Properties tab. Make sure to select the ContosoHR database (not the default, master database).

    3. Selezionare la scheda Always Encrypted.Select the Always Encrypted tab.

    4. Verificare che la casella di controllo Abilita Always Encrypted (crittografia colonna) non sia selezionata.Make sure the Enable Always Encrypted (column encryption) checkbox is not selected.

      Connetti senza Always Encrypted

    5. Fare clic su Connect (Connetti).Click Connect.

  2. Creare una nuova tabella con nome Employees.Create a new table, named Employees.

    CREATE SCHEMA [HR];
    GO
    
    CREATE TABLE [HR].[Employees]
    (
        [EmployeeID] [int] IDENTITY(1,1) NOT NULL,
        [SSN] [char](11) NOT NULL,
        [FirstName] [nvarchar](50) NOT NULL,
        [LastName] [nvarchar](50) NOT NULL,
        [Salary] [money] NOT NULL
    ) ON [PRIMARY];
    GO
    
  3. Aggiungere alcuni record dei dipendenti alla tabella Employees.Add a few employee records to the Employees table.

    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('795-73-9838'
            , N'Catherine'
            , N'Abel'
            , $31692);
    
    INSERT INTO [HR].[Employees]
            ([SSN]
            ,[FirstName]
            ,[LastName]
            ,[Salary])
        VALUES
            ('990-00-6818'
            , N'Kim'
            , N'Abercrombie'
            , $55415);
    

Passaggio 4: effettuare il provisioning di chiavi abilitate per EnclavStep 4: Provision enclave-enabled keys

In questo passaggio verranno create una chiave master della colonna e una chiave di crittografia della colonna che consentono i calcoli dell'enclave.In this step, you'll create a column master key and a column encryption key that allow enclave computations.

  1. Usando l'istanza di SSMS nel passaggio precedente, in Esplora oggetti espandere il database e passare a Sicurezza > Chiavi Always Encrypted.Using the SSMS instance from the previous step, in Object Explorer, expand your database and navigate to Security > Always Encrypted Keys.

  2. Effettuare il provisioning di una nuova chiave master della colonna abilitata per l'enclave:Provision a new enclave-enabled column master key:

    1. Fare clic con il pulsante destro del mouse su Chiavi Always Encrypted e scegliere Nuova chiave master della colonna.Right-click Always Encrypted Keys and select New Column Master Key....

    2. Selezionare il nome della chiave master della colonna: CMK1.Select your column master key name: CMK1.

    3. Assicurarsi di selezionare Archivio certificati Windows (Utente corrente o Computer locale) o Azure Key Vault.Make sure you select either Windows Certificate Store (Current User or Local Machine) or Azure Key Vault.

    4. Selezionare Consenti calcoli enclave.Select Allow enclave computations.

    5. Se è stata selezionata l'opzione Azure Key Vault, accedere ad Azure e selezionare l'insieme di credenziali delle chiavi.If you selected Azure Key Vault, sign into Azure and select your key vault. Per altre informazioni su come creare un insieme di credenziali delle chiavi per Always Encrypted, vedere Manage your key vaults from Azure portal (Gestire gli insiemi di credenziali delle chiavi dal portale di Azure).For more information on how to create a key vault for Always Encrypted, see Manage your key vaults from Azure portal.

    6. Selezionare il certificato o la chiave di Azure Key Vault se esiste già oppure fare clic sul pulsante Genera certificato per crearne uno nuovo.Select your certificate or Azure Key Value key if it already exists, or click the Generate Certificate button to create a new one.

    7. Selezionare OK.Select OK.

      Consenti calcoli enclave

  3. Creare una nuova chiave di crittografia di colonna abilitata per l'enclave:Create a new enclave-enabled column encryption key:

    1. Fare clic con il pulsante destro del mouse su Chiavi Always Encrypted e scegliere Nuova chiave di crittografia della colonna.Right-click Always Encrypted Keys and select New Column Encryption Key.
    2. Immettere un nome per la nuova chiave di crittografia della colonna: CEK1.Enter a name for the new column encryption key: CEK1.
    3. Nell'elenco a discesa Chiave master della colonna selezionare la chiave master della colonna creata nei passaggi precedenti.In the Column master key dropdown, select the column master key you created in the previous steps.
    4. Selezionare OK.Select OK.

Passaggio 5: crittografare alcune colonne sul postoStep 5: Encrypt some columns in place

In questo passaggio verranno crittografati i dati archiviati nelle colonne SSN e Salary nell'enclave del lato server e quindi verrà testato un query SELECT sui dati.In this step, you'll encrypt the data stored in the SSN and Salary columns inside the server-side enclave, and then test a SELECT query on the data.

  1. Aprire una nuova istanza di SSMS e connettersi al database con always Encrypted abilitata per la connessione al database.Open a new SSMS instance and connect to your database with Always Encrypted enabled for the database connection.

    1. Avviare una nuova istanza di SSMS.Start a new instance of SSMS.

    2. Nella finestra di dialogo Connetti al server specificare il nome completo del server (ad esempio, myserver123.database.Windows.NET) e immettere il nome utente dell'amministratore e la password specificata al momento della creazione del server.In the Connect to Server dialog, specify the fully qualified name of your server (for example, myserver123.database.windows.net), and enter the administrator user name and the password you specified when you created the server.

    3. Fare clic su opzioni >> e selezionare la scheda Proprietà connessione . Assicurarsi di selezionare il database ContosoHR (non il database master predefinito).Click Options >> and select the Connection Properties tab. Make sure to select the ContosoHR database (not the default, master database).

    4. Selezionare la scheda Always Encrypted.Select the Always Encrypted tab.

    5. Verificare che la casella di controllo abilita always Encrypted (crittografia di colonna) sia selezionata.Make sure the Enable Always Encrypted (column encryption) checkbox is selected.

    6. Specificare l'URL di attestazione dell'enclave ottenuto seguendo i passaggi descritti in passaggio 2: configurare un provider di attestazione.Specify your enclave attestation URL that you've obtained by following the steps in Step 2: Configure an attestation provider. Vedere la schermata seguente.See the below screenshot.

      Connetti con attestazione

    7. Selezionare Connetti.Select Connect.

    8. Se viene richiesto di abilitare la parametrizzazione per Always Encrypted query, selezionare Abilita.If you're prompted to enable Parameterization for Always Encrypted queries, select Enable.

  2. Usando la stessa istanza di SSMS (con Always Encrypted abilitato), aprire una nuova finestra query e crittografare le colonne SSN e Salary eseguendo le istruzioni seguenti.Using the same SSMS instance (with Always Encrypted enabled), open a new query window and encrypt the SSN and Salary columns by running the below statements.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [SSN] [char] (11) COLLATE Latin1_General_BIN2
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [Salary] [money]
    ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
    WITH
    (ONLINE = ON);
    
    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Nota

    Si noti l'istruzione ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE per cancellare la cache del piano di query per il database nello script precedente.Notice the ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE statement to clear the query plan cache for the database in the above script. Dopo aver modificato la tabella, è necessario cancellare i piani per tutti i batch e le stored procedure che accedono alla tabella per aggiornare le informazioni di crittografia dei parametri.After you have altered the table, you need to clear the plans for all batches and stored procedures that access the table to refresh parameters encryption information.

  3. Per verificare che le colonne SSN e Salary ora sono crittografate, aprire una nuova finestra di query nell'istanza di SSMS senza Always Encrypted abilitato per la connessione di database ed eseguire l'istruzione seguente.To verify the SSN and Salary columns are now encrypted, open a new query window in the SSMS instance without Always Encrypted enabled for the database connection and execute the below statement. La finestra di query restituirà valori crittografati nelle colonne SSN e Salary.The query window should return encrypted values in the SSN and Salary columns. Se si esegue la stessa query usando l'istanza di SSMS con Always Encrypted abilitato, verranno visualizzati i dati decrittografati.If you execute the same query using the SSMS instance with Always Encrypted enabled, you should see the data decrypted.

    SELECT * FROM [HR].[Employees];
    

Passaggio 6: eseguire query complete sulle colonne crittografateStep 6: Run rich queries against encrypted columns

È possibile eseguire query complete sulle colonne crittografate.You can run rich queries against the encrypted columns. Vengono eseguite alcune operazioni di elaborazione query nell'enclave lato server.Some query processing will be performed inside your server-side enclave.

  1. Nell'istanza di SSMS con Always Encrypted abilitato verificare che la parametrizzazione per Always Encrypted sia abilitata.In the SSMS instance with Always Encrypted enabled, make sure Parameterization for Always Encrypted is also enabled.

    1. Selezionare Strumenti dal menu principale di SSMS.Select Tools from the main menu of SSMS.
    2. Selezionare Opzioni.Select Options....
    3. Passare a Esecuzione query > SQL Server > Avanzata.Navigate to Query Execution > SQL Server > Advanced.
    4. Assicurarsi che l'opzione Abilita parametrizzazione per Always Encrypted sia selezionata.Ensure that Enable Parameterization for Always Encrypted is checked.
    5. Selezionare OK.Select OK.
  2. Aprire una nuova finestra di query, incollare la query seguente ed eseguire.Open a new query window, paste in the below query, and execute. La query restituisce valori di testo non crittografato e righe che soddisfano i criteri di ricerca specificati.The query should return plaintext values and rows meeting the specified search criteria.

    DECLARE @SSNPattern [char](11) = '%6818';
    DECLARE @MinSalary [money] = $1000;
    SELECT * FROM [HR].[Employees]
    WHERE SSN LIKE @SSNPattern AND [Salary] >= @MinSalary;
    
  3. Provare a ripetere la stessa query nell'istanza di SSMS che non ha Always Encrypted abilitata.Try the same query again in the SSMS instance that doesn't have Always Encrypted enabled. Si verificherà un errore.A failure should occur.

Passaggi successiviNext steps

Al termine dell'esercitazione, è possibile passare a una delle esercitazioni seguenti:After completing this tutorial, you can go to one of the following tutorials:

Vedere ancheSee Also