Sdílet prostřednictvím


ENCRYPTBYKEY (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticssql database v Microsoft Fabric

Šifruje data pomocí symetrického klíče.

Transact-SQL konvence syntaxe

Poznámka:

Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics.

Syntaxe

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

Argumenty

key_GUID
Je identifikátor GUID klíče, který se má použít k šifrování cleartextu. uniqueidentifier.

"cleartext"
Jedná se o data, která se mají šifrovat pomocí klíče.

@cleartext
Je proměnná typu nvarchar, char, varchar, binary, varbinary nebo nchar obsahující data, která se mají šifrovat pomocí klíče.

add_authenticator
Určuje, jestli bude ověřovací objekt zašifrován společně s nešifrovaným textem. Při použití ověřovacího objektu musí být 1. int.

@add_authenticator
Určuje, jestli bude ověřovací objekt zašifrován společně s nešifrovaným textem. Při použití ověřovacího objektu musí být 1. int.

autentikátor
Jedná se o data, ze kterých se má odvodit ověřovací objekt. sysname.

@authenticator
Je proměnná, která obsahuje data, ze kterých se má odvodit ověřovací objekt.

Návratové typy

varbinary s maximální velikostí 8 000 bajtů.

Vrátí hodnotu NULL, pokud klíč není otevřený, pokud klíč neexistuje nebo pokud je klíč zastaralým klíčem RC4 a databáze není na úrovni kompatibility 110 nebo vyšší.

Vrátí hodnotu NULL, pokud je hodnota cleartext null.

Poznámky

EncryptByKey používá symetrický klíč. Tento klíč musí být otevřený. Pokud je symetrický klíč již otevřen v aktuální relaci, nemusíte ho znovu otevírat v kontextu dotazu.

Ověřovací program pomáhá odstrašovat náhradu zašifrovaných polí pomocí celé hodnoty. Představte si například následující tabulku mzdových dat.

Employee_ID Standard_Title Base_Pay
345 Kopírovat pomocníka pro místnost Fskj%7^edhn00
697 Finanční ředitel M0x8900f56543
694 Správce zadávání dat Cvc97824%^34f

Bez porušení šifrování může škodlivý uživatel odvodit významné informace z kontextu, ve kterém je šifra uložena. Vzhledem k tomu, že je finanční ředitel placen více než asistentka pro kopírování, následuje, že hodnota zašifrovaná jako M0x8900f56543 musí být větší než hodnota zašifrovaná jako Fskj%7^edhn00. Pokud ano, může každý uživatel s oprávněním ALTER v tabulce dát asistentovi kopírovat místnost vyvolání nahrazením dat ve svém Base_Pay poli kopií dat uložených v Base_Pay pole hlavního finančního důstojníka. Tento útok na náhradu celé hodnoty obchází šifrování úplně.

Útoky na náhradu celé hodnoty můžou být zahlcené přidáním kontextových informací do prostého textu před jejich šifrováním. Tyto kontextové informace slouží k ověření, že nebyla přesunuta data ve formátu prostého textu.

Pokud je při šifrování dat zadaný parametr authenticatoru, je k dešifrování dat pomocí DecryptByKey vyžadován stejný ověřovací objekt. V době šifrování se hodnota hash ověřovacího objektu zašifruje společně s prostým textem. Při dešifrování musí být stejný ověřovací program předán dešifrovacímu klíči. Pokud se tyto dva neshodují, dešifrování selže. To znamená, že hodnota byla přesunuta od šifrování. Jako ověřovací objekt doporučujeme použít sloupec obsahující jedinečnou a neměnnou hodnotu. Pokud se hodnota authenticatoru změní, může dojít ke ztrátě přístupu k datům.

Symetrické šifrování a dešifrování je poměrně rychlé a je vhodné pro práci s velkými objemy dat.

Důležité

Použití funkcí šifrování SQL Serveru společně s nastavením ANSI_PADDING OFF může způsobit ztrátu dat z důvodu implicitních převodů. Další informace o ANSI_PADDING naleznete v tématu SET ANSI_PADDING (Transact-SQL).

Příklady

Funkce znázorněné v následujících příkladech závisí na klíčích a certifikátech vytvořených v části Postupy: Šifrování sloupce dat.

A. Šifrování řetězce pomocí symetrického klíče

Následující příklad přidá sloupec do Employee tabulky a pak zašifruje hodnotu čísla sociálního pojištění, které je uloženo ve sloupci 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. Šifrování záznamu společně s ověřovací hodnotou

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  

Viz také

DECRYPTBYKEY (Transact-SQL)
VYTVOŘIT SYMETRICKÝ KLÍČ (Transact-SQL)
ALTER SYMETRICKÝ KLÍČ (Transact-SQL)
DROP SYMETRICKÝ KLÍČ (Transact-SQL)
Hierarchie Šifrování
HASHBYTES (Transact-SQL)