Megosztás a következőn keresztül:


ENCRYPTBYKEY (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-adatbázis a Microsoft Fabricben

Szimmetrikus kulccsal titkosítja az adatokat.

Transact-SQL szintaxis konvenciók

Megjegyzés:

Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja.

Szemantika

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

Érvek

key_GUID
A cleartext titkosításához használandó kulcs GUID azonosítója. uniqueidentifier.

"cleartext"
A kulccsal titkosítandó adatok.

@cleartext
Nvarchar, char, varchar, bináris, varbinary vagy nchar típusú változó, amely a kulccsal titkosítandó adatokat tartalmazza.

add_authenticator
Azt jelzi, hogy a hitelesítő titkosítva lesz-e a cleartextdel együtt. Hitelesítő használata esetén 1-nek kell lennie. int.

@add_authenticator
Azt jelzi, hogy a hitelesítő titkosítva lesz-e a cleartextdel együtt. Hitelesítő használata esetén 1-nek kell lennie. int.

Hitelesítő
Az az adat, amelyből hitelesítőt kell származtatnia. sysname.

@authenticator
Olyan változó, amely olyan adatokat tartalmaz, amelyekből a hitelesítőt le kell származtatnia.

Visszatérési típusok

varbinary legfeljebb 8000 bájt mérettel.

Null értéket ad vissza, ha a kulcs nincs megnyitva, ha a kulcs nem létezik, vagy ha a kulcs elavult RC4-kulcs, és az adatbázis nem kompatibilis a 110-es vagy újabb kompatibilitási szinttel.

Null értéket ad vissza, ha a cleartext értéke NULL.

Megjegyzések

A EncryptByKey szimmetrikus kulcsot használ. Ennek a kulcsnak nyitva kell lennie. Ha a szimmetrikus kulcs már meg van nyitva az aktuális munkamenetben, akkor nem kell újra megnyitnia a lekérdezés kontextusában.

A hitelesítő segít elrettenteni a titkosított mezők teljes értékű helyettesítését. Vegyük például a bérszámfejtési adatok alábbi táblázatát.

Employee_ID Standard_Title Base_Pay
345 Szobai asszisztens másolása Fskj%7^edhn00
697 Pénzügyi igazgató M0x8900f56543
694 Adatbeviteli felügyelő Cvc97824%^34f

A titkosítás feltörése nélkül a rosszindulatú felhasználók jelentős információkat tudnak kikövetkeztetni abból a környezetből, amelyben a rejtjelszöveget tárolják. Mivel egy pénzügyi igazgatónak többet kell fizetnie, mint egy copy room assistant, ebből következően az M0x8900f56543 kódolt értéknek nagyobbnak kell lennie, mint az Fskj%7^edhn00. Ha igen, a táblán alter engedéllyel rendelkező felhasználók emelést adhatnak a Szoba másolása segédnek úgy, hogy a Base_Pay mezőben lévő adatokat a pénzügyi igazgató Base_Pay mezőjében tárolt adatok másolatára cserélik. Ez a teljes értékű helyettesítési támadás teljes egészében áthalad a titkosításon.

A teljes értékű helyettesítési támadásokat úgy lehet meghiúsítani, hogy környezetfüggő információkat ad hozzá az egyszerű szöveghez a titkosítás előtt. Ez a környezeti információ annak ellenőrzésére szolgál, hogy a egyszerű szöveges adatok nem lettek-e áthelyezve.

Ha az adatok titkosításakor hitelesítő paramétert ad meg, ugyanaz a hitelesítő szükséges az adatok visszafejtéséhez a DecryptByKey használatával. Titkosításkor a hitelesítő kivonata a egyszerű szöveggel együtt lesz titkosítva. A visszafejtési időben ugyanazt a hitelesítőt kell átadni a DecryptByKey-nek. Ha a kettő nem egyezik, a visszafejtés sikertelen lesz. Ez azt jelzi, hogy az érték a titkosítás óta át lett helyezve. Javasoljuk, hogy egy egyedi és változatlan értéket tartalmazó oszlopot használjon hitelesítőként. Ha a hitelesítő értéke megváltozik, előfordulhat, hogy elveszíti az adatokhoz való hozzáférést.

A szimmetrikus titkosítás és visszafejtés viszonylag gyors, és alkalmas nagy mennyiségű adat kezeléséhez.

Fontos

Ha az SQL Server titkosítási függvényeit a ANSI_PADDING KI beállítással együtt használja, az implicit konverziók miatt adatvesztést okozhat. A ANSI_PADDING további információ: SET ANSI_PADDING (Transact-SQL).

Példák

Az alábbi példákban bemutatott funkciók a How To: Encrypt a Column of Data (Adatoszlop titkosítása) című témakörben létrehozott kulcsokra és tanúsítványokra támaszkodnak.

Egy. Sztring titkosítása szimmetrikus kulccsal

Az alábbi példa egy oszlopot ad hozzá a Employee táblához, majd titkosítja az oszlopban NationalIDNumbertárolt társadalombiztosítási szám értékét.

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. Rekord titkosítása hitelesítési értékkel együtt

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  

Lásd még:

DECRYPTBYKEY (Transact-SQL)
SZIMMETRIKUS KULCS LÉTREHOZÁSA (Transact-SQL)
ALTER SZIMMETRIKUS KULCS (Transact-SQL)
SZIMMETRIKUS BILLENTYŰ (Transact-SQL)
titkosítási hierarchia
HASHBYTES (Transact-SQL)