Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2019 (15.x) och senare versioner i Windows
Azure SQL Database
Den här artikeln beskriver hur du skapar och använder index på kolumner som krypterats med enklaveraktiverade kolumnkrypteringsnycklar med Always Encrypted med säkra enklaver.
Always Encrypted med säkra enklaver stöder:
- Grupperade och icke-klustrade index på kolumner som krypterats med deterministisk datakryptering och enklavaktiverade nycklar.
- Sådana index sorteras baserat på chiffertext. Inga särskilda överväganden gäller för sådana index. Du kan hantera och använda dem på samma sätt som index på kolumner som krypterats med deterministisk kryptering och nycklar som inte är enklaveraktiverade (som med Always Encrypted).
- Icke-klustrade index på kolumner som krypterats med hjälp av randomiserad kryptering och enklavaktiverade nycklar.
- Nyckelvärdena i indexdatastrukturen (B-träd) krypteras och sorteras baserat på deras oformaterade värden. Mer information finns i Indexar för enklaveraktiverade kolumner.
Anmärkning
Resten av den här artikeln beskriver icke-grupperade index på kolumner som krypterats med hjälp av randomiserad kryptering och enklaveraktiverade nycklar.
Eftersom ett index i en kolumn med randomiserad kryptering och en enklavaktiverad kolumnkrypteringsnyckel innehåller krypterade data (chiffertext) sorterade baserat på klartext, måste SQL Server Engine använda enklaven för alla åtgärder som innebär att skapa, uppdatera eller söka i ett index, inklusive:
- Skapa eller återskapa ett index.
- Infoga, uppdatera eller ta bort en rad i en tabell (som innehåller en indexerad/krypterad kolumn), vilket utlöser infogning och/eller borttagning av en indexnyckel till/från indexet.
- Köra
DBCCkommandon som omfattar kontroll av indexens integritet, till exempel DBCC CHECKDB (Transact-SQL) eller DBCC CHECKTABLE (Transact-SQL). - Databasåterställning (till exempel när SQL Server misslyckas och startar om), om SQL Server behöver ångra eventuella ändringar i indexet (mer information nedan).
Alla ovanstående åtgärder kräver att enklaven har kolumnkrypteringsnyckeln för den indexerade kolumnen. Nyckeln behövs för att dekryptera indexnycklarna. I allmänhet kan enklaven hämta en kolumnkrypteringsnyckel på något av två sätt:
- Direkt från klientprogrammet.
- Från cachen för kolumnkrypteringsnycklar.
Anropa indexeringsåtgärder med kolumnkrypteringsnycklar som tillhandahålls direkt av klienten
För att den här metoden för att anropa indexeringsåtgärder ska fungera måste programmet (inklusive ett verktyg, till exempel SQL Server Management Studio (SSMS)) utfärda en fråga som utlöser en åtgärd i ett index:
- Anslut till databasen med både Always Encrypted- och enklaverberäkningar aktiverade för databasanslutningen.
- Programmet måste ha åtkomst till kolumnhuvudnyckeln som skyddar kolumnkrypteringsnyckeln för den indexerade kolumnen.
När SQL Server Engine parsar programfrågan och fastställer att den behöver uppdatera ett index i en krypterad kolumn för att köra frågan instrueras klientdrivrutinen att släppa den nödvändiga kolumnkrypteringsnyckeln till enklaven via en säker kanal. Det här är exakt samma mekanism som används för att ge enklaven kolumnkrypteringsnycklar för bearbetning av andra frågor som inte använder index. Till exempel kryptering på plats eller frågor med mönstermatchning och intervalljämförelser.
Den här metoden är användbar för att säkerställa att förekomsten av index på krypterade kolumner är transparent för program som redan är anslutna till databasen med Always Encrypted- och enklaverberäkningar aktiverade. Programanslutningen kan använda enklaven för frågebearbetning. När du har skapat ett index i en kolumn tillhandahåller drivrutinen i din app transparent kolumnkrypteringsnycklar till enklaven för indexeringsåtgärder. Att skapa index kan öka antalet frågor som kräver att programmet skickar kolumnkrypteringsnycklarna till enklaven.
Om du vill använda den här metoden följer du den allmänna vägledningen för att köra instruktioner med hjälp av en säker enklav i – Kör Transact-SQL-instruktioner med hjälp av säkra enklaver.
Stegvisa instruktioner om hur du använder den här metoden finns i Självstudie: Skapa och använda index för enklaveraktiverade kolumner med randomiserad kryptering.
Anropa indexeringsåtgärder med cachelagrade kolumnkrypteringsnycklar
När ett klientprogram skickar en kolumnkrypteringsnyckel till enklaven för bearbetning av frågor som kräver enklaverberäkningar cachelagrar enklaven kolumnkrypteringsnyckeln i en intern cache. Den här cachen finns i enklaven och är inte tillgänglig utifrån.
Om samma eller något annat klientprogram som används av samma eller en annan användare utlöser en åtgärd i ett index utan att ange den nödvändiga kolumnkrypteringen direkt, letar enklaven upp kolumnkrypteringsnyckeln i cacheminnet. Därför lyckas åtgärden i indexet, även om klientprogrammet inte har angett nyckeln.
För att den här metoden för att anropa indexeringsåtgärder ska fungera måste programmet ansluta till databasen utan Always Encrypted aktiverat för anslutningen och den obligatoriska kolumnkrypteringsnyckeln måste vara tillgänglig i cachen i enklaven.
Den här metoden för att anropa åtgärder stöds endast för frågor som inte kräver kolumnkrypteringsnycklar för andra åtgärder, inte relaterade till index. Ett program som till exempel infogar en rad med en INSERT instruktion i en tabell som innehåller en krypterad kolumn, krävs för att ansluta till databasen med Always Encrypted aktiverat i anslutningssträngen och måste ha åtkomst till nycklarna, oavsett om den krypterade kolumnen har ett index eller inte.
Den här metoden är användbar för att:
Se till att förekomsten av index på enklaveraktiverade kolumner med randomiserad kryptering är transparent för program och användare som inte har åtkomst till nycklarna och data i klartext.
Det säkerställer att skapandet av ett index på en krypterad kolumn inte bromsar befintliga frågor. Om ett program utfärdar en fråga i en tabell som innehåller krypterade kolumner utan att behöva ha åtkomst till nycklarna kan programmet fortsätta att köras utan att ha åtkomst till nycklarna när en DBA har skapat ett index. Tänk dig till exempel ett program som kör frågan nedan i tabellen Anställda som innehåller krypterade kolumner. DBA har inte skapat något index för någon krypterad kolumn.
DELETE FROM [dbo].[Employees] WHERE [EmployeeID] = 1; GOOm programmet skickar frågan via en anslutning utan always encrypted- och enklaverberäkningar aktiverade, kommer frågan att lyckas. Frågan utlöser inga beräkningar på krypterade kolumner. När en DBA skapar ett index för krypterade kolumner utlöser frågan borttagning av indexnycklar från index. Enklaven behöver kolumnkrypteringsnycklarna i den här situationen. Programmet kan dock fortsätta att köra den här frågan via samma anslutning, så länge en dataägare har angett kolumnkrypteringsnycklarna till enklaven.
För att uppnå rollavgränsning vid hantering av index, eftersom det gör det möjligt för DBA:er att skapa och ändra index på krypterade kolumner, utan att ha åtkomst till känsliga data.
Tips/Råd
sp_enclave_send_keys (Transact-SQL) kan du enkelt skicka alla enklaveraktiverade kolumnkrypteringsnycklar som används för index till enklaven och fylla i nyckelcachen.
Stegvisa instruktioner om hur du använder den här metoden finns i Självstudie: Skapa och använda index för enklaveraktiverade kolumner med randomiserad kryptering.