DECRYPTBYKEY (Transact-SQL)
Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance Azure Synapse Analytics
Diese Funktion verwendet einen symmetrischen Schlüssel zum Entschlüsseln von Daten.
Transact-SQL-Syntaxkonventionen
Hinweis
Diese Syntax wird vom serverlosen SQL-Pool in Azure Synapse Analytics nicht unterstützt.
Für dedizierte SQL-Pools in Azure Synapse Analytics sollte die Zwischenspeicherung von Resultsets nicht in Verbindung mit DECRYPTBYKEY verwendet werden. Wenn diese kryptografische Funktion erforderlich ist, stellen Sie sicher, dass Sie die Zwischenspeicherung des Resultsets zum Zeitpunkt der Ausführung (entweder auf Sitzungsebene oder Datenbankebene) deaktiviert haben.
Syntax
DecryptByKey ( { 'ciphertext' | @ciphertext }
[ , add_authenticator, { authenticator | @authenticator } ] )
Argumente
ciphertext
Eine Variable vom Typ varbinary, die Daten enthält, die mit dem Schlüssel verschlüsselt wurden.
@ciphertext
Eine Variable vom Typ varbinary, die Daten enthält, die mit dem Schlüssel verschlüsselt wurden.
add_authenticator
Gibt an, ob durch den ursprünglichen Verschlüsselungsprozess ein Authentifikator zusammen mit dem Klartext einbezogen und verschlüsselt wurde. Muss mit dem Wert übereinstimmen, der während der Datenverschlüsselung an ENCRYPTBYKEY (Transact-SQL) übergeben wurde. add_authenticator verfügt über einen int-Datentyp.
authenticator
Die Daten, die als Grundlage für die Generierung des Authentifikators verwendet werden. Diese müssen mit dem Wert übereinstimmen, der für ENCRYPTBYKEY (Transact-SQL) bereitgestellt wurde. authenticator verfügt über einen sysname-Datentyp.
@authenticator
Eine Variable, die Daten für die Generierung durch den Authentifikator enthält. Diese müssen mit dem Wert übereinstimmen, der für ENCRYPTBYKEY (Transact-SQL) bereitgestellt wurde. @authenticator weist den Datentyp sysname auf.
Rückgabetypen
varbinary mit einer maximalen Größe von 8.000 Byte. DECRYPTBYKEY
gibt NULL zurück, wenn der für die Datenverschlüsselung verwendete symmetrische Schlüssel nicht geöffnet ist oder wenn ciphertext den Wert NULL aufweist.
Hinweise
DECRYPTBYKEY
verwendet einen symmetrischen Schlüssel. Dieser symmetrische Schlüssel muss in der Datenbank bereits geöffnet sein. DECRYPTBYKEY
lässt zu, dass mehrere Schlüssel gleichzeitig geöffnet sind. Der Schlüssel muss nicht unmittelbar vor dem Entschlüsseln von verschlüsseltem Text geöffnet werden.
Die symmetrische Ver- und Entschlüsselung erfolgt in der Regel relativ schnell und eignet sich gut für Vorgänge, die große Datenmengen umfassen.
Der DECRYPTBYKEY
-Aufruf muss im Kontext der Datenbank mit dem Verschlüsselungsschlüssel erfolgen. Stellen Sie dies sicher, indem Sie DECRYPTBYKEY
aus einem Objekt (z.B. einer Sicht, einer gespeicherten Prozedur oder einer Funktion) aufrufen, das sich in der Datenbank befindet.
Berechtigungen
Dieser symmetrische Schlüssel muss in der aktuellen Sitzung bereits geöffnet sein. Weitere Informationen finden Sie unter OPEN SYMMETRIC KEY (Transact-SQL).
Beispiele
A. Entschlüsseln mit einem symmetrischen Schlüssel
In diesem Beispiel wird verschlüsselter Text mit einem symmetrischen Schlüssel entschlüsselt.
-- 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. Entschlüsseln mit einem symmetrischen Schlüssel und einem Authentifizierungshash
In diesem Beispiel werden Daten entschlüsselt, die ursprünglich zusammen mit einem Authentifikator verschlüsselt wurden.
-- 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;
GO
C. Fehler beim Entschlüsseln, wenn nicht im Kontext der Datenbank mit dem Schlüssel
Das folgende Beispiel zeigt, dass DECRYPTBYKEY
im Kontext der Datenbank mit dem Schlüssel ausgeführt werden muss. Die Zeile wird nicht entschlüsselt, wenn DECRYPTBYKEY
in der Master-Datenbank ausgeführt wird. Das Ergebnis ist 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!Passsword#';
CREATE CERTIFICATE TestEncryptionCertificate WITH SUBJECT = 'TestEncryption';
CREATE SYMMETRIC KEY TestEncryptSymmmetricKey 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 VARBINARY(8000), @Val VARCHAR(30);
SELECT @Val = '000-123-4567';
OPEN SYMMETRIC KEY TestEncryptSymmmetricKey DECRYPTION BY CERTIFICATE TestEncryptionCertificate;
SELECT @var = EncryptByKey(Key_GUID('TestEncryptSymmmetricKey'), @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 TestEncryptSymmmetricKey REMOVE PROVIDER KEY;
DROP CERTIFICATE TestEncryptionCertificate;
Use [Master]
DROP DATABASE TestingDecryptByKey;
GO
Siehe auch
ENCRYPTBYKEY (Transact-SQL)
CREATE SYMMETRIC KEY (Transact-SQL)
ALTER SYMMETRIC KEY (Transact-SQL)
DROP SYMMETRIC KEY (Transact-SQL)
Verschlüsselungshierarchie
Auswählen eines Verschlüsselungsalgorithmus