Dela via


Alltid krypterad

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

diagram över Always Encrypted.

Always Encrypted och Always Encrypted med säkra enklaver är funktioner som är utformade för att skydda känslig information, inklusive kreditkortsnummer och nationella eller regionala ID-nummer (till exempel amerikanska personnummer), i Azure SQL Database, Azure SQL Managed Instance och SQL Server-databaser. Det gör det möjligt för klienter att kryptera känsliga data i klientprogram, vilket säkerställer att krypteringsnycklar aldrig exponeras för databasmotorn. Detta ger en separation mellan dem som äger data och kan visa dem, och de som hanterar data men inte bör ha någon åtkomst: lokala databasadministratörer, molndatabasoperatörer eller andra högprivilegierade obehöriga användare. Därför tillåter Always Encrypted kunder att på ett säkert sätt lagra känsliga data i molnet, vilket minskar risken för datastöld av skadliga insiders.

Always Encrypted har vissa begränsningar, till exempel oförmåga att utföra åtgärder på krypterade data, inklusive sortering, filtrering (förutom punktsökningar med deterministisk kryptering) osv. Det innebär att vissa frågor och program kanske inte är kompatibla med Always Encrypted eller kräver betydande ändringar i programlogik.

För att åtgärda dessa begränsningar Always Encrypted med säkra enklaver gör det möjligt för databasmotorn att bearbeta krypterade data inom ett skyddat minnesområde som kallas en säker enklav. Säkra enklaver förbättrar funktionerna för konfidentiell databehandling i Always Encrypted genom att stödja mönstermatchning, olika jämförelseoperatorer och kryptering på plats.

Always Encrypted säkerställer att krypteringen är sömlös för program. På klientsidan krypterar Always Encrypted-aktiverad drivrutin känsliga data innan den skickas till databasmotorn och skriver automatiskt om frågor för att underhålla programsemantik. Den dekrypterar också automatiskt frågeresultat från krypterade databaskolumner.

Konfigurera Always Encrypted

Note

För program som behöver utföra mönstermatchning använder du jämförelseoperatorer, sortering och index på krypterade kolumner genom att implementera Always Encrypted med säkra enklaver.

Det här avsnittet innehåller en översikt över hur du konfigurerar Always Encrypted. För mer information och för att komma igång, se Självstudie: Så kommer du igång med Always Encrypted.

Följ dessa steg för att konfigurera Always Encrypted i databasen:

  1. Etablera kryptografiska nycklar för att skydda dina data. Always Encrypted använder två typer av nycklar:

    • Kolumnkrypteringsnycklar.
    • Kolumnhuvudnycklar.

    En kolumnkrypteringsnyckel används för att kryptera data i en krypterad kolumn. En kolumnhuvudnyckel är en nyckelskyddande nyckel som krypterar en eller flera kolumnkrypteringsnycklar.

    Du måste lagra kolumnhuvudnycklar i ett betrott nyckelarkiv utanför databassystemet, till exempel Azure Key Vault, Windows-certifikatarkiveteller en maskinvarusäkerhetsmodul. Därefter bör du etablera kolumnkrypteringsnycklar och kryptera var och en med en kolumnhuvudnyckel.

    Spara slutligen metadata om nycklarna i databasen. Kolumnhuvudnyckelmetadata innehåller platsen för kolumnhuvudnyckeln. Kolumnkrypteringsnyckelmetadata innehåller det krypterade värdet för kolumnkrypteringsnyckeln. Databasmotorn lagrar eller använder inga nycklar i klartext.

    Mer information om hur du hanterar Always Encrypted-nycklar finns i Översikt över nyckelhantering för Always Encrypted.

  2. Konfigurera kryptering för specifika databaskolumner som innehåller känslig information för att säkerställa skydd. Detta kan kräva att du skapar nya tabeller med krypterade kolumner eller krypterar befintliga kolumner och data. När du konfigurerar kryptering för en kolumn måste du ange information om krypteringsalgoritmen, kolumnkrypteringsnyckeln för att skydda data och typen av kryptering. Always Encrypted stöder två typer av kryptering:

    • Deterministisk kryptering alltid genererar samma krypterade värde för ett angivet klartextvärde. Med deterministisk kryptering kan punktsökningar, likhetskopplingar, gruppering och indexering på krypterade kolumner användas. Men det kan också göra det möjligt för obehöriga användare att gissa information om krypterade värden genom att undersöka mönster i den krypterade kolumnen, särskilt om det finns en liten uppsättning möjliga krypterade värden, till exempel True/False eller regionen North/South/East/West.

    • Randomiserad kryptering använder en metod som krypterar data oförutsägbart. Varje identisk klartext inmatning resulterar i en distinkt krypterad utmatning. Detta förbättrar säkerheten för randomiserad kryptering.

