Delen via


ENCRYPTBYKEY (Transact-SQL)

Van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Hiermee worden gegevens versleuteld met behulp van een symmetrische sleutel.

Transact-SQL syntaxis-conventies

Opmerking

Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics.

Syntaxis

  
EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }  
    [, { add_authenticator | @add_authenticator }  
     , { authenticator | @authenticator } ] )  

Argumenten

key_GUID
Is de GUID van de sleutel die moet worden gebruikt om de cleartext te versleutelen. uniqueidentifier.

'duidelijke tekst'
Zijn de gegevens die moeten worden versleuteld met de sleutel.

@cleartext
Is een variabele van het type nvarchar, char, varchar, binary, varbinary of nchar die gegevens bevat die moeten worden versleuteld met de sleutel.

add_authenticator
Hiermee wordt aangegeven of een verificator samen met de duidelijke tekst wordt versleuteld. Moet 1 zijn wanneer u een verificator gebruikt. int.

@add_authenticator
Hiermee wordt aangegeven of een verificator samen met de duidelijke tekst wordt versleuteld. Moet 1 zijn wanneer u een verificator gebruikt. int.

Verificator
Zijn de gegevens waaruit een verificator moet worden afgeleid. sysname.

@authenticator
Is een variabele die gegevens bevat waaruit een verificator moet worden afgeleid.

Retourtypen

varbinary met een maximale grootte van 8.000 bytes.

Retourneert NULL als de sleutel niet is geopend, als de sleutel niet bestaat of als de sleutel een afgeschafte RC4-sleutel is en de database zich niet in compatibiliteitsniveau 110 of hoger bevindt.

Retourneert NULL als de cleartext-waarde NULL is.

Opmerkingen

EncryptByKey maakt gebruik van een symmetrische sleutel. Deze sleutel moet open zijn. Als de symmetrische sleutel al is geopend in de huidige sessie, hoeft u deze niet opnieuw te openen in de context van de query.

De verificator helpt u bij het vervangen van volledige waarden van versleutelde velden. Denk bijvoorbeeld aan de volgende tabel met salarisgegevens.

Employee_ID Standard_Title Base_Pay
345 Assistent ruimte kopiëren Fskj%7^edhn00
697 Financieel Directeur M0x8900f56543
694 Supervisor voor gegevensinvoer Cvc97824%^34f

Zonder de versleuteling te verbreken, kan een kwaadwillende gebruiker belangrijke informatie afleiden uit de context waarin de coderingstekst wordt opgeslagen. Omdat een Chief Financial Officer meer wordt betaald dan een Copy Room Assistant, volgt het dat de waarde die is versleuteld als M0x8900f56543 groter moet zijn dan de waarde die is versleuteld als Fskj%7^edhn00. Als dit het geval is, kan elke gebruiker met ALTER-machtiging voor de tabel de Assistent voor de kopieerruimte een verhoging geven door de gegevens in hun Base_Pay veld te vervangen door een kopie van de gegevens die zijn opgeslagen in het Base_Pay veld van de Chief Financial Officer. Met deze vervangingsaanval voor hele waarden wordt versleuteling helemaal overgeslagen.

Vervangingsaanvallen met hele waarden kunnen worden gedwarsboomd door contextuele informatie toe te voegen aan de tekst zonder opmaak voordat u deze versleutelt. Deze contextuele informatie wordt gebruikt om te controleren of de gegevens zonder opmaak niet zijn verplaatst.

Als een verificatorparameter wordt opgegeven wanneer gegevens worden versleuteld, is dezelfde verificator vereist om de gegevens te ontsleutelen met behulp van DecryptByKey. Tijdens versleuteling wordt een hash van de verificator samen met de tekst zonder opmaak versleuteld. Bij ontsleuteling moet dezelfde verificator worden doorgegeven aan DecryptByKey. Als de twee niet overeenkomen, mislukt de ontsleuteling. Dit geeft aan dat de waarde is verplaatst sinds deze is versleuteld. U wordt aangeraden een kolom te gebruiken met een unieke en onveranderlijke waarde als verificator. Als de verificatorwaarde wordt gewijzigd, hebt u mogelijk geen toegang meer tot de gegevens.

Symmetrische versleuteling en ontsleuteling is relatief snel en is geschikt voor het werken met grote hoeveelheden gegevens.

Belangrijk

Het gebruik van de SQL Server-versleutelingsfuncties samen met de instelling ANSI_PADDING UIT kan leiden tot gegevensverlies vanwege impliciete conversies. Zie SET ANSI_PADDING (Transact-SQL) voor meer informatie over ANSI_PADDING.

Voorbeelden

De functionaliteit die in de volgende voorbeelden wordt geïllustreerd, is afhankelijk van sleutels en certificaten die zijn gemaakt in Procedure: Een kolom met gegevens versleutelen.

Eén. Een tekenreeks versleutelen met een symmetrische sleutel

Het volgende voorbeeld voegt een kolom toe aan de Employee tabel en versleutelt vervolgens de waarde van het burgerservicenummer dat is opgeslagen in kolom NationalIDNumber.

USE AdventureWorks2022;  
GO  
  
-- Create a column in which to store the encrypted data.  
ALTER TABLE HumanResources.Employee  
    ADD EncryptedNationalIDNumber varbinary(128);   
GO  
  
-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY SSN_Key_01  
   DECRYPTION BY CERTIFICATE HumanResources037;  
  
-- Encrypt the value in column NationalIDNumber with symmetric key  
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.  
UPDATE HumanResources.Employee  
SET EncryptedNationalIDNumber  
    = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);  
GO  

B. Een record versleutelen met een verificatiewaarde

USE AdventureWorks2022;  
  
-- Create a column in which to store the encrypted data.  
ALTER TABLE Sales.CreditCard   
    ADD CardNumber_Encrypted varbinary(128);   
GO  
  
-- Open the symmetric key with which to encrypt the data.  
OPEN SYMMETRIC KEY CreditCards_Key11  
    DECRYPTION BY CERTIFICATE Sales09;  
  
-- Encrypt the value in column CardNumber with symmetric   
-- key CreditCards_Key11.  
-- Save the result in column CardNumber_Encrypted.    
UPDATE Sales.CreditCard  
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'),   
    CardNumber, 1, CONVERT( varbinary, CreditCardID) );  
GO  

Zie ook

DECRYPTBYKEY (Transact-SQL)
SYMMETRISCHE SLEUTEL (Transact-SQL) maken
SYMMETRISCHE SLEUTEL WIJZIGEN (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL)
-versleutelingshiërarchie
HASHBYTES (Transact-SQL)