Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
sql database v Microsoft Fabric
Šifruje data pomocí symetrického klíče.
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)