Anmerkung
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL Managed Instance
Diese Funktion entschlüsselt Daten mit einem symmetrischen Schlüssel. Dieser symmetrische Schlüssel wird automatisch mit einem Zertifikat entschlüsselt.
Transact-SQL-Syntaxkonventionen
Syntax
DECRYPTBYKEYAUTOCERT ( cert_ID , cert_password
, { 'ciphertext' | @ciphertext }
[ , { add_authenticator | @add_authenticator }
[ , { authenticator | @authenticator } ] ] )
Argumente
CERT_ID
Die ID des Zertifikats, das zum Schützen des symmetrischen Schlüssels verwendet wird. cert_ID verfügt über den Datentyp int.
cert_password
Das Kennwort, das zum Verschlüsseln des privaten Schlüssels des Zertifikats verwendet wurde. Kann einen NULL Wert aufweisen, wenn der Datenbankmasterschlüssel (DMK) den privaten Schlüssel schützt.
cert_password verfügt über einen nvarchar-Datentyp.
'ciphertext'
Die Zeichenfolge der Daten, die mit dem Schlüssel verschlüsselt wurden. ciphertext verfügt über einen varbinary-Datentyp.
@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 dem wert entsprechen, der während des Datenverschlüsselungsprozesses an ENCRYPTBYKEY übergeben wird. add_authenticator weist den Wert 1 auf, wenn im Verschlüsselungsprozess ein Authentifikator verwendet wurde. add_authenticator verfügt über einen int-Datentyp.
@add_authenticator
Eine Variable, die angibt, ob durch den ursprünglichen Verschlüsselungsprozess ein Authentifikator zusammen mit dem Klartext einbezogen, und verschlüsselt, wurde. Muss dem wert entsprechen, der während des Datenverschlüsselungsprozesses an ENCRYPTBYKEY übergeben wird. @add_authenticator weist den Datentyp int auf.
authenticator
Die Daten, die als Grundlage für die Generierung des Authentifikators verwendet werden. Muss mit dem wert übereinstimmen, der für ENCRYPTBYKEY bereitgestellt wird. authenticator verfügt über einen sysname-Datentyp.
@authenticator
Eine Variable, die Daten für die Generierung durch den Authentifikator enthält. Muss mit dem wert übereinstimmen, der für ENCRYPTBYKEY bereitgestellt wird. @authenticator weist den Datentyp sysname auf.
Rückgabetypen
varbinary mit einer maximalen Größe von 8.000 Byte.
Bemerkungen
DECRYPTBYKEYAUTOCERT kombiniert die Funktionen von OPEN SYMMETRIC KEY und DECRYPTBYKEY. In einem einzelnen Vorgang wird zunächst ein symmetrischer Schlüssel entschlüsselt, und mit diesem Schlüssel wird dann der verschlüsselte Chiffretext entschlüsselt.
Berechtigungen
Erfordert die VIEW DEFINITION-Berechtigung für den symmetrischen Schlüssel und die CONTROL-Berechtigung für das Zertifikat.
Beispiele
In diesem Beispiel wird dargestellt, wie DECRYPTBYKEYAUTOCERT den Entschlüsselungscode vereinfachen kann. Dieser Code sollte auf einer AdventureWorks2025 Datenbank ausgeführt werden, für die noch kein DMK vorhanden ist. Ersetzen Sie <password> es durch ein sicheres Kennwort.
--Create the keys and certificate.
USE AdventureWorks2022;
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
OPEN MASTER KEY DECRYPTION BY PASSWORD = '<password>';
CREATE CERTIFICATE HumanResources037
WITH SUBJECT = 'Sammamish HR', EXPIRY_DATE = '10/31/2035';
CREATE SYMMETRIC KEY SSN_Key_01
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE HumanResources037;
GO
----Add a column of encrypted data.
ALTER TABLE HumanResources.Employee
ADD EncryptedNationalIDNumber VARBINARY (128);
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber = EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO
--
--Close the key used to encrypt the data.
CLOSE SYMMETRIC KEY SSN_Key_01;
--
--There are two ways to decrypt the stored data.
--
--OPTION ONE, using DecryptByKey()
--1. Open the symmetric key
--2. Decrypt the data
--3. Close the symmetric key
OPEN SYMMETRIC KEY SSN_Key_01 DECRYPTION BY CERTIFICATE HumanResources037;
SELECT NationalIDNumber,
EncryptedNationalIDNumber AS 'Encrypted ID Number',
CONVERT (NVARCHAR, DecryptByKey(EncryptedNationalIDNumber)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;
CLOSE SYMMETRIC KEY SSN_Key_01;
--
--OPTION TWO, using DECRYPTBYKEYAUTOCERT()
SELECT NationalIDNumber,
EncryptedNationalIDNumber AS 'Encrypted ID Number',
CONVERT (NVARCHAR, DECRYPTBYKEYAUTOCERT(cert_ID('HumanResources037'), NULL, EncryptedNationalIDNumber)) AS 'Decrypted ID Number'
FROM HumanResources.Employee;