Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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