Om du vill utföra mönstermatchning med hjälp av jämförelseoperatorer, sortering och indexering på krypterade kolumner bör du använda Always Encrypted med säkra enklaver och tillämpa randomiserad kryptering. Always Encrypted (utan säkra enklaver) har inte stöd för sökning, gruppering, indexering eller sammanfogning i krypterade kolumner. För kolumner som är avsedda för sökning eller gruppering är det i stället viktigt att använda deterministisk kryptering. Detta möjliggör åtgärder som punktsökningar, likhetskopplingar, gruppering och indexering på krypterade kolumner.

Eftersom databassystemet avsiktligt inte har någon åtkomst till kryptografiska nycklar kräver all kolumnkryptering att data flyttas och krypteras utanför databasen. Det innebär att den här krypteringsprocessen kan ta lång tid och är sårbar för nätverksavbrott. Om du behöver kryptera om en kolumn senare, till exempel när du roterar krypteringsnyckeln eller ändrar krypteringstyper, får du dessutom samma problem igen. Att använda Always Encrypted med säkra enklaver eliminerar behovet av att flytta data från databasen. Eftersom enklaven är betrodd kan en klientdrivrutin i ditt program eller ett verktyg som Azure Data Studio eller SQL Server Management Studio (SSMS) på ett säkert sätt dela nycklarna med enklaven under kryptografiska åtgärder. Enklaven kan sedan kryptera eller omkryptera kolumner på plats, vilket avsevärt minskar den tid som krävs för dessa åtgärder.

Mer information om Always Encrypted kryptografiska algoritmer finns i Always Encrypted kryptografi.

Du kan utföra stegen ovan med hjälp av SQL-verktyg:

För att säkerställa att Always Encrypted-nycklar och skyddade känsliga data aldrig visas i klartext till databasmiljön kan databasmotorn inte vara involverad i nyckeletablering och datakryptering eller dekrypteringsåtgärder. Därför stöder Transact-SQL (T-SQL) inte nyckeletablering eller kryptografiska åtgärder. Av samma anledning måste kryptering av befintliga data eller omkryptering av dem (med en annan krypteringstyp eller en kolumnkrypteringsnyckel) utföras utanför databasen (SQL-verktyg kan automatisera det).

När du har ändrat definitionen för en krypterad kolumn kör du sp_refresh_parameter_encryption för att uppdatera Always Encrypted-metadata för objektet.

Begränsningar

