Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure 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)