Delen via


Altijd Versleuteld

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

diagram van Always Encrypted.

Always Encrypted en Always Encrypted met beveiligde enclaves zijn functies die zijn ontworpen om gevoelige informatie te beschermen, waaronder creditcardnummers en nationale of regionale identificatienummers (zoals amerikaanse burgerservicenummers), in Azure SQL Database, Azure SQL Managed Instance en SQL Server-databases. Hiermee kunnen clients gevoelige gegevens in clienttoepassingen versleutelen, zodat versleutelingssleutels nooit worden blootgesteld aan de database-engine. Dit biedt een scheiding tussen degenen die eigenaar zijn van de gegevens en kunnen deze bekijken, en degenen die de gegevens beheren, maar geen toegang hebben: on-premises databasebeheerders, clouddatabaseoperators of andere onbevoegde gebruikers met hoge bevoegdheden. Hierdoor kunnen klanten met Always Encrypted veilig hun gevoelige gegevens opslaan in de cloud, waardoor het risico op gegevensdiefstal door kwaadwillende insiders wordt verminderd.

Always Encrypted heeft bepaalde beperkingen, zoals het niet kunnen uitvoeren van bewerkingen op versleutelde gegevens, waaronder sorteren, filteren (met uitzondering van puntzoekacties met behulp van deterministische versleuteling), enzovoort. Dit betekent dat sommige query's en toepassingen mogelijk niet compatibel zijn met Always Encrypted of dat er aanzienlijke wijzigingen in de toepassingslogica nodig zijn.

Om deze beperkingen te verhelpen, Always Encrypted met beveiligde enclaves stelt de database-engine in staat versleutelde gegevens te verwerken binnen een beveiligd geheugengebied dat een beveiligde enclave wordt genoemd. Beveiligde enclaves verbeteren de mogelijkheden van Confidential Computing van Always Encrypted door ondersteuning te bieden voor patroonkoppeling, verschillende vergelijkingsoperators en in-place versleuteling.

Always Encrypted zorgt ervoor dat versleuteling naadloos is voor toepassingen. Aan de clientzijde versleutelt always encrypted-stuurprogramma gevoelige gegevens voordat deze naar de database-engine worden verzonden en worden query's automatisch herschreven om de semantiek van toepassingen te behouden. Ook worden queryresultaten van versleutelde databasekolommen automatisch ontsleuteld.

Always Encrypted configureren

Notitie

Voor toepassingen die patroonkoppelingen moeten uitvoeren, vergelijkingsoperators gebruiken, sorteren en indexeren op versleutelde kolommen, moet u Always Encrypted implementeren met beveiligde enclaves.

In deze sectie vindt u een overzicht van het instellen van Always Encrypted. Zie Zelfstudie: Aan de slag met Always Encryptedvoor meer informatie en om aan de slag te gaan.

Volg deze stappen om Always Encrypted in uw database te configureren:

  1. Cryptografische sleutels inrichten om uw gegevenste beveiligen. Always Encrypted maakt gebruik van twee typen sleutels:

    • Kolomversleutelingssleutels.
    • Kolomhoofdsleutels.

    Een kolomversleutelingssleutel wordt gebruikt om de gegevens in een versleutelde kolom te versleutelen. Een kolomhoofdsleutel is een sleutelbeveiligingssleutel waarmee een of meer kolomversleutelingssleutels worden versleuteld.

    U moet kolomhoofdsleutels opslaan in een vertrouwd sleutelarchief buiten het databasesysteem, zoals Azure Key Vault-, Windows-certificaatarchiefof een hardwarebeveiligingsmodule. Hierna moet u kolomversleutelingssleutels inrichten en elk versleutelen met een kolomhoofdsleutel.

    Sla ten slotte de metagegevens over de sleutels in uw database op. De metagegevens van de kolomhoofdsleutel bevatten de locatie van de kolomhoofdsleutel. De metagegevens van de kolomversleutelingssleutel bevatten de versleutelde waarde van de kolomversleutelingssleutel. De database-engine slaat geen sleutels op of gebruikt deze niet in tekst zonder opmaak.

    Zie Overzicht van sleutelbeheer voor Always Encrypted-voor meer informatie over het beheren van Always Encrypted-sleutels.

  2. versleuteling instellen voor specifieke databasekolommen die gevoelige informatie bevatten om beveiliging te garanderen. Hiervoor moet u mogelijk nieuwe tabellen maken met versleutelde kolommen of de bestaande kolommen en gegevens versleutelen. Bij het configureren van versleuteling voor een kolom moet u details opgeven over het versleutelingsalgoritmen, de kolomversleutelingssleutel om de gegevens te beveiligen en het type versleuteling. Always Encrypted ondersteunt twee typen versleuteling:

    • deterministische versleuteling altijd dezelfde versleutelde waarde genereert voor een bepaalde niet-versleutelde waarde. Door gebruik te maken van deterministische versleuteling kunnen puntzoekacties, gelijkheidsdeelnames, groepering en indexering op versleutelde kolommen worden gebruikt. Het kan echter ook toestaan dat onbevoegde gebruikers informatie over versleutelde waarden raden door patronen in de versleutelde kolom te onderzoeken, met name als er een kleine set mogelijke versleutelde waarden is, zoals Waar/Onwaar of Regio Noord/Zuid/Oost/West.

    • Willekeurige versleuteling maakt gebruik van een methode waarmee gegevens onvoorspelbaar worden versleuteld. Elke identieke tekstinvoer resulteert in een afzonderlijke versleutelde uitvoer. Dit verbetert de beveiliging van gerandomiseerde versleuteling.

Als u patroonkoppelingen wilt uitvoeren met vergelijkingsoperators, sorteren en indexeren op versleutelde kolommen, moet u Always Encrypted gebruiken met beveiligde enclaves en willekeurige versleuteling toepassen. Always Encrypted (zonder beveiligde enclaves) willekeurige versleuteling biedt geen ondersteuning voor zoeken, groeperen, indexeren of samenvoegen op versleutelde kolommen. In plaats daarvan is het essentieel om voor kolommen die zijn bedoeld voor zoek- of groeperingsdoeleinden, deterministische versleuteling te gebruiken. Hierdoor kunnen bewerkingen zoals puntzoekacties, gelijkheidsdeelnames, groepering en indexering op versleutelde kolommen worden uitgevoerd.

Omdat het databasesysteem standaard geen toegang heeft tot cryptografische sleutels, moet elke kolomversleuteling gegevens buiten de database verplaatsen en versleutelen. Dit betekent dat dit versleutelingsproces lang kan duren en kwetsbaar is voor netwerkonderbrekingen. Als u later een kolom opnieuw moet versleutelen, bijvoorbeeld wanneer u de versleutelingssleutel roteert of versleutelingstypen wijzigt, ondervindt u dezelfde problemen. Het gebruik van Always Encrypted met beveiligde enclaves elimineert de noodzaak om gegevens uit de database te verplaatsen. Omdat de enclave wordt vertrouwd, kan een clientstuurprogramma in uw toepassing of een hulpprogramma zoals Azure Data Studio of SQL Server Management Studio (SSMS) de sleutels veilig delen met de enclave tijdens cryptografische bewerkingen. De enclave kan vervolgens kolommen versleutelen of opnieuw versleutelen, waardoor de benodigde tijd voor deze acties aanzienlijk wordt verminderd.

Zie Always Encrypted-cryptografievoor meer informatie over cryptografische algoritmen met Always Encrypted.

U kunt de bovenstaande stappen uitvoeren met SQL-hulpprogramma's:

Om ervoor te zorgen dat Always Encrypted-sleutels en beveiligde gevoelige gegevens nooit in tekst zonder opmaak worden weergegeven in de databaseomgeving, kan de database-engine niet worden betrokken bij het inrichten van sleutels en gegevensversleuteling of ontsleutelingsbewerkingen. Daarom biedt Transact-SQL (T-SQL) geen ondersteuning voor sleutelinrichting of cryptografische bewerkingen. Om dezelfde reden moet het versleutelen van bestaande gegevens of het opnieuw versleutelen ervan (met een ander versleutelingstype of een kolomversleutelingssleutel) buiten de database worden uitgevoerd (SQL-hulpprogramma's kunnen dat automatiseren).

Nadat u de definitie van een versleutelde kolom hebt gewijzigd, voert u sp_refresh_parameter_encryption uit om de metagegevens van Always Encrypted voor het object bij te werken.

Beperkingen

De volgende beperkingen gelden voor query's voor versleutelde kolommen:

  • Er zijn geen berekeningen toegestaan voor kolommen die zijn versleuteld met behulp van gerandomiseerde versleuteling. Deterministische versleuteling ondersteunt de volgende bewerkingen met betrekking tot gelijkheidsvergelijkingen. Er zijn geen andere bewerkingen toegestaan.

    Notitie

    Voor toepassingen die patroonkoppelingen moeten uitvoeren, vergelijkingsoperators gebruiken, sorteren en indexeren op versleutelde kolommen, moet u Always Encrypted implementeren met beveiligde enclaves.

  • Query-instructies die berekeningen activeren waarbij zowel tekst zonder opmaak als versleutelde gegevens worden gebruikt, zijn niet toegestaan. Bijvoorbeeld:

    • Een versleutelde kolom vergelijken met een kolom zonder opmaak of een letterlijke tekst.
    • Gegevens kopiĆ«ren van een platte tekst kolom naar een versleutelde kolom (of andersom) UPDATE, BULK INSERT, SELECT INTO, of INSERT..SELECT.
    • Letterlijke gegevens invoegen in versleutelde kolommen.

    Dergelijke instructies leiden tot operandconflictfouten als volgt:

    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
    

    Toepassingen moeten queryparameters gebruiken om waarden voor versleutelde kolommen op te geven. Wanneer u bijvoorbeeld gegevens in versleutelde kolommen invoegt of filtert met behulp van deterministische versleuteling, moeten queryparameters worden gebruikt. Het wordt niet ondersteund om letterlijke of T-SQL-variabelen door te geven die overeenkomen met versleutelde kolommen. Zie Toepassingen ontwikkelen met Always Encryptedvoor meer informatie over een clientstuurprogramma dat u gebruikt.

    In Azure Data Studio of SSMS-, is het essentieel om parameterisatie toe te passen voor Always Encrypted-variabelen om query's uit te voeren die waarden verwerken die zijn gekoppeld aan versleutelde kolommen. Dit omvat scenario's zoals het invoegen van gegevens in versleutelde kolommen of het toepassen van filters op deze kolommen (in gevallen waarin deterministische versleuteling wordt gebruikt).

  • parameters met tabelwaarde die zijn gericht op versleutelde kolommen, worden niet ondersteund.

  • Query's met behulp van de volgende componenten worden niet ondersteund:

  • Always Encrypted wordt niet ondersteund voor de kolommen met de onderstaande kenmerken:

    • Kolommen met een van de volgende gegevenstypen: xml-, tijdstempel, rowversion, afbeelding, ntext, tekst, sql_variant, hierarchyid, geografie, geometrie, alias, door de gebruiker gedefinieerde typen.
    • FILESTREAM-kolommen
    • Kolommen met de eigenschap IDENTITY.
    • Kolommen met de ROWGUIDCOL-eigenschap .
    • Tekenreekskolommen (varchar, char, enzovoort) met collaties anders dan binaire-codepuntcollaties (_BIN2).
    • Kolommen die sleutels zijn voor geclusterde en niet-geclusterde indexen bij het gebruik van gerandomiseerde versleuteling (indexen voor kolommen met behulp van deterministische versleuteling worden ondersteund).
    • Kolommen die zijn opgenomen in volledige-tekst-indexen (Always Encrypted biedt geen ondersteuning voor Full-Text Search-).
    • Berekende kolommen in een tabel opgeven.
    • Kolommen waarnaar verwezen wordt door berekende kolommen (wanneer de expressie niet-ondersteunde bewerkingen uitvoert voor Always Encrypted).
    • Gebruik sparse kolommen.
    • Kolommen waarnaar wordt verwezen door statistieken bij het gebruik van gerandomiseerde encryptie (deterministische encryptie wordt ondersteund).
    • Kolommen partitioneren.
    • Kolommen met standaardrestricties.
    • Kolommen waarnaar wordt verwezen door unieke beperkingen bij het gebruik van gerandomiseerde versleuteling (deterministische versleuteling wordt ondersteund).
    • Primaire-sleutelkolommen bij gebruik van gerandomiseerde versleuteling (deterministische versleuteling wordt ondersteund).
    • Verwijzen naar kolommen in vreemde-sleutelbeperkingen bij gebruik van gerandomiseerde of deterministische versleuteling, als de kolommen, waarnaar wordt verwezen, verschillende sleutels of algoritmen gebruiken.
    • Kolommen waarnaar wordt verwezen door controlebeperkingen .
    • Kolommen die zijn vastgelegd of bijgehouden met veranderingsgegevens vastleggen.
    • Primaire-sleutelkolommen in tabellen met wijzigingen bijhouden.
    • Kolommen die worden gemaskeerd (met Dynamische gegevensmaskering).
    • Kolommen die worden gebruikt in systeemeigen gecompileerde opgeslagen procedures.
    • Kolommen in strekken zich uit over databasetabellen. (Tabellen met kolommen die zijn versleuteld met Always Encrypted kunnen worden ingeschakeld voor Stretch.)

    Belangrijk

    Stretch Database is afgeschaft in SQL Server 2022 (16.x) en Azure SQL Database. Deze functie wordt verwijderd in een toekomstige versie van de database-engine. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie.

    • Kolommen in externe (PolyBase)-tabellen (opmerking: het gebruik van externe tabellen en tabellen met versleutelde kolommen in dezelfde query wordt ondersteund).
  • De volgende functies werken niet voor versleutelde kolommen:

Naslaginformatie Always Encrypted Transact-SQL

Always Encrypted maakt gebruik van de volgende Transact-SQL-instructies, systeemcatalogusweergaven, door het systeem opgeslagen procedures en machtigingen.

Verklaringen

DDL-instructie Beschrijving
KOLOMHOOFDSLEUTEL MAKEN Hiermee maakt u een kolomhoofdsleutelmetagegevensobject in een database
KOLOMHOOFDSLEUTEL NEERZETTEN Verwijdert een kolomhoofdsleutel uit een database.
KOLOMVERSLEUTELINGSSLEUTEL MAKEN Hiermee maakt u een metagegevensobject voor kolomversleutelingssleutels.
KOLONENTCRYPTIESLEUTEL WIJZIGEN Wijzigt een kolomversleutelingssleutel in een database, waarbij een versleutelde waarde wordt toegevoegd of verwijderd.
DROP COLUMN ENCRYPTION KEY Verwijdert een kolomversleutelingssleutel uit een database.
TABEL AANMAKEN (VERSLEUTELD MET) Het versleutelen van kolommen specificeren

Systeemcatalogusweergaven en opgeslagen procedures

Systeemcatalogusweergaven en opgeslagen procedures Beschrijving
sys.column_encryption_keys Retourneert informatie over kolomversleutelingssleutels (CEK's)
sys.column_encryption_key_values Retourneert informatie over versleutelde waarden van kolomversleutelingssleutels (CEK's)
sys.column_master_keys Retourneert een rij voor elke databasehoofdsleutel
sp_refresh_parameter_encryption Werkt de always encrypted-metagegevens bij voor de parameters van de opgegeven niet-schemagebonden opgeslagen procedure, door de gebruiker gedefinieerde functie, weergave, DML-trigger, DDL-trigger op databaseniveau of DDL-trigger op serverniveau
sp_describe_parameter_encryption Analyseert de opgegeven Transact-SQL-instructie en de bijbehorende parameters om te bepalen welke parameters overeenkomen met databasekolommen die worden beveiligd met de functie Always Encrypted.

Zie ook sys.columns voor informatie over versleutelingsmetagegevens die voor elke kolom zijn opgeslagen.

Databasemachtigingen

Er zijn vier databasemachtigingen voor Always Encrypted.

Systeemcatalogusweergaven en opgeslagen procedures Beschrijving
EEN KOLOMHOOFDSLEUTEL WIJZIGEN Vereist voor het maken en verwijderen van metagegevens van kolomhoofdsleutels.
EEN KOLOMVERSLEUTELINGSSLEUTEL WIJZIGEN Vereist voor het maken en verwijderen van metagegevens van kolomversleutelingssleutels.
EEN KOLOMHOOFDSLEUTELDEFINITIE WEERGEVEN Vereist voor toegang tot en lees de metagegevens van de kolomhoofdsleutel, die nodig is om een query uit te voeren op versleutelde kolommen.
WEERGEVEN VAN ELKE KOLOMVERSLEUTELINGSSLEUTEL DEFINITIE Vereist voor toegang tot en lees de metagegevens van de kolomversleutelingssleutel, die nodig is om een query uit te voeren op versleutelde kolommen.

De volgende tabel bevat een overzicht van de machtigingen die vereist zijn voor algemene acties.

Scenario EEN KOLOMHOOFDSLEUTEL WIJZIGEN WIJZIG EEN KOLOMVERSLEUTELINGSSLEUTEL BEKIJK ELKE DEFINITIE VAN EEN KOLOMMOEDERSLEUTEL BEKIJK ELKE DEFINITIE VAN KOLOMVERSLEUTELINGSSLEUTEL
Sleutelbeheer (sleutelmetagegevens maken/wijzigen/controleren in de database) X X X X
Query's uitvoeren op versleutelde kolommen X X

Belangrijke overwegingen

  • De machtigingen ELKE KOLOMHOOFDSLEUTELDEFINITIE WEERGEVEN en ELKE KOLOMVERSLEUTELINGSSLEUTELDEFINITIE WEERGEVEN zijn vereist bij het selecteren van versleutelde kolommen, zelfs als de gebruiker geen toegang heeft tot de kolomhoofdsleutels (in hun sleutelarchieven), waardoor de beveiliging van de kolommen wordt gehandhaafd en er geen poging tot toegang tot platte tekst wordt ondernomen.

  • In SQL Server worden VIEW ANY COLUMN MASTER KEY DEFINITION en VIEW ANY COLUMN ENCRYPTION KEY DEFINITION machtigingen standaard verleend aan de public vaste databaserol. Een databasebeheerder kan ervoor kiezen om de machtigingen voor de openbare rol in te trekken (of te weigeren) en deze te verlenen aan specifieke rollen of gebruikers om meer beperkte controle te implementeren.

  • In SQL Database worden de ELKE KOLOMHOOFDSLEUTELDEFINITIE EN ELKE KOLOMVERSLEUTELINGSSLEUTELDEFINITIE WEERGEVEN machtigingen niet standaard verleend aan de rol van openbare vaste database. Hierdoor kunnen bepaalde bestaande verouderde hulpprogramma's (met oudere versies van DacFx) goed werken. Als u wilt werken met versleutelde kolommen (zelfs als deze niet worden ontsleuteld), moet een databasebeheerder expliciet de VIEW ANY COLUMN MASTER KEY DEFINITION en VIEW ANY COLUMN ENCRYPTION KEY DEFINITION machtigingen.

Volgende stap