Följande begränsningar gäller för frågor i krypterade kolumner:

  • Inga beräkningar på kolumner som krypterats med randomiserad kryptering tillåts. Deterministisk kryptering stöder följande åtgärder som omfattar likhetsjämförelser – inga andra åtgärder tillåts.

    Not

    För program som behöver utföra mönstermatchning använder du jämförelseoperatorer, sortering och index på krypterade kolumner genom att implementera Always Encrypted med säkra enklaver.

  • Frågeinstruktioner som utlöser beräkningar med både klartext och krypterade data tillåts inte. Till exempel:

    • Jämföra en krypterad kolumn med en oformaterad kolumn eller en literal.
    • Kopiera data från en kolumn i klartext till en krypterad kolumn (eller tvärtom) UPDATE, BULK INSERT, SELECT INTOeller INSERT.. VÄLJ.
    • Infoga literaler i krypterade kolumner.

    Sådana uttalanden resulterar i operandkonfliktfel som det här:

    Msg 206, Level 16, State 2, Line 89
        Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
    

    Program måste använda frågeparametrar för att ange värden för krypterade kolumner. När du till exempel infogar data i krypterade kolumner eller filtrerar dem med deterministisk kryptering ska frågeparametrar användas. Det stöds inte för att skicka literaler eller T-SQL-variabler som motsvarar krypterade kolumner. Mer information om en klientdrivrutin som du använder finns i Utveckla program med Always Encrypted-.

    I Azure Data Studio eller SSMSär det viktigt att använda parameterisering för Always Encrypted-variabler för att köra frågor som hanterar värden som är associerade med krypterade kolumner. Detta inkluderar scenarier som att infoga data i krypterade kolumner eller tillämpa filter på dem (i de fall där deterministisk kryptering används).

  • Tabellvärdesparametrar som riktar sig mot krypterade kolumner stöds inte.

  • Frågor som använder följande satser stöds inte:

  • Always Encrypted stöds inte för kolumnerna med nedanstående egenskaper:

    • Kolumner som använder någon av följande datatyper: xml, tidsstämpel, rowversion, bild, ntext, text, sql_variant, hierarchyid, geography, geometri, alias, användardefinierade typer.
    • FILESTREAM kolumner
    • Kolonner med egenskapen IDENTITY.
    • Kolumner med egenskapen ROWGUIDCOL.
    • Strängkolumner (varchar, charosv.) med andra sorteringsföljder än binärkodspunkt (_BIN2).
    • Kolumner som är nycklar för klustrade och icke-grupperade index när du använder randomiserad kryptering (index på kolumner som använder deterministisk kryptering stöds).
    • Kolumner som ingår i fulltextindex (Always Encrypted stöder inte Full-Text Search).
    • Ange beräknade kolumner i en tabell.
    • Kolumner som de beräknade kolumnerna refererar till (när uttrycket utför åtgärder som inte stöds för Always Encrypted).
    • Använd glesa kolumner.
    • Kolumner som refereras av statistik när du använder randomiserad kryptering (deterministisk kryptering stöds).
    • partitionskolumner.
    • Kolumner med standardbegränsningar.
    • Kolumner som refereras av unika begränsningar när du använder randomiserad kryptering (deterministisk kryptering stöds).
    • Primära nyckelkolumner när du använder randomiserad kryptering (deterministisk kryptering stöds).
    • Refererande kolumner i främmande nyckelbegränsningar när du använder randomiserad kryptering eller när du använder deterministisk kryptering, om de refererade och refererande kolumnerna använder olika nycklar eller algoritmer.
    • Kolumner som refereras av begränsningskontrollerna och.
    • Kolumner som samlas in/spåras med hjälp av ändra datainsamling.
    • Primära nyckelkolumner i tabeller som har ändringsspårning.
    • Kolumner som är maskerade (med Dynamisk datamaskning).
    • Kolumner som används i nativt kompilerade lagrade procedurer.
    • Kolumner i stretch-databastabeller. (Tabeller med kolumner krypterade med Always Encrypted kan aktiveras för Stretch.)

    Viktig

    Stretch Database är inaktuell i SQL Server 2022 (16.x) och Azure SQL Database. Den här funktionen tas bort i en framtida version av databasmotorn. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen.

    • Kolumner i externa (PolyBase) tabeller (Observera att användande av externa tabeller och tabeller med krypterade kolumner i samma fråga stöds).
  • Följande funktioner fungerar inte på krypterade kolumner:

Always Encrypted Transact-SQL referens

Always Encrypted använder följande Transact-SQL-instruktioner, systemkatalogvyer, system lagrade procedurer och behörigheter.

Uttalanden

DDL-instruktion Beskrivning
SKAPA KOLUMNMÄSTERNYCKEL Skapar ett kolumnhuvudnyckelmetadataobjekt i en databas
TA BORT KOLUMN MASTERNYCKEL Släpper en kolumnhuvudnyckel från en databas.
SKAPA KOLUMNKRYPTERINGSNYCKEL Skapar ett metadataobjekt för kolumnkrypteringsnyckeln.
ÄNDRA KOLUMNKRYPTERINGSNYCKEL Ändrar en kolumnkrypteringsnyckel i en databas, lägger till eller släpper ett krypterat värde.
TA BORT KOLUMNKRYPTERINGSNYCKEL Släpper en kolumnkrypteringsnyckel från en databas.
SKAPA TABELL (KRYPTERAD MED) Specificerar kryptering av kolumner

Systemkatalogvyer och lagrade procedurer

Systemkatalogvyer och lagrade procedurer Beskrivning
sys.column_encryption_keys Returnerar information om kolumnkrypteringsnycklar (CEK:er)
sys.column_encryption_key_values Returnerar information om krypterade värden för kolumnkrypteringsnycklar (CEK:er)
sys.column_master_keys Returnerar en rad för varje databashuvudnyckel
sp_refresh_parameter_encryption Uppdaterar Always Encrypted-metadata för parametrarna för den angivna icke-schemabundna lagrade proceduren, användardefinierad funktion, vy, DML-utlösare, DDL-utlösare på databasnivå eller DDL-utlösare på servernivå
sp_describe_parameter_encryption Analyserar den angivna Transact-SQL-instruktionen och dess parametrar för att avgöra vilka parametrar som motsvarar databaskolumner som skyddas med hjälp av funktionen Always Encrypted.

Se även sys.columns för information om krypteringsmetadata som lagras för varje kolumn.

Databasbehörigheter

Det finns fyra databasbehörigheter för Always Encrypted.

Systemkatalogvyer och lagrade procedurer Beskrivning
ÄNDRA VALFRI KOLUMNHUVUDNYCKEL Krävs för att skapa och ta bort kolumnhuvudnyckelmetadata.
ÄNDRA NÅGON KOLUMNKRYPTERINGSNYCKEL Krävs för att skapa och ta bort kolumnkrypteringsnyckelmetadata.
VISA VILKEN SOM HELST HUVUDNYCKEL FÖR KOLUMN DEFINITION Krävs för att komma åt och läsa kolumnhuvudnyckelmetadata, vilket krävs för att köra frågor mot krypterade kolumner.
VISA VILKEN SOM HELST AV KOLUMNKRYPTERINGSNYCKELDEFINITION Krävs för att komma åt och läsa kolumnkrypteringsnyckelmetadata, vilket krävs för att köra frågor mot krypterade kolumner.

I följande tabell sammanfattas de behörigheter som krävs för vanliga åtgärder.

Scenario ÄNDRA VALFRI KOLUMNHUVUDNYCKEL ÄNDRA VILKEN KOLUMNKRYPTERINGSNYCKEL SOM HELST VISA VILKEN SOM HELST MÄSTERNYCKEL FÖR KOLUMNDEFINITION VISA ALLA DEFINITIONER AV KOLUMNKRYPTERINGSNYCKLAR
Nyckelhantering (skapa/ändra/granska viktiga metadata i databasen) X X X X
Fråga krypterade kolumner X X

Viktiga överväganden

  • VISA VALFRI KOLUMN HUVUDNYCKELDEFINITION och VISA VALFRI KOLUMNKRYPTERINGSNYCKELDEFINITION behörigheter krävs när du väljer krypterade kolumner, även om användaren inte har behörighet till kolumnhuvudnycklarna (i sina nyckellager), vilket skyddar kolumnerna och förhindrar åtkomst till klartext.

  • I SQL Server beviljas både behörigheten VISA ALLA MASTERNYCKELDEFINITIONER FÖR KOLUMNER och behörigheten VISA ALLA DEFINITIONER AV KOLUMNENKRYPTERINGSNYCKEL som standard till den offentliga fasta databasrollen. En databasadministratör kan välja att återkalla (eller neka) behörigheterna till offentliga roll och ge dem till specifika roller eller användare för att implementera mer begränsad kontroll.

  • I SQL-databas beviljas inte behörigheterna VISA ALLA KOLUMNHUVUDNYCKELDEFINITIONer och VISA ALLA DEFINITIONER AV KOLUMNKRYPTERINGSNYCKEL som standard till den offentliga fasta databasrollen. Detta gör att vissa befintliga äldre verktyg (med äldre versioner av DacFx) kan fungera korrekt. Om du vill arbeta med krypterade kolumner (även om man inte dekrypterar dem) måste en databasadministratör uttryckligen bevilja VISA VALFRI KOLUMN HUVUDNYCKELDEFINITION och VISA VALFRI KOLUMNKRYPTERINGSNYCKELDEFINITIONer behörigheter.

Nästa steg