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 ALTER TABLE column_definition (Transact-SQL) che attivano operazioni di crittografia sul posto usando chiavi abilitate per l'enclave. Per altre informazioni, vedere Configurare la crittografia delle colonne sul posto usando Always Encrypted con enclave sicure.
- Istruzioni CREATE INDEX (Transact-SQL) e ALTER INDEX (Transact-SQL) che creano o modificano gli indici per le colonne abilitate per l'enclave usando la crittografia casuale. Per altre informazioni, vedere Creare e usare indici in colonne usando Always Encrypted con enclave sicuri.
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:
- Le query che usano uno o più degli operatori Transact-SQL seguenti sono supportate all'interno di enclave sicure:
- Operatori di confronto
- BETWEEN (Transact-SQL)
- IN (Transact-SQL)
- LIKE (Transact-SQL)
- DISTINCT
- Join - SQL Server 2019 (15.x) supporta solo i join a cicli annidati. SQL Server 2022 (16.x) e database SQL di Azure supportano cicli annidati, hash e merge join
- Clausola SELECT - ORDER BY (Transact-SQL). supportato in SQL Server 2022 (16.x) e nel database SQL di Azure. Non supportato in SQL Server 2019 (15.x)
- Clausola SELECT - GROUP BY (Transact-SQL). supportato in SQL Server 2022 (16.x) e nel database SQL di Azure. Non supportato in SQL Server 2019 (15.x)
- Query che inseriscono, aggiornano o eliminano righe, che a loro volta attivano l'inserimento e/o la rimozione di una chiave di indice da e verso un indice in una colonna abilitata per l'enclave. Per altre informazioni, vedere Creare e usare indici in colonne usando Always Encrypted con enclave sicuri
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.
- Vedere Sviluppare applicazioni usando Always Encrypted con enclave sicure per informazioni sui driver client che supportano Always Encrypted con enclave sicure.
- Vedere le sezioni seguenti per informazioni sugli strumenti che supportano 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.
- Se si usano SQL Server e il servizio Sorveglianza host (HGS), vedere Determinare e condividere l'URL di attestazione del servizio Sorveglianza host.
- Se si usano il database SQL di Azure con enclave Intel SGX e l'attestazione di Azure di Microsoft, vedere Determinare l'URL di attestazione per i criteri di 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.
Nella finestra di dialogo Connetti al server specificare il nome del server, selezionare un metodo di autenticazione e specificare le credenziali.
Selezionare Opzioni >>e selezionare la scheda Proprietà connessione. Specificare il nome del database.
Selezionare la scheda Always Encrypted.
Selezionare Abilita Always Encrypted (crittografia della colonna).
Selezionare Abilita enclavi sicure.
Impostare il Protocollo su:
- servizio Sorveglianza host se si usano SQL Server.
- Microsoft Azure Attestation se si usa il database SQL di Azure con le enclavi Intel SGX.
- Nessuno se si usa il database SQL di Azure con enclavi VBS.
Specificare l'URL di attestazione dell'enclave. Non applicabile quando il Protocollo è impostato su Nessuno. Ad esempio,
https://hgs.bastion.local/Attestation
ohttps://contososqlattestation.uks.attest.azure.net/attest/SgxEnclave
.Selezionare Connetti.
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.
Nella finestra di dialogo Connessione, selezionare Avanzate….
Per abilitare Always Encrypted per la connessione, impostare il campo Always Encrypted su Attivato.
Per abilitare enclave sicure, impostare il campo Enclave sicuri su Abilitato.
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.
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
Ricerca esatta delle corrispondenze
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
Ricerca con criteri di ricerca
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