Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Deze functie gebruikt een symmetrische sleutel om gegevens te ontsleutelen.
Transact-SQL syntaxis-conventies
Opmerking
Deze syntaxis wordt niet ondersteund door een serverloze SQL-pool in Azure Synapse Analytics. Voor toegewezen SQL-pools in Azure Synapse Analytics mag de cache van resultatensets niet worden gebruikt met DECRYPTBYKEY. Als deze cryptografische functie moet worden gebruikt, moet u ervoor zorgen dat de resultatenset caching is uitgeschakeld (op sessieniveau of op databaseniveau) op het moment van uitvoering.
Syntaxis
DECRYPTBYKEY ( { 'ciphertext' | @ciphertext }
[ , add_authenticator , { authenticator | @authenticator } ] )
Arguments
coderingstekst
Een variabele van het type varbinary die gegevens bevat die zijn versleuteld met de sleutel.
@ciphertext
Een variabele van het type varbinary die gegevens bevat die zijn versleuteld met de sleutel.
add_authenticator
Geeft aan of het oorspronkelijke versleutelingsproces is opgenomen en versleuteld, een verificator samen met de tekst zonder opmaak. Moet overeenkomen met de waarde die is doorgegeven aan ENCRYPTBYKEY tijdens het gegevensversleutelingsproces. add_authenticator heeft een gegevenstype int .
Verificator
De gegevens die worden gebruikt als basis voor het genereren van de verificator. Moet overeenkomen met de waarde die is opgegeven aan ENCRYPTBYKEY. authenticator is sysname.
@authenticator
Een variabele met gegevens waaruit een verificator genereert. Moet overeenkomen met de waarde die is opgegeven aan ENCRYPTBYKEY. @authenticator is sysname.
Retourtypen
varbinary, met een maximale grootte van 8.000 bytes.
DECRYPTBYKEY retourneert NULL als de symmetrische sleutel die wordt gebruikt voor gegevensversleuteling niet is geopend of als coderingstekst is NULL.
Opmerkingen
DECRYPTBYKEY maakt gebruik van een symmetrische sleutel. De database moet deze symmetrische sleutel al hebben geopend.
DECRYPTBYKEY staat meerdere sleutels tegelijk toe. U hoeft de sleutel niet direct te openen voordat de codering van tekst wordt ontsleuteld.
Symmetrische versleuteling en ontsleuteling werken doorgaans snel en ze werken goed voor bewerkingen met grote gegevensvolumes.
De DECRYPTBYKEY aanroep moet plaatsvinden in de context van de database met de versleutelingssleutel. Zorg ervoor dat dit gebeurt door aan te roepen DECRYPTBYKEY vanuit een object (zoals een weergave of opgeslagen procedure of functie) die zich in de database bevindt.
Permissions
De symmetrische sleutel moet al zijn geopend in de huidige sessie. Zie OPEN SYMMETRIC KEY voor meer informatie.
Voorbeelden
Eén. Ontsleutelen met behulp van een symmetrische sleutel
In dit voorbeeld wordt coderingstekst ontsleuteld met een symmetrische sleutel.
-- 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. Ontsleutelen met behulp van een symmetrische sleutel en een verificatie-hash
In dit voorbeeld worden gegevens ontsleuteld die oorspronkelijk zijn versleuteld met een verificator.
-- 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. Kan niet ontsleutelen wanneer deze zich niet in de context van de database bevindt met de sleutel
In het volgende voorbeeld ziet u dat DECRYPTBYKEY moet worden uitgevoerd in de context van de database die de sleutel bevat. De rij wordt niet ontsleuteld wanneer DECRYPTBYKEY deze wordt uitgevoerd in de master database. Het resultaat is 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