Dela via


ENCRYPTBYKEY (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Krypterar data med hjälp av en symmetrisk nyckel.

Transact-SQL syntaxkonventioner

Anmärkning

Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics.

Syntax

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

Argumentpunkter

key_GUID
Är GUID för nyckeln som ska användas för att kryptera klartexten. uniqueidentifier.

"klartext"
Är de data som ska krypteras med nyckeln.

@cleartext
Är en variabel av typen nvarchar, char, varchar, binary, varbinary eller nchar som innehåller data som ska krypteras med nyckeln.

add_authenticator
Anger om en autentisering ska krypteras tillsammans med klartexten. Måste vara 1 när du använder en autentisering. int.

@add_authenticator
Anger om en autentisering ska krypteras tillsammans med klartexten. Måste vara 1 när du använder en autentisering. int.

autentiserare
Är de data som en autentisering ska härledas från. sysname.

@authenticator
Är en variabel som innehåller data som en autentisering ska härledas från.

Returtyper

varbinary med en maximal storlek på 8 000 byte.

Returnerar NULL om nyckeln inte är öppen, om nyckeln inte finns eller om nyckeln är en inaktuell RC4-nyckel och databasen inte är på kompatibilitetsnivå 110 eller senare.

Returnerar NULL om cleartext-värdet är NULL.

Anmärkningar

EncryptByKey använder en symmetrisk nyckel. Den här nyckeln måste vara öppen. Om den symmetriska nyckeln redan är öppen i den aktuella sessionen behöver du inte öppna den igen i frågans kontext.

Autentiseraren hjälper dig att avskräcka från att ersätta krypterade fält med hela värden. Tänk till exempel på följande tabell med lönedata.

Employee_ID Standard_Title Base_Pay
345 Kopiera rumsassistent Fskj%7^edhn00
697 Ekonomichef M0x8900f56543
694 Datainmatningsövervakare Cvc97824%^34f

Utan att bryta krypteringen kan en obehörig användare härleda viktig information från kontexten där chiffertexten lagras. Eftersom en ekonomichef betalas mer än en kopieringsrumsassistent följer att värdet som krypteras som M0x8900f56543 måste vara större än värdet som krypteras som Fskj%7^edhn00. I så fall kan alla användare med ALTER-behörighet i tabellen ge Assistenten för kopieringsrum en höjning genom att ersätta data i fältet Base_Pay med en kopia av de data som lagras i fältet Base_Pay för ekonomichefen. Den här ersättningsattacken för hela värdet kringgår krypteringen helt och hållet.

Ersättningsattacker med hela värden kan förhindras genom att kontextuell information läggs till i klartexten innan den krypteras. Den här kontextuella informationen används för att verifiera att klartextdata inte har flyttats.

Om en autentiseringsparameter anges när data krypteras krävs samma autentisering för att dekryptera data med hjälp av DecryptByKey. Vid krypteringen krypteras en hash för autentiseringen tillsammans med klartext. Vid dekrypteringstillfället måste samma autentisering skickas till DecryptByKey. Om de två inte matchar misslyckas dekrypteringen. Detta indikerar att värdet har flyttats sedan det krypterades. Vi rekommenderar att du använder en kolumn som innehåller ett unikt och oförändrat värde som autentisering. Om autentiseringsvärdet ändras kan du förlora åtkomsten till data.

Symmetrisk kryptering och dekryptering är relativt snabb och lämpar sig för arbete med stora mängder data.

Viktigt!

Användning av SQL Server-krypteringsfunktionerna tillsammans med inställningen ANSI_PADDING OFF kan orsaka dataförlust på grund av implicita konverteringar. Mer information om ANSI_PADDING finns i SET ANSI_PADDING (Transact-SQL).

Exempel

Funktionerna som illustreras i följande exempel förlitar sig på nycklar och certifikat som skapats i How To: Encrypt a Column of Data (Så här krypterar du en datakolumn).

A. Kryptera en sträng med en symmetrisk nyckel

I följande exempel läggs en kolumn till i Employee tabellen och sedan krypteras värdet för det personnummer som lagras i kolumnen 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. Kryptera en post tillsammans med ett autentiseringsvärde

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  

Se även

DECRYPTBYKEY (Transact-SQL)
SKAPA SYMMETRISK NYCKEL (Transact-SQL)
ÄNDRA SYMMETRISK NYCKEL (Transact-SQL)
SLÄPP SYMMETRISK NYCKEL (Transact-SQL)
Krypteringshierarki
HASHBYTES (Transact-SQL)