Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
              gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Den här funktionen använder en symmetrisk nyckel för att dekryptera data.
              
              
              Transact-SQL syntaxkonventioner
Anmärkning
Den här syntaxen stöds inte av en serverlös SQL-pool i Azure Synapse Analytics. För dedikerade SQL-pooler i Azure Synapse Analytics ska cachelagring av resultatuppsättningar inte användas med DECRYPTBYKEY. Om den här kryptografiska funktionen måste användas kontrollerar du att cachelagringen av resultatuppsättningen är inaktiverad (antingen på sessionsnivå eller databasnivå) vid tidpunkten för körningen.
Syntax
DECRYPTBYKEY ( { 'ciphertext' | @ciphertext }
    [ , add_authenticator , { authenticator | @authenticator } ] )
Arguments
chiffertext
En variabel av typen varbinary som innehåller data som krypterats med nyckeln.
@ciphertext
En variabel av typen varbinary som innehåller data som krypterats med nyckeln.
add_authenticator
Anger om den ursprungliga krypteringsprocessen inkluderade och krypterade en autentisering tillsammans med klartext. Måste matcha värdet som skickades till ENCRYPTBYKEY under datakrypteringsprocessen. add_authenticator har en int-datatyp .
autentiserare
De data som används som grund för autentiseringsgenereringen. Måste matcha värdet som anges till ENCRYPTBYKEY. authenticator är sysname.
@authenticator
En variabel som innehåller data som en autentiseringsutent genererar från. Måste matcha värdet som anges till ENCRYPTBYKEY. @authenticator är sysname.
Returtyper
              varbinary, med en maximal storlek på 8 000 byte. 
              DECRYPTBYKEY returnerar NULL om den symmetriska nyckel som används för datakryptering inte är öppen eller om chiffertext är NULL.
Anmärkningar
              DECRYPTBYKEY använder en symmetrisk nyckel. Databasen måste redan ha den här symmetriska nyckeln öppen. 
              DECRYPTBYKEY tillåter att flera nycklar öppnas samtidigt. Du behöver inte öppna nyckeln omedelbart innan du chiffer textdekryptering.
Symmetrisk kryptering och dekryptering fungerar vanligtvis snabbt och fungerar bra för åtgärder som involverar stora datavolymer.
Anropet DECRYPTBYKEY måste ske i kontexten för databasen som innehåller krypteringsnyckeln. Kontrollera detta genom att anropa DECRYPTBYKEY från ett objekt (till exempel en vy, en lagrad procedur eller funktion) som finns i databasen.
Permissions
Den symmetriska nyckeln måste redan vara öppen i den aktuella sessionen. Mer information finns i ÖPPNA SYMMETRISK NYCKEL.
Examples
A. Dekryptera med hjälp av en symmetrisk nyckel
Det här exemplet dekrypterar chiffertext med en symmetrisk nyckel.
-- 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. Dekryptera med hjälp av en symmetrisk nyckel och en autentiserande hash
Det här exemplet dekrypterar data som ursprungligen krypterades tillsammans med en autentisering.
-- 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. Det går inte att dekryptera när det inte är i kontexten för databasen med nyckeln
Följande exempel visar att DECRYPTBYKEY måste köras i kontexten för databasen som innehåller nyckeln. Raden dekrypteras inte när DECRYPTBYKEY den master körs i databasen. Resultatet är 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