Aracılığıyla paylaş


DECRYPTBYKEY (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'de Azure Synapse AnalyticsSQL veritabanı

Bu işlev, verilerin şifresini çözmek için simetrik bir anahtar kullanır.

Transact-SQL söz dizimi kuralları

Uyarı

Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez. Azure Synapse Analytics'teki ayrılmış SQL havuzları için sonuç kümesi önbelleği ile DECRYPTBYKEYkullanılmamalıdır. Bu şifreleme işlevinin kullanılması gerekiyorsa, yürütme sırasında sonuç kümesi önbelleğinin devre dışı bırakıldığından ( oturum düzeyinde veya veritabanı düzeyinde) emin olun.

Sözdizimi

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

Arguments

Ciphertext

Anahtarla şifrelenmiş verileri içeren değişken türünde bir değişken.

@ciphertext

Anahtarla şifrelenmiş verileri içeren değişken türünde bir değişken.

add_authenticator

Özgün şifreleme işleminin düz metinle birlikte bir kimlik doğrulayıcının eklenip eklenmediğini ve şifrelenip şifrelenmediğini gösterir. Veri şifreleme işlemi sırasında ENCRYPTBYKEY'e geçirilen değerle eşleşmelidir. add_authenticatorint veri türüne sahiptir.

Doğrulayıcı

Kimlik doğrulayıcının oluşturulması için temel olarak kullanılan veriler. ENCRYPTBYKEY ile sağlanan değerle eşleşmelidir. authenticator, sysname şeklindedir.

@authenticator

Kimlik doğrulayıcının oluşturduğu verileri içeren değişken. ENCRYPTBYKEY ile sağlanan değerle eşleşmelidir. @authenticatorsysname'dir.

Dönüş türleri

en büyük boyutu 8.000 bayt olan varbinary. DECRYPTBYKEYveri şifrelemesi için kullanılan simetrik anahtar açık değilse veya NULL ise döndürürNULL.

Açıklamalar

DECRYPTBYKEY simetrik anahtar kullanır. Veritabanında bu simetrik anahtar zaten açık olmalıdır. DECRYPTBYKEY birden çok anahtarın aynı anda açılmasına izin verir. Metnin şifresini çözmeden önce anahtarı hemen açmanız gerekmez.

Simetrik şifreleme ve şifre çözme genellikle hızlı çalışır ve büyük veri hacimleri içeren işlemler için iyi çalışır.

Çağrı, DECRYPTBYKEY şifreleme anahtarını içeren veritabanı bağlamında gerçekleşmelidir. Veritabanında bulunan bir nesneden (görünüm, saklı yordam veya işlev gibi) çağırarak DECRYPTBYKEY bunu sağlayın.

Permissions

Simetrik anahtar geçerli oturumda zaten açık olmalıdır. Daha fazla bilgi için bkz . OPEN SYMMETRIC KEY.

Örnekler

A. Simetrik anahtar kullanarak şifre çözme

Bu örnek, şifre metninin şifresini simetrik bir anahtarla çözer.

-- 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. Simetrik anahtar ve kimlik doğrulama karması kullanarak şifre çözme

Bu örnek, orijinal olarak kimlik doğrulayıcıyla birlikte şifrelenen verilerin şifresini çözer.

-- 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. Anahtarla veritabanı bağlamında değilken şifresi çözülemedi

Aşağıdaki örnek, anahtarı içeren veritabanı bağlamında yürütülmesi gerektiğini gösterir DECRYPTBYKEY . Veritabanında yürütürken DECRYPTBYKEY satırın master şifresi çözülmez; sonuç olur 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