Eseguire istruzioni Transact-SQL con enclave sicure

Si applica a: SQL Server 2019 (15.x) e versioni successive - Solo Windows Database SQL di Azure

Always Encrypted con enclave sicure consente ad alcune istruzioni Transact-SQL (T-SQL) di eseguire calcoli riservati sulle colonne di database crittografate in un'enclave sicura sul lato server.

Istruzioni che usano le enclave sicure

I tipi di istruzioni T-SQL seguenti usano le enclave sicure.

Istruzioni DDL che usano enclave sicure

I tipi seguenti di istruzioni DDL (Data Definition Language) richiedono enclave sicure.

Istruzioni DML che usano enclave sicure

Le istruzioni DML (Data Manipulation Language) seguenti o le query sulle colonne abilitate per l'enclave che usano la crittografia casuale richiedono le enclave sicure:

Nota

Le operazioni sugli indici e le query DML riservate che usano le enclave sono supportate solo nelle colonne abilitate per l'enclave che usano la crittografia casuale. La crittografia deterministica non è supportata.

Il livello di compatibilità del database deve essere impostato su SQL Server 2022 (160) o superiore.

Nel database SQL di Azure e in SQL Server 2022 (16.x), le query riservate che usano enclave su una colonna di stringhe di caratteri (char, nchar) richiedono che la colonna usi regole di confronto del punto di codice binario (_BIN2) o UTF-8. In SQL Server 2019 (15.x) sono necessarie regole di confronto a_BIN2.

Comandi DBCC che usano enclave sicure

Anche i comandi amministrativi DBCC (Transact-SQL) che comportano il controllo dell'integrità degli indici potrebbero richiedere enclave sicure, se il database contiene indici su colonne abilitate per l'enclave che usano la crittografia casuale. Ad esempio, DBCC CHECKDB (Transact-SQL) e DBCC CHECKTABLE (Transact-SQL).

Prerequisiti per l'esecuzione di istruzioni con enclave sicure

L'ambiente deve soddisfare i requisiti seguenti per supportare l'esecuzione di istruzioni che usano un'enclave sicura.

  • L'istanza di SQL Server o il server database in Database SQL di Azure devono essere configurati correttamente per supportare le enclave e l'attestazione, se applicabile/richiesto. Per altre informazioni, vedere Configurare l'enclave sicura e l'attestazione.

  • Quando ci si connette al database da un'applicazione o uno strumento, ad esempio SQL Server Management Studio, assicurarsi di:

    • Usare una versione del driver client o una versione dello strumento che supporti Always Encrypted con enclave sicure.

    • Abilitare Always Encrypted per una connessione di database.

    • Impostare un protocollo di attestazione, che determina se l’applicazione o lo strumento debbano attestare l'enclave prima di inviare query enclave e, in tal caso, quale servizio di attestazione debbano usare. La maggior parte degli strumenti e dei driver supporta i protocolli di attestazione seguenti:

      • Attestazione di Azure di Microsoft: applica l’attestazione usando l’Attestazione di Azure di Microsoft.
      • Servizio Sorveglianza host: applica l'attestazione usando il servizio Sorveglianza host.
      • Nessuno: consente l'uso di enclave senza attestazione.

      La tabella seguente specifica i protocolli di attestazione validi per determinati prodotti SQL e tecnologie enclave:

      Prodotto Tecnologia enclave Protocolli di attestazione supportati
      SQL Server 2019 (15.x) e versioni successive Enclave VBS Servizio Sorveglianza host, nessuno
      Database SQL di Azure Enclave SGX (nei database della serie DC) Attestazione di Microsoft Azure
      Database SQL di Azure Enclave VBS None
  • Specificare un URL di attestazione valido per l'ambiente se si usa l'attestazione.

Prerequisiti per l'esecuzione di istruzioni T-SQL usando le enclave in SSMS

Scaricare l’ultima versione di SQL Server Management Studio (SSMS).

Assicurarsi di eseguire le istruzioni da una finestra di query che usa una connessione per cui sono configurati correttamente Always Encrypted e i parametri di attestazione.

  1. Nella finestra di dialogo Connetti al server specificare il nome del server, selezionare un metodo di autenticazione e specificare le credenziali.

  2. Selezionare Opzioni >>e selezionare la scheda Proprietà connessione. Specificare il nome del database.

  3. Selezionare la scheda Always Encrypted.

  4. Selezionare Abilita Always Encrypted (crittografia della colonna).

  5. Selezionare Abilita enclavi sicure.

  6. Impostare il Protocollo su:

    1. servizio Sorveglianza host se si usano SQL Server.
    2. Microsoft Azure Attestation se si usa il database SQL di Azure con le enclavi Intel SGX.
    3. Nessuno se si usa il database SQL di Azure con enclavi VBS.
  7. Specificare l'URL di attestazione dell'enclave. Non applicabile quando il Protocollo è impostato su Nessuno. Ad esempio, https://hgs.bastion.local/Attestation o https://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave.

    Connettersi al server con l'attestazione tramite SSMS

  8. Selezionare Connetti.

  9. Se viene chiesto di abilitare la parametrizzazione per le query Always Encrypted, selezionare Abilita.

