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
Tato funkce používá symetrický klíč k dešifrování dat.
Poznámka:
Tato syntaxe není podporována bezserverovým fondem SQL ve službě Azure Synapse Analytics. Pro vyhrazené fondy SQL ve službě Azure Synapse Analytics by se nemělo používat DECRYPTBYKEYukládání sady výsledků do mezipaměti . Pokud je potřeba tuto kryptografickou funkci použít, ujistěte se, že je v době spuštění zakázané ukládání do mezipaměti (buď na úrovni relace , nebo na úrovni databáze).
Syntaxe
DECRYPTBYKEY ( { 'ciphertext' | @ciphertext }
[ , add_authenticator , { authenticator | @authenticator } ] )
Arguments
Ciphertext
Proměnná typu varbinary obsahující data zašifrovaná klíčem.
@ciphertext
Proměnná typu varbinary obsahující data zašifrovaná klíčem.
add_authenticator
Určuje, jestli byl původní proces šifrování zahrnutý a zašifrovaný ověřovací objekt společně s prostým textem. Musí odpovídat hodnotě předané šifrovacímu klíči ENCRYPTBYKEY během procesu šifrování dat. add_authenticator má datový typ int .
autentikátor
Data používaná jako základ pro generování ověřovacího objektu. Musí odpovídat hodnotě zadané pro ENCRYPTBYKEY. authenticator je sysname.
@authenticator
Proměnná obsahující data, ze kterých se generuje ověřovací objekt. Musí odpovídat hodnotě zadané pro ENCRYPTBYKEY. @authenticator je sysname.
Návratové typy
varbinary, s maximální velikostí 8 000 bajtů.
DECRYPTBYKEYvrátíNULL, pokud symetrický klíč použitý pro šifrování dat není otevřený nebo pokud je NULL
Poznámky
DECRYPTBYKEY používá symetrický klíč. Databáze musí mít tento symetrický klíč již otevřený.
DECRYPTBYKEY umožňuje otevření více klíčů najednou. Před dešifrování šifrovacího textu nemusíte klíč otevírat hned.
Symetrické šifrování a dešifrování obvykle fungují rychle a dobře fungují pro operace zahrnující velké objemy dat.
Volání DECRYPTBYKEY musí proběhnout v kontextu databáze obsahující šifrovací klíč. Zajistěte to voláním DECRYPTBYKEY z objektu (například zobrazení nebo uložené procedury nebo funkce), který se nachází v databázi.
Povolení
Symetrický klíč musí být již otevřen v aktuální relaci. Další informace naleznete v tématu OPEN SYMMETRIC KEY.
Examples
A. Dešifrování pomocí symetrického klíče
Tento příklad dešifruje šifrový text symetrickým klíčem.
-- First, open the symmetric key with which to decrypt the data.
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;
GO
-- Now list the original ID, the encrypted ID, and the
-- decrypted ciphertext. If the decryption worked, the original
-- and the decrypted ID will match.
SELECT NationalIDNumber,
EncryptedNationalID AS 'Encrypted ID Number',
CONVERT (NVARCHAR, DECRYPTBYKEY(EncryptedNationalID)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;
GO
B. Dešifrování pomocí symetrického klíče a ověřovací hodnoty hash
Tento příklad dešifruje data původně zašifrovaná společně s ověřovacím objektem.
-- First, open the symmetric key with which to decrypt the data
OPEN SYMMETRIC KEY CreditCards_Key11 DECRYPTION BY CERTIFICATE Sales09;
GO
-- Now list the original card number, the encrypted card number,
-- and the decrypted ciphertext. If the decryption worked,
-- the original number will match the decrypted number.
SELECT CardNumber,
CardNumber_Encrypted AS 'Encrypted card number',
CONVERT (NVARCHAR, DECRYPTBYKEY(CardNumber_Encrypted, 1, HashBytes('SHA1', CONVERT (VARBINARY, CreditCardID)))) AS 'Decrypted card number'
FROM Sales.CreditCard;
C. Selhání dešifrování, pokud není v kontextu databáze s klíčem
Následující příklad ukazuje, že DECRYPTBYKEY musí být spuštěn v kontextu databáze, která obsahuje klíč. Řádek není dešifrován při DECRYPTBYKEY spuštění v master databázi; výsledkem je NULL.
-- Create the database
CREATE DATABASE TestingDecryptByKey;
GO
USE [TestingDecryptByKey]; -- Create the table and view
CREATE TABLE TestingDecryptByKey.dbo.Test (val VARBINARY (8000) NOT NULL);
GO
CREATE VIEW dbo.TestView AS
SELECT CAST (DECRYPTBYKEY(val) AS VARCHAR (30)) AS DecryptedVal
FROM TestingDecryptByKey.dbo.Test;
GO
-- Create the key, and certificate
USE TestingDecryptByKey;
CREATE MASTER KEY ENCRYPTION BY PASSWORD= 'ItIsreallyLong1AndSecured!Password#';
CREATE CERTIFICATE TestEncryptionCertificate
WITH SUBJECT = 'TestEncryption';
CREATE SYMMETRIC KEY TestEncryptSymmetricKey
WITH ALGORITHM = AES_256, IDENTITY_VALUE = 'It is place for test', KEY_SOURCE = 'It is source for test'
ENCRYPTION BY CERTIFICATE TestEncryptionCertificate;
-- Insert rows into the table
DECLARE @var AS VARBINARY (8000), @Val AS VARCHAR (30);
SELECT @Val = '000-123-4567';
OPEN SYMMETRIC KEY TestEncryptSymmetricKey DECRYPTION BY CERTIFICATE TestEncryptionCertificate;
SELECT @var = EncryptByKey(Key_GUID('TestEncryptSymmetricKey'), @Val);
SELECT CAST (DECRYPTBYKEY(@var) AS VARCHAR (30)),
@Val;
INSERT INTO dbo.Test
VALUES (@var);
GO
-- Switch to master
USE [master];
GO
-- Results show the date inserted
SELECT DecryptedVal
FROM TestingDecryptByKey.dbo.TestView;
-- Results are NULL because we are not in the context of the TestingDecryptByKey Database
SELECT CAST (DECRYPTBYKEY(val) AS VARCHAR (30)) AS DecryptedVal
FROM TestingDecryptByKey.dbo.Test;
GO
-- Clean up resources
USE TestingDecryptByKey;
DROP SYMMETRIC KEY TestEncryptSymmetricKey REMOVE PROVIDER KEY;
DROP CERTIFICATE TestEncryptionCertificate;
USE [master];
DROP DATABASE TestingDecryptByKey;
GO