Megosztás a következőn keresztül:


DECRYPTBYKEY (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-adatbázis a Microsoft Fabricben

Ez a függvény szimmetrikus kulcsot használ az adatok visszafejtéséhez.

Transact-SQL szintaxis konvenciók

Megjegyzés:

Ezt a szintaxist az Azure Synapse Analytics kiszolgáló nélküli SQL-készlete nem támogatja. Az Azure Synapse Analytics dedikált SQL-készletei esetében az eredményhalmaz gyorsítótárazását nem szabad használni DECRYPTBYKEY. Ha ezt a titkosítási függvényt kell használni, győződjön meg arról, hogy az eredménykészlet gyorsítótárazása le van tiltva ( munkamenet- vagy adatbázisszinten) a végrehajtás időpontjában.

Szemantika

DECRYPTBYKEY ( { 'ciphertext' | @ciphertext }
    [ , add_authenticator , { authenticator | @authenticator } ] )

Arguments

ciphertext

A kulccsal titkosított adatokat tartalmazó varbináris típusú változó.

@ciphertext

A kulccsal titkosított adatokat tartalmazó varbináris típusú változó.

add_authenticator

Azt jelzi, hogy az eredeti titkosítási folyamat tartalmazott-e és titkosított-e egy hitelesítőt az egyszerű szöveggel együtt. Az adattitkosítási folyamat során meg kell egyeznie a ENCRYPTBYKEY-nek átadott értékkel. add_authenticatorint adattípussal rendelkezik.

Hitelesítő

A hitelesítő létrehozásának alapjaként használt adatok. Meg kell egyeznie a ENCRYPTBYKEY-nek megadott értékkel. A authenticatora sysname.

@authenticator

Olyan változó, amely olyan adatokat tartalmaz, amelyekből egy hitelesítő létrehoz. Meg kell egyeznie a ENCRYPTBYKEY-nek megadott értékkel. @authenticatora sysname.

Visszatérési típusok

varbinary, legfeljebb 8000 bájt mérettel. DECRYPTBYKEYvisszaadja, ha az adattitkosításhoz NULL használt szimmetrikus kulcs nincs megnyitva, vagy ha a rejtjelszöveg .NULL

Megjegyzések

DECRYPTBYKEY szimmetrikus kulcsot használ. Az adatbázisnak már meg kell nyitnia ezt a szimmetrikus kulcsot. DECRYPTBYKEY több kulcs egyidejű megnyitását teszi lehetővé. A szöveg visszafejtése előtt nem kell azonnal megnyitnia a kulcsot.

A szimmetrikus titkosítás és visszafejtés általában gyorsan működik, és jól működnek a nagy adatmennyiségeket érintő műveletekhez.

A DECRYPTBYKEY hívásnak a titkosítási kulcsot tartalmazó adatbázis kontextusában kell történnie. Ezt úgy biztosíthatja, hogy az adatbázisban található objektumból (például nézetből, tárolt eljárásból vagy függvényből) hív DECRYPTBYKEY meg.

Permissions

A szimmetrikus kulcsnak már nyitva kell lennie az aktuális munkamenetben. További információ: OPEN SYMMETRIC KEY.

Példák

A. Visszafejtés szimmetrikus kulccsal

Ez a példa szimmetrikus kulccsal fejti vissza a rejtjelszöveget.

-- 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. Visszafejtés szimmetrikus kulccsal és hitelesítő kivonattal

Ez a példa az eredetileg titkosított adatokat egy hitelesítővel együtt fejti vissza.

-- 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. Nem sikerült visszafejteni, ha nincs az adatbázis környezetében a kulccsal

Az alábbi példa bemutatja, hogy a DECRYPTBYKEY kulcsot tartalmazó adatbázis kontextusában kell végrehajtani. A sor nem lesz visszafejtve az adatbázisban való végrehajtáskor DECRYPTBYKEYmaster ; az eredmény: 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