Per ulteriori informazioni, vedere Abilitazione e disabilitazione di Always Encrypted per una connessione di database.

Prerequisiti per l'esecuzione di istruzioni T-SQL usando le enclave in Azure Data Studio

È consigliabile usare la versione minima consigliata 1.23 o versione successiva. Assicurarsi di eseguire le istruzioni da una finestra di query che usa una connessione con la funzionalità Always Encrypted abilitata e con il protocollo di attestazione e l'URL di attestazione corretti configurati.

  1. Nella finestra di dialogo Connessione, selezionare Avanzate….

  2. Per abilitare Always Encrypted per la connessione, impostare il campo Always Encrypted su Attivato.

  3. Per abilitare enclave sicure, impostare il campo Enclave sicuri su Abilitato.

  4. Specificare il protocollo di attestazione e l'URL di attestazione.

    • Se si usa SQL Server, impostare il Protocollo di attestazione su Servizio Sorveglianza host e immettere l'URL di attestazione del servizio Sorveglianza host nel campo URL di attestazione enclave.
    • Se si usa un database di serie DC con Intel SGX nel database SQL di Azure, impostare il Protocollo di attestazione su Attestazione di Azure e immettere l'URL di attestazione che fa riferimento ai criteri nel servizio Attestazione di Microsoft Azure nel campo URL di attestazione enclave.
    • Se si usa un database con enclave VBS abilitati nel database SQL di Azure, impostare il Protocollo di attestazionesu Nessuno.

    Connettersi al server con l'attestazione tramite Azure Data Studio

  5. Selezionare OK per chiudere le Proprietà avanzate.

Per ulteriori informazioni, vedere Abilitazione e disabilitazione di Always Encrypted per una connessione di database.

Se si prevede di eseguire query DML con parametri, è necessario abilitare anche la parametrizzazione per Always Encrypted.

Esempi

Questa sezione include esempi di query DML che usano le enclave.

Negli esempi viene usato lo schema seguente.

CREATE SCHEMA [HR];
GO

CREATE TABLE [HR].[Jobs](
 [JobID] [int] IDENTITY(1,1) PRIMARY KEY,
 [JobTitle] [nvarchar](50) NOT NULL,
 [MinSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [MaxSalary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
);
GO

CREATE TABLE [HR].[Employees](
 [EmployeeID] [int] IDENTITY(1,1) PRIMARY KEY,
 [SSN] [char](11) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [FirstName] [nvarchar](50) NOT NULL,
 [LastName] [nvarchar](50) NOT NULL,
 [Salary] [money] ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
 [JobID] [int] NULL,
 FOREIGN KEY (JobID) REFERENCES [HR].[Jobs] (JobID)
);
GO

La query seguente esegue una ricerca esatta delle corrispondenze per la colonna di tipo stringa SSN crittografata.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

La query seguente esegue una ricerca con criteri di ricerca sulla colonna di tipo stringa SSN crittografata, cercando i dipendenti con l'ultima cifra specificata per il numero di previdenza sociale.

DECLARE @SSN char(11) = '795-73-9838';
SELECT * FROM [HR].[Employees] WHERE [SSN] = @SSN;
GO

Confronto di intervalli

La query seguente esegue un confronto di intervalli sulla colonna Salary crittografata, cercando i dipendenti con stipendi compresi nell'intervallo specificato.

DECLARE @MinSalary money = 40000;
DECLARE @MaxSalary money = 45000;
SELECT * FROM [HR].[Employees] WHERE [Salary] > @MinSalary AND [Salary] < @MaxSalary;
GO

Join

La query seguente crea un join tra le tabelle Employees e Jobs usando la colonna Salary crittografata. La query recupera i dipendenti con stipendi non compresi nell'intervallo di stipendio per l'incarico del dipendente.

SELECT * FROM [HR].[Employees] e
JOIN [HR].[Jobs] j
ON e.[JobID] = j.[JobID] AND e.[Salary] > j.[MaxSalary] OR e.[Salary] < j.[MinSalary];
GO

Ordinamento

La query seguente ordina i record dei dipendenti in base alla colonna Salary crittografata, recuperando i 10 dipendenti con gli stipendi più elevati.

Nota

L'ordinamento delle colonne crittografate è supportato in SQL Server 2022 (16.x) e database SQL di Azure, ma non in SQL Server 2019 (15.x).

SELECT TOP(10) * FROM [HR].[Employees]
ORDER BY [Salary] DESC;
GO

Passaggi successivi

Vedi anche