Självstudie: Skapa och använda index för kolumner med enklavstöd med hjälp av randomiserad kryptering
gäller för: SQL Server 2019 (15.x) och senare – Windows endast
Azure SQL Database
I den här självstudien lär du dig hur du skapar och använder index för enklaveraktiverade kolumner med hjälp av randomiserad kryptering som stöds i Always Encrypted med säkra enklaver. Den visar dig:
- Så här skapar du ett index när du har åtkomst till nycklarna (kolumnhuvudnyckeln och kolumnkrypteringsnyckeln) som skyddar kolumnen.
- Så här skapar du ett index när du inte har åtkomst till nycklarna som skyddar kolumnen.
Förutsättningar
Ladda ned den senaste versionen av SQL Server Management Studio (SSMS).
Kontrollera att du har slutfört en av handledningarna i Komma igång med Always Encrypted med säkra enklaver, så att du kan avancera till nästa steg nedan i denna handledning.
Steg 1: Aktivera accelererad databasåterställning (ADR) i databasen
Obs
Det här steget gäller endast för SQL Server. Om du använder Azure SQL Database eller Azure SQL Managed Instance hoppar du över det här steget. ADR är alltid aktiverat i Azure SQL Database och Azure SQL Managed Instance.
Microsoft rekommenderar starkt att du aktiverar ADR i databasen innan du skapar det första indexet i en enklavaktiverad kolumn med hjälp av randomiserad kryptering. Se avsnittet Database Recovery i Always Encrypted med säkra enklaver.
Stäng alla SSMS-instanser som du använde i föregående självstudie. Om du stänger SSMS stängs databasanslutningar som du har öppnat, vilket krävs för att aktivera ADR.
Öppna en ny instans av SSMS och anslut till SQL Server-instansen som sysadmin utan Always Encrypted aktiverat för databasanslutningen.
- Starta SSMS.
- I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.
- Välj Alternativ >> och välj fliken Always Encrypted.
- Kontrollera att kryssrutan Aktivera Always Encrypted (kolumnkryptering) inte är markerad .
- Välj Anslut.
Öppna ett nytt frågefönster och kör instruktionen nedan för att aktivera ADR.
ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
Steg 2: Skapa och testa ett index utan rollavgränsning
I det här steget ska du skapa och testa ett index på en krypterad kolumn. Du kommer att fungera som en enskild användare som antar rollerna för både en DBA, som hanterar databasen, och dataägaren som har åtkomst till nycklarna och skyddar data.
Öppna en ny SSMS-instans och anslut till din SQL Server-instans med Always Encrypted aktiverat för databasanslutningen.
- Starta en ny instans av SSMS.
- I dialogrutan Anslut till server anger du servernamnet, väljer en autentiseringsmetod och anger dina autentiseringsuppgifter.
- Välj Alternativ >> och välj fliken Always Encrypted.
- Markera kryssrutorna Aktivera Always Encrypted (kolumnkryptering) och Aktivera säkra enklaver
- Om du använder attestering för databasen väljer du värdet Enclave Attestation Protocol som representerar din attesteringstjänst (Host Guardian Service eller Microsoft Azure Attestation) och fyller i url:en för enklavattestering. Annars väljer du Ingen.
- Välj Anslut.
- Om du uppmanas att aktivera parameterisering för Always Encrypted-frågor väljer du Aktivera.
Om du inte uppmanas att aktivera parameterisering för Always Encrypted kontrollerar du att den är aktiverad.
- Välj Verktyg på huvudmenyn i SSMS.
- Välj alternativ....
- Gå till Frågekörning>SQL Server>Avancerad.
- Kontrollera att Aktivera parameterisering för Always Encrypted är markerat.
- Välj OK.
Öppna ett frågefönster och kör nedanstående instruktioner för att kryptera kolumnen LastName i tabellen Employees. Du skapar och använder ett index för kolumnen i senare steg.
ALTER TABLE [HR].[Employees] ALTER COLUMN [LastName] [nvarchar](50) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL; GO ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE; GO
Skapa ett index i kolumnen LastName. Eftersom du är ansluten till databasen med Always Encrypted aktiverat, tillhandahåller klientdrivrutinen i SSMS på ett transparent sätt CEK1 (som är kolumnkrypteringsnyckeln och skyddar kolumnen LastName) till enklaven, eftersom det behövs för att skapa indexet.
CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName]) INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]); GO
Kör en omfattande fråga i kolumnen LastName och kontrollera att SQL Server använder indexet när frågan körs.
I samma eller ett nytt frågefönster kontrollerar du att knappen Include Live Query Statistics i verktygsfältet är aktiverad.
Kör frågan nedan.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
Observera att frågan använder indexet på fliken Live Query Statistics.
Steg 3: Skapa ett index med rollavgränsning
I det här steget skapar du ett index för en krypterad kolumn som låtsas vara två olika användare. En användare är en DBA som behöver skapa ett index, men som inte har åtkomst till nycklarna. Den andra användaren är en dataägare som har åtkomst till nycklarna.
Använd SSMS-instansen utan att Always Encrypted är aktiverat och kör instruktionen nedan för att ta bort indexet i kolumnen LastName.
DROP INDEX IX_LastName ON [HR].[Employees]; GO
Fungerar som dataägare (eller ett program som har åtkomst till nycklarna) och fyller cachen i enklaven med CEK1.
Not
Om du inte har startat om SQL Server-instansen efter steg 2: Skapa och testa ett index utan rollavgränsningär det här steget redundant eftersom CEK1 redan finns i cacheminnet. Vi har lagt till den för att visa hur en dataägare kan tillhandahålla en nyckel till enklaven, om den inte redan finns i enklaven.
Kör nedanstående instruktioner i ett frågefönster i SSMS-instansen med Always Encrypted aktiverat. Uttalandet skickar alla kolumnkrypteringsnycklar som är aktiverade för enklaver till enklaven. Mer information finns i sp_enclave_send_keys.
EXEC sp_enclave_send_keys; GO
Som ett alternativ till att köra den lagrade proceduren ovan kan du köra en DML-fråga som använder enklaven mot kolumnen LastName. Detta fyller bara enklaven med CEK1.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
Utför rollen som DBA och skapa indexet.
Kör nedanstående instruktioner i ett frågefönster i SSMS-instansen utan Always Encrypted aktiverat.
CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName]) INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]); GO
Som dataägare kör du en omfattande fråga i kolumnen LastName och kontrollerar att SQL Server använder indexet när frågan körs.
I SSMS-instansen med Always Encrypted aktiverat väljer du ett befintligt frågefönster eller öppnar ett nytt frågefönster och kontrollerar att knappen Ta med livefrågestatistik i verktygsfältet är på.
Kör frågan nedan.
DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%'; SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix; GO
Observera att frågan använder indexet i Live Query Statistics.
Nästa steg
- Självstudie: Utveckla ett .NET-program med Always Encrypted med säkra enklaver
- Självstudie: Utveckla ett .NET Framework-program med Always Encrypted med säkra enklaver