Aracılığıyla paylaş


DECRYPTBYKEYAUTOCERT (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği

Bu işlev, simetrik bir anahtarla verilerin şifresini çözer. Bu simetrik anahtarın şifresi otomatik olarak bir sertifikayla çözülür.

Transact-SQL söz dizimi kuralları

Sözdizimi

DECRYPTBYKEYAUTOCERT ( cert_ID , cert_password
    , { 'ciphertext' | @ciphertext }
  [ , { add_authenticator | @add_authenticator }
  [ , { authenticator | @authenticator } ] ] )

Arguments

cert_ID

Simetrik anahtarı korumak için kullanılan sertifikanın kimliği. cert_IDint veri türüne sahiptir.

cert_password

Sertifikanın özel anahtarını şifrelemek için kullanılan parola. Veritabanı ana anahtarı (DMK) özel anahtarı koruyorsa bir NULL değere sahip olabilir. cert_passwordbir nvarchar veri türüne sahiptir.

'şifre metni'

Anahtarla şifrelenen veri dizesi. şifre metnininbir varbinary veri türü vardır.

@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. şifreleme işlemi bir doğrulayıcı kullandıysa add_authenticator 1 değerine sahiptir. add_authenticatorint veri türüne sahiptir.

@add_authenticator

Özgün şifreleme işleminin düz metinle birlikte bir kimlik doğrulayıcının dahil edilip edilmediğini ve şifrelenip şifrelenmediğini gösteren değişken. 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 bir sysname veri türüne sahiptir.

@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. @authenticator bir sysname veri türüne sahiptir.

Dönüş türleri

en büyük boyutu 8.000 bayt olan varbinary.

Açıklamalar

DECRYPTBYKEYAUTOCERTve OPEN SYMMETRIC KEYişlevlerini DECRYPTBYKEY birleştirir. Tek bir işlemde önce bir simetrik anahtarın şifresini çözer ve ardından şifrelenmiş şifreleme metninin şifresini bu anahtarla çözer.

Permissions

VIEW DEFINITION Simetrik anahtar CONTROL üzerinde ve sertifika üzerinde izin gerektirir.

Örnekler

Bu örnekte şifre çözme kodunun nasıl DECRYPTBYKEYAUTOCERT basitleştirebileceği gösterilmektedir. Bu kod, DMK'sı olmayan bir AdventureWorks2025 veritabanında çalıştırılmalıdır. değerini güçlü bir parolayla değiştirin <password> .

--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;