Anbefal, hvornår du skal bruge Azure SQL Database Always Encrypted

Fuldført

Always Encrypted er en funktion, der er udviklet til at beskytte følsomme data, f.eks. kreditkortnumre eller nationale/regionale id-numre (f.eks. amerikanske cpr-numre), der er gemt i Azure SQL Database, Azure SQL Managed Instance og SQL Server-databaser. Always Encrypted gør det muligt for klienter at kryptere følsomme data i klientprogrammer og aldrig afsløre krypteringsnøglerne til databaseprogrammet. Dette giver en adskillelse mellem dem, der ejer dataene og kan se dem, og dem, der administrerer dataene, men som ikke bør have adgang – databaseadministratorer i det lokale miljø, clouddatabaseoperatorer eller andre uautoriserede brugere med høj privilegeret adgang. Derfor giver Always Encrypted kunderne mulighed for med sikkerhed at gemme deres følsomme data i cloudmiljøet og reducere sandsynligheden for datatyveri fra ondsindede insidere.

Always Encrypted kan konfigureres til at understøtte begrænsede fortrolige forespørgsler på krypterede data, de forespørgsler, der involverer sammenligninger af lighed. Det kan f.eks. være opslagssøgninger eller lighedsjoinforbindelser. Sådanne forespørgsler udnytter deterministisk kryptering.

diagram, der viser et eksempel på en altid krypteret database.

Seddel

Sikre enklaver udvider funktionerne til fortrolig databehandling i Always Encrypted med matchning af mønstre, andre sammenligningsoperatorer og lokal kryptering.

Always Encrypted gør kryptering gennemsigtig for programmer. En Always Encrypted-aktiveret driver, der er installeret på klientcomputeren, opnår dette ved automatisk at kryptere og dekryptere følsomme data i klientprogrammet. Driveren krypterer dataene i følsomme kolonner, før dataene overføres til databaseprogrammet, og omskriver automatisk forespørgsler, så semantikken til programmet bevares. På samme måde dekrypterer driveren gennemsigtigt data, der er gemt i krypterede databasekolonner, i forespørgselsresultater.

Konfigurer Always Encrypted

Hvis du vil konfigurere Always Encrypted i databasen, skal du:

  1. Klargør kryptografiske nøgler for at beskytte dine data. Always Encrypted bruger to typer nøgler:

    • Kolonnekrypteringsnøgler.
    • Kolonnemasternøgler.

    En kolonnekrypteringsnøgle bruges til at kryptere data i en krypteret kolonne. En kolonnemasternøgle er en nøglebeskyttende nøgle, der krypterer en eller flere kolonnekrypteringsnøgler.

    Du skal gemme kolonnemasternøgler i et nøglelager, der er tillid til, uden for databasesystemet, f.eks. Azure Key Vault, Windows-certifikatlager eller et hardwaresikkerhedsmodul.

    Derefter skal du klargøre kolonnekrypteringsnøgler og kryptere dem alle med en kolonnemasternøgle.

    Endelig skal du gemme metadataene om nøglerne i databasen.

    • Metadataene for kolonnemasternøglen registrerer placeringen af kolonnemasternøglen.
    • Metadataene for kolonnekrypteringsnøglen indeholder den krypterede værdi for kolonnekrypteringsnøglen. Databaseprogrammet gemmer eller bruger aldrig nøgler af nogen af typerne i almindelig tekst.
  2. Konfigurer kryptering for valgte databasekolonner, der indeholder følsomme data, der skal beskyttes. Dette kan omfatte oprettelse af nye tabeller med krypterede kolonner eller kryptering af eksisterende databasekolonner og eksisterende data. Når du konfigurerer kryptering for en kolonne, angiver du oplysninger om en krypteringsalgoritme, en kolonnekrypteringsnøgle for at beskytte dataene i kolonnen og en krypteringstype. Always Encrypted understøtter to krypteringstyper:

    • Deterministisk kryptering genererer altid den samme krypterede værdi for en given plaintext-værdi. Brug af deterministisk kryptering giver mulighed for punktopslag, lighedsjoinforbindelser, gruppering og indeksering på krypterede kolonner. Det kan dog også give uautoriserede brugere mulighed for at gætte oplysninger om krypterede værdier ved at undersøge mønstre i den krypterede kolonne, især hvis der er et lille sæt af mulige krypterede værdier, f.eks. Sand/Falsk, eller nord/syd/øst/vest-område.
    • Randomiseret kryptering bruger en metode, der krypterer data på en mindre forudsigelig måde. Randomiseret kryptering er mere sikker, men forhindrer søgning, gruppering, indeksering og sammenføjning på krypterede kolonner.

    Brug deterministisk kryptering for kolonner, der skal bruges som søge- eller grupperingsparametre. F.eks. et stats-id-nummer. Brug randomiseret kryptering til data, f.eks. fortrolige undersøgelseskommentarer, som ikke er grupperet med andre poster og ikke bruges til at joinforbinde tabeller.

    Du kan finde flere oplysninger om Always Encrypted-kryptografiske algoritmer under Always Encrypted-kryptografi.

    Du kan udføre ovenstående trin ved hjælp af SQL-værktøjer:

    For at sikre, at Always Encrypted-nøgler og beskyttede følsomme data aldrig afsløres i almindelig tekst i databasemiljøet, kan databaseprogrammet ikke være involveret i nøgleklargøring og datakryptering eller dekrypteringshandlinger. Derfor understøtter Transact-SQL (T-SQL) ikke nøgleklargøring eller kryptografiske handlinger. Af samme årsag skal kryptering af eksisterende data eller genkryptering af dem (med en anden krypteringstype eller en kolonnekrypteringsnøgle) udføres uden for databasen (DET kan SQL-værktøjer automatisere).

    Seddel

    Always Encrypted med sikre enklaver fjerner nogle af ovenstående begrænsninger ved at tillade kryptografiske handlinger på eksisterende data ved hjælp af T-SQL og fjerner behovet for at flytte dataene uden for databasen.

Sådan fungerer forespørgsler mod krypterede kolonner

Hvis du vil køre en forespørgsel på krypterede databasekolonner, skal du indsætte data i krypterede kolonner, hente plaintext-værdier fra krypterede kolonner eller udføre understøttede handlinger (f.eks. punktopslagssøgninger) på kolonner ved hjælp af deterministisk kryptering, en bruger eller et program, der udsteder forespørgslen, skal opfylde følgende forudsætninger:

  • Du skal have adgang til kolonnemasternøglen for at beskytte dataene. Nøgleadgang er påkrævet ud over tilladelser på databaseniveau, f.eks. SELECT i den tabel, der indeholder dataene.
  • Opret forbindelse til databasen med Always Encrypted aktiveret i databaseforbindelsen. De fleste SQL-værktøjer og SQL-klientdrivere understøtter aktivering af Always Encrypted for databaseforbindelser.

Seddel

Hvis brugeren har påkrævede databasetilladelser til at læse dataene, men ikke har adgang til de nøgler, der beskytter dem, kan brugeren stadig hente cyphertext -data (krypteret) ved at oprette forbindelse til databasen uden at aktivere Always Encrypted i databaseforbindelsen.

Sådan fungerer forespørgsler på krypterede kolonner:

  1. Når et program udsteder en parameteriseret forespørgsel, kontakter SQL-klientdriveren i programmet gennemsigtigt databaseprogrammet (ved at kalde sp_describe_parameter_encryption (Transact-SQL) for at bestemme, hvilke parametre der er målrettet til krypterede kolonner og skal krypteres. For hver parameter, der skal krypteres, modtager driveren krypteringsalgoritmen, krypteringstypen og nøglemetadata, herunder den krypterede kolonnekrypteringsnøgle og placeringen af den tilsvarende kolonnemasternøgle.

  2. Driveren kalder nøglelageret, der indeholder kolonnemasternøgler, for at dekryptere de krypterede kolonnekrypteringsnøgleværdier. De resulterende plaintext-kolonnekrypteringsnøgler cachelagres for at reducere antallet af rundture til nøglelageret ved efterfølgende brug af de samme kolonnekrypteringsnøgler.

  3. Driveren bruger de registrerede krypteringsnøgler til almindelig tekst-kolonne til at kryptere de forespørgselsparametre, der svarer til krypterede kolonner.

  4. Driveren erstatter plaintext-værdierne for de parametre, der er målrettet til krypterede kolonner, med deres krypterede værdier, og den sender forespørgslen til databaseprogrammet til behandling.

  5. Databaseprogrammet udfører forespørgslen, hvilket kan omfatte lighedssammenligninger af kolonner ved hjælp af deterministisk kryptering.

  6. Hvis forespørgselsresultater omfatter data fra krypterede kolonner, vedhæfter databaseprogrammet krypteringsmetadata for hver kolonne, herunder oplysninger om krypteringsalgoritmen, krypteringstypen og nøglemetadata til resultatsættet.

  7. Databaseprogrammet sender resultatsættet til klientprogrammet.

  8. For hver krypteret kolonne i det modtagne resultatsæt forsøger driveren først at finde krypteringsnøglen for plaintext-kolonnen i den lokale cache og foretager kun en rundtur til et nøglelager, der holder kolonnemasternøglen, hvis den ikke kan finde nøglen i cachen.

  9. Driveren dekrypterer resultaterne og returnerer plaintext-værdier til programmet.

En klientdriver interagerer med et nøglelager, der indeholder en kolonnemasternøgle, ved hjælp af en udbyder af kolonnemasternøglelager, som er en softwarekomponent på klientsiden, der indkapsler et nøglelager, der indeholder kolonnemasternøglen. Udbydere af almindelige typer af nøglelagre er tilgængelige i klientdriverbiblioteker fra Microsoft eller som separate downloads. Du kan også implementere din egen udbyder. Always Encrypted-funktioner, herunder indbyggede udbydere af kolonnemasternøglelager, varierer efter et driverbibliotek og dets version.

Se Udvikl programmer ved hjælp af Always Encrypted for at se listen over klientdrivere, der understøtter Always Encrypted, og for at få oplysninger om, hvordan du udvikler programmer, der forespørger krypterede kolonner.

Du kan også forespørge om krypterede kolonner ved hjælp af SQL-værktøjer, f.eks. Azure Data Studio- eller SSMS-.

Begrænsninger

Følgende begrænsninger gælder for forespørgsler på krypterede kolonner:

  • Deterministisk kryptering understøtter følgende handlinger, der involverer lighedssammenligninger – ingen andre handlinger er tilladt.
  • Det er ikke tilladt at foretage beregninger på kolonner, der er krypteret ved hjælp af randomiseret kryptering.

Seddel

Always Encrypted med sikre enklaver fjerner ovenstående begrænsning ved at tillade mønstermatchning, sammenligningsoperatorer, sortering og indeksering af kolonner ved hjælp af randomiseret kryptering.

  • Forespørgselssætninger, der udløser beregninger, der involverer både almindelig tekst og krypterede data, er ikke tilladt. For eksempel:
    • Sammenligning af en krypteret kolonne med en almindelig tekst-kolonne eller en konstant.
    • Kopierer data fra en almindelig tekst-kolonne til en krypteret kolonne (eller omvendt) UPDATE, BULK INSERT, SELECT INTOeller INSERT.. VÆLG.
    • Indsætter konstanter til krypterede kolonner.

Sådanne sætninger resulterer i fejl i operand-sammenstød som denne:

Output
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
  • Programmer skal bruge forespørgselsparametre til at overføre værdier, der svarer til krypterede kolonner. Når du f.eks. indsætter data til krypterede kolonner eller filtrerer efter krypterede kolonner (når du bruger deterministisk kryptering). Overførsel af konstanter eller T-SQL-variabler, der svarer til krypterede kolonner, understøttes ikke. Du kan få flere oplysninger, der er specifikke for en klientdriver, du bruger, under Udvikl programmer ved hjælp af Always Encrypted.

  • Du skal bruge Parameterization for Always Encrypted-variabler i Azure Data Studio- eller SSMS- til at udstede forespørgsler, der sender værdier, der svarer til krypterede kolonner i disse værktøjer. Når du f.eks. indsætter data til krypterede kolonner eller filtrerer efter krypterede kolonner (når du bruger deterministisk kryptering).

  • Parametre med tabelværdi, der er målrettet til krypterede kolonner, understøttes ikke.

  • Forespørgsler, der bruger følgende delsætninger, understøttes ikke:

  • Når du har ændret definitionen af en krypteret kolonne, skal du udføre sp_refresh_parameter_encryption for at opdatere Objektets Always Encrypted-metadata.

  • Always Encrypted understøttes ikke for kolonner med nedenstående egenskaber:

    • Kolonner, der bruger en af følgende datatyper: xml, tidsstempel, rækkeversion, billede, ntext, tekst, sql_variant, hierarki-id, geografi, geometri, alias, brugerdefinerede typer.
    • FILESTREAM- kolonner
    • Kolonner med egenskaben IDENTITY.
    • Kolonner med egenskaben ROWGUIDCOL.
    • Strengkolonner (varchar, char osv.) med andre sorteringer end binære kodepunkt (_BIN2) sorteringer, når der bruges deterministisk kryptering.
    • Kolonner, der er nøgler til grupperede og ikke-grupperede indeks, når der bruges randomiseret kryptering (indekser på kolonner, der bruger deterministisk kryptering, understøttes).
    • Kolonner, der er inkluderet i fuldtekstindeks (Always Encrypted understøtter ikke fuldtekstsøgning).
    • beregnede kolonner.
    • Kolonner, der refereres til af beregnede kolonner (når udtrykket udfører ikke-understøttede handlinger for Always Encrypted).
    • Sparse-kolonnesæt.
    • Kolonner, der refereres til af statistik,, når der bruges randomiseret kryptering (deterministisk kryptering understøttes).
    • Partitionering af kolonner.
    • Kolonner med standardbegrænsninger.
    • Kolonner, der refereres til af entydige begrænsninger,, når der bruges randomiseret kryptering (deterministisk kryptering understøttes).
    • Kolonner med primær nøgle, når der bruges randomiseret kryptering (deterministisk kryptering understøttes).
    • Referencekolonner i begrænsninger for fremmede nøgler, når der bruges randomiseret kryptering, eller når der bruges deterministisk kryptering, hvis de kolonner, der refereres til, og refererende kolonner bruger forskellige nøgler eller algoritmer.
    • Kolonner, der refereres til af kontrollere begrænsninger.
    • Kolonner, der registreres/spores ved hjælp af ændre datahentning.
    • Primære nøglekolonner i tabeller, der har ændringssporing.
    • Kolonner, der er maskeret (ved hjælp af dynamisk datamaskering).
    • Kolonner i strække databasetabeller. (Tabeller med kolonner, der er krypteret med Always Encrypted, kan aktiveres for Stræk).
  • Vigtig

    Stretch Database frarådes i SQL Server 2022 (16.x) og Azure SQL Database. Denne funktion fjernes i en fremtidig version af databaseprogrammet. Undgå at bruge denne funktion i nyt udviklingsarbejde, og planlæg at ændre programmer, der i øjeblikket bruger denne funktion.

  • Følgende funktioner fungerer ikke på krypterede kolonner:

Always Encrypted Transact-SQL reference

Always Encrypted bruger følgende Transact-SQL sætninger, systemkatalogvisninger, systemlagrede procedurer og tilladelser.

Udsagn

Systemkatalogvisninger og lagrede procedurer

Se også sys.columns (Transact-SQL) for at få oplysninger om krypteringsmetadata, der er gemt for hver kolonne.

Databasetilladelser

Der er fire databasetilladelser til Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY – kræves for at oprette og slette metadata for kolonnemasternøglen.
  • ALTER ANY COLUMN ENCRYPTION KEY – kræves for at oprette og slette metadata for kolonnekrypteringsnøgle.
  • VIEW ANY COLUMN MASTER KEY DEFINITION – kræves for at få adgang til og læse metadata for kolonnemasternøglen, som skal bruges til at forespørge krypterede kolonner.
  • VIEW ANY COLUMN ENCRYPTION KEY DEFINITION – kræves for at få adgang til og læse metadata for kolonnemasternøglen, som skal bruges til at forespørge krypterede kolonner.

I følgende tabel opsummeres de tilladelser, der kræves til almindelige handlinger.

scenarie ÆNDRE EN KOLONNEMASTERNØGLE ÆNDRE EN KOLONNEKRYPTERINGSNØGLE FÅ VIST EN KOLONNES MASTERNØGLEDEFINITION FÅ VIST DEFINITIONEN AF EN KOLONNEKRYPTERINGSNØGLE
Nøgleadministration (oprettelse/ændring/gennemsyn af nøglemetadata i databasen) X X X X
Forespørger krypterede kolonner X X

Vigtige overvejelser

  • DER KRÆVES VISNING AF EN KOLONNEMASTERNØGLEDEFINITION og VIS ALLE KOLONNEKRYPTERINGSNØGLEDEFINITIONstilladelser, når der vælges krypterede kolonner, også selvom brugeren ikke har tilladelse til kolonnemasternøglerne (i deres nøglelagre), beskytter kolonnerne og ikke får adgang til almindelige tekstforsøg.
  • I SQL Server tildeles tilladelserne VIEW ANY COLUMN MASTER KEY DEFINITION og VIEW ANY COLUMN ENCRYPTION KEY DEFINITION som standard til rollen offentlig fast database. En databaseadministrator kan vælge at tilbagekalde (eller afvise) tilladelserne til den offentlige rolle og tildele dem til bestemte roller eller brugere til at implementere mere begrænset kontrol.
  • I SQL Database tildeles tilladelserne VIEW ANY COLUMN MASTER KEY DEFINITION og VIEW ANY COLUMN ENCRYPTION KEY DEFINITION ikke som standard til rollen offentlig fast database. Dette gør det muligt for visse eksisterende ældre værktøjer (ved hjælp af ældre versioner af DacFx) at fungere korrekt. Hvis du vil arbejde med krypterede kolonner (også selvom de ikke dekrypterer dem), skal en databaseadministrator eksplicit tildele tilladelserne VIEW ANY COLUMN MASTER KEY DEFINITION og VIEW ANY COLUMN ENCRYPTION KEY DEFINITION.