Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
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. U kunt gevoelige gegevens in clienttoepassingen versleutelen, zodat versleutelingssleutels nooit worden blootgesteld aan de database-engine. Deze benadering 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 en filteren (met uitzondering van puntzoekacties met behulp van deterministische versleuteling). Deze beperking 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. Op de client versleutelt het stuurprogramma met Always Encrypted 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, vergelijkingsoperatoren gebruiken, sorteren en indexeren op versleutelde kolommen, 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:
Cryptografische sleutels inrichten om uw gegevenste beveiligen. Always Encrypted maakt gebruik van twee typen sleutels:
- Kolomversleutelingssleutels.
- Kolomhoofdsleutels.
Met een kolomversleutelingssleutel worden de gegevens in een versleutelde kolom versleuteld. Een kolomhoofdsleutel is een sleutelbeveiligingssleutel waarmee een of meer kolomversleutelingssleutels worden versleuteld.
Sla kolomhoofdsleutels op in een vertrouwd sleutelarchief buiten het databasesysteem, zoals Azure Key Vault, Windows-certificaatarchief of een hardwarebeveiligingsmodule. Na deze stap richt u kolomversleutelingssleutels in en versleutelt u elke sleutel 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.
versleuteling instellen voor specifieke databasekolommen die gevoelige informatie bevatten om beveiliging te garanderen. Deze stap vereist mogelijk het maken van nieuwe tabellen met versleutelde kolommen of het versleutelen van de bestaande kolommen en gegevens. Bij het configureren van versleuteling voor een kolom geeft u details op 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. Met behulp van deterministische versleuteling kunt u puntzoekacties, gelijkheidsdeelnames, groepering en indexering uitvoeren op versleutelde kolommen. Niet-geautoriseerde gebruikers kunnen echter 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. Deze methode verbetert de beveiliging van gerandomiseerde versleuteling.
Als u patroonkoppelingen wilt uitvoeren met vergelijkingsoperators, sorteren en indexeren op versleutelde kolommen, gebruikt u Always Encrypted met beveiligde enclaves en past u gerandomiseerde versleuteling toe. Always Encrypted (zonder beveiligde enclaves) willekeurige versleuteling biedt geen ondersteuning voor zoeken, groeperen, indexeren of samenvoegen op versleutelde kolommen. In plaats daarvan moet u deterministische versleuteling gebruiken voor kolommen die zijn bedoeld voor zoek- of groeperingsdoeleinden. Met dit versleutelingstype kunt u bewerkingen uitvoeren zoals puntzoekacties, gelijkheidsdeelnames, groepering en indexering op versleutelde kolommen.
Omdat het databasesysteem standaard geen toegang heeft tot cryptografische sleutels, moet elke kolomversleuteling gegevens buiten de database verplaatsen en versleutelen. Het versleutelingsproces kan lang duren en is kwetsbaar 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 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 voorgaande stappen uitvoeren met behulp van SQL-hulpprogramma's:
- Always Encrypted-sleutels inrichten met behulp van SQL Server Management Studio
- Always Encrypted configureren met behulp van PowerShell
- sqlpackage-- waarmee het installatieproces wordt geautomatiseerd
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:
U kunt geen berekeningen uitvoeren op kolommen die zijn versleuteld met gerandomiseerde versleuteling. Deterministische versleuteling ondersteunt de volgende bewerkingen waarbij gelijkheidsvergelijkingen worden gebruikt. Er zijn geen andere bewerkingen toegestaan:
- = (is gelijk aan) (Transact-SQL) in puntzoekopdrachten.
- IN (Transact-SQL).
- SELECT - GROUP BY- Transact-SQL.
- DISTINCT-.
Notitie
Voor toepassingen die patroonkoppelingen moeten uitvoeren, vergelijkingsoperatoren gebruiken, sorteren en indexeren op versleutelde kolommen, Always Encrypted implementeren met beveiligde enclaves.
U kunt geen query-instructies gebruiken waarmee berekeningen worden geactiveerd waarbij zowel tekst zonder opmaak als versleutelde gegevens worden gebruikt. Bijvoorbeeld:
- Een versleutelde kolom vergelijken met een kolom zonder opmaak of een letterlijke tekst.
- Gegevens kopiƫren van een kolom zonder opmaak naar een versleutelde kolom (of andersom)
UPDATE,BULK INSERTofSELECT INTOINSERT..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 charToepassingen 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, gebruikt u queryparameters. Het doorgeven van letterlijke gegevens of T-SQL-variabelen die overeenkomen met versleutelde kolommen, wordt niet ondersteund. Zie Toepassingen ontwikkelen met Always Encryptedvoor meer informatie over een clientstuurprogramma dat u gebruikt.
In SSMS is het essentieel om parameters toe te passen voor Always Encrypted-variabelen om query's uit te voeren die waarden verwerken die zijn gekoppeld aan versleutelde kolommen. Deze vereiste 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 die gebruikmaken van de volgende componenten worden niet ondersteund:
Always Encrypted wordt niet ondersteund voor de kolommen met de volgende kenmerken:
- Kolommen met een van de volgende gegevenstypen: xml, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, vector, alias, door de gebruiker gedefinieerde typen.
- FILESTREAM-kolommen
- Kolommen met de eigenschap IDENTITY.
- Kolommen met de ROWGUIDCOL-eigenschap .
- Tekenreekskolommen (varchar, karakter en andere) met andere collaties dan binaire-codepunt (
_BIN2) collaties. Sortering mag niet verschillen van de standaardsortering van de database. - 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 wordt verwezen door berekende kolommen wanneer de expressie niet-ondersteunde bewerkingen uitvoert in de context van 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 wijzigingsgegevens vastleggen.
- Primaire-sleutelkolommen in tabellen met wijzigingen bijhouden.
- Kolommen die worden gemaskeerd met dynamische gegevensmaskering.
- Wanneer in een systeemeigen gecompileerde module wordt verwezen naar een kolom in een tabel die is geoptimaliseerd voor geheugen, kan versleuteling niet worden toegepast op een van de kolommen in die tabel.
- 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:
- SQL Server-replicatie (transactionele, samenvoeging of momentopnamereplicatie). Fysieke replicatiefuncties, waaronder AlwaysOn-beschikbaarheidsgroepen, worden ondersteund.
- Gedistribueerde query's (gekoppelde servers, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Queries tussen databases die het uitvoeren van koppelingen op kolommen die uit verschillende databases zijn versleuteld.
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 | Description |
|---|---|
| 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 | Description |
|---|---|
| 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 sys.columns voor informatie over versleutelingsmetagegevens die voor elke kolom zijn opgeslagen.
Databasemachtigingen
Always Encrypted maakt gebruik van vier databasemachtigingen.
| Systeemcatalogusweergaven en opgeslagen procedures | Description |
|---|---|
ALTER ANY COLUMN MASTER KEY |
Vereist voor het maken en verwijderen van metagegevens van kolomhoofdsleutels. |
ALTER ANY COLUMN ENCRYPTION KEY |
Vereist voor het maken en verwijderen van metagegevens van kolomversleutelingssleutels. |
VIEW ANY COLUMN MASTER KEY DEFINITION |
Vereist voor toegang tot en lees de metagegevens van de kolomhoofdsleutel, die nodig is om een query uit te voeren op versleutelde kolommen. |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
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.
| Scenariobeschrijving | ALTER ANY COLUMN MASTER KEY |
ALTER ANY COLUMN ENCRYPTION KEY |
VIEW ANY COLUMN MASTER KEY DEFINITION |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
|---|---|---|---|---|
| Sleutelbeheer (sleutelmetagegevens maken, wijzigen of controleren in de database) | X | X | X | X |
| Query's uitvoeren op versleutelde kolommen | X | X |
Belangrijke overwegingen
De
VIEW ANY COLUMN MASTER KEY DEFINITIONenVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONmachtigingen zijn vereist bij het selecteren van versleutelde kolommen. Deze machtigingen beschermen de kolommen, zelfs als de gebruiker geen toestemming heeft voor de kolomhoofdsleutels in hun sleutelarchieven, en ze voorkomen toegang tot platte tekst.In SQL Server verleent de openbare vaste databaserol standaard beide
VIEW ANY COLUMN MASTER KEY DEFINITIONmachtigingen enVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONmachtigingen. Een databasebeheerder kan ervoor kiezen om deze machtigingen in te trekken of te weigeren voor de openbare rol en deze te verlenen aan specifieke rollen of gebruikers om meer beperkte controle te implementeren.In SQL Database verleent de vaste databasetaak public standaard niet de
VIEW ANY COLUMN MASTER KEY DEFINITIONenVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONrechten. Met deze wijziging kunnen bepaalde bestaande verouderde hulpprogramma's die oudere versies van DacFx gebruiken, goed werken. Als u wilt werken met versleutelde kolommen (zelfs als deze niet worden ontsleuteld), moet een databasebeheerder expliciet deVIEW ANY COLUMN MASTER KEY DEFINITIONenVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONmachtigingen verlenen.