encryptbykey (Transact-sql)
Verileri bir simetrik anahtar kullanarak şifreler.
Transact-SQL Sözdizim Kuralları
Sözdizimi
EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }
[, { add_authenticator | @add_authenticator }
, { authenticator | @authenticator } ] )
Bağımsız değişkenler
key_GUID
Şifrelemek için kullanılacak anahtar GUID olduğunu cleartext. uniqueidentifier.'cleartext'
Anahtar ile şifrelenmiş verileri olduğunu.@ şifresiz metin
Değişken türü nvarchar, char, varchar, binary, varbinary, ya ncharanahtar ile şifrelenmiş verileri içeren.add_authenticator
Bir kimlik doğrulayıcısı ile birlikte şifreli olup olmadığını gösterir cleartext. 1 Bir kimlik doğrulayıcısı kullanırken olmalıdır. int.@ add_authenticator
Bir kimlik doğrulayıcısı ile birlikte şifreli olup olmadığını gösterir cleartext. 1 Bir kimlik doğrulayıcısı kullanırken olmalıdır. int.authenticator
Gelen bir kimlik doğrulayıcısı türetmek verileri olduğunu. sysname.@ Doğrulayıcı
Gelen bir kimlik doğrulayıcısı türetmek verileri içeren bir değişkendir.
Dönüş Türleri
varbinary8.000 bayt maksimum boyutu ile.
Anahtar yoksa, anahtar açık değil ise ya da kaldırılmış bir RC4 anahtar anahtar ise ve veritabanı uyumluluk düzeyi 110 değil döndürür null.
Açıklamalar
EncryptByKey simetrik bir anahtar kullanır. Bu anahtarı açık olmalıdır. Simetrik anahtar geçerli oturumda açıksa, sorgu bağlamında yeniden açmanız gerekmez.
Doğrulayıcı, Bütün-değer değiştirme şifreli alanlar caydırmak yardımcı olur. Örneğin, bordro verileri aşağıdaki tabloda düşünün.
Employee_ID |
Standard_Title |
Base_Pay |
---|---|---|
345 |
Kopya oda asistanı |
Fskj % 7 ^ edhn00 |
697 |
Mali İşler Müdürü |
M0x8900f56543 |
694 |
Veri girişi gözetmen |
Cvc97824% ^ 34f |
Şifreleme bozmadan, kötü niyetli bir kullanıcının önemli bilgileri ciphertext depolandığı bağlamından ulaşabilirse. Chief Financial Officer daha bir kopyası oda Yardımcısı ödenir çünkü o M0x8900f56543 şifreli değer Fskj % 7 şifrelenmiş değerden daha büyük olması gerektiğini şöyle ^ edhn00. Yani, tablo üzerinde alter izni olan herhangi bir kullanıcı kopya oda Yardımcısı zam yaptığı verileri değiştirerek verebilirsiniz Base_Paydepolanan verilerin bir kopyasını alan Base_PayChief Financial Officer alanının. Bu bütün değer değiştirme saldırı şifreleme tamamen atlar.
Şifrelemeden önce bağlamsal bilgiler düz metin olarak ekleyerek bütün değer değiştirme saldırıları bertaraf. Bu bağlam bilgileri düz metin veri değil taşındı doğrulamak için kullanılır.
Veri şifreli olduğunda bir kimlik doğrulayıcısı parametresi belirtilirse, aynı kimlik UseDecryptByKeyçoğaltılmış kullanarak verilerin şifresini çözmek için gereklidir. Şifreleme anda doğrulayıcı karma düz metin ile birlikte şifrelenir. Şifre çözme anda UseDecryptByKeyçoğaltılmış için aynı kimlik doğrulayıcı geçirilmelidir. İkisi eşleşmezse, şifre çözme başarısız olur. Bu şifreli beri değer taşındı gösterir. Kimlik doğrulayıcı olarak benzersiz ve değişmeyen bir değer içeren bir sütun kullanmanızı öneririz. Kimlik Doğrulayıcı değeri değişirse, veri erişimi kaybedebilirsiniz.
Simetrik şifreleme ve şifre çözme oldukça hızlıdır ve büyük miktarda veriyle çalışmak için uygundur.
Önemli |
---|
Kullanarak SQL ServerANSI_PADDING kapalı ayarı ile birlikte şifreleme işlevleri nedeniyle Örtülü Dönüştürmelere veri kaybına neden. ANSI_PADDING hakkında daha fazla bilgi için bkz: set ANSI_PADDING (Transact-sql). |
Örnekler
Aşağıdaki örneklerde gösterildiği işlevselliği anahtarlar üzerinde dayanıyor ve sertifikaları hazırlandı nasıl yapılır: bir sütun, veri şifreleme.
A.Bir dize ile simetrik anahtar şifreleme
Aşağıdaki örnek, bir sütun ekler Employeetablo ve sosyal güvenlik numarası, sütunda depolanan değeri şifreler NationalIDNumber.
USE AdventureWorks2012;
GO
-- Create a column in which to store the encrypted data.
ALTER TABLE HumanResources.Employee
ADD EncryptedNationalIDNumber varbinary(128);
GO
-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE HumanResources037;
-- Encrypt the value in column NationalIDNumber with symmetric key
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber
= EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO
USE AdventureWorks2012;
GO
-- Create a column in which to store the encrypted data.
ALTER TABLE HumanResources.Employee
ADD EncryptedNationalIDNumber varbinary(128);
GO
-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY SSN_Key_01
DECRYPTION BY CERTIFICATE HumanResources037;
-- Encrypt the value in column NationalIDNumber with symmetric key
-- SSN_Key_01. Save the result in column EncryptedNationalIDNumber.
UPDATE HumanResources.Employee
SET EncryptedNationalIDNumber
= EncryptByKey(Key_GUID('SSN_Key_01'), NationalIDNumber);
GO
B.Bir kimlik doğrulama değeri ile birlikte bir kaydı şifreleme
USE AdventureWorks2012;
-- Create a column in which to store the encrypted data.
ALTER TABLE Sales.CreditCard.
ADD CardNumber_Encrypted varbinary(128);
GO
-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTION BY CERTIFICATE Sales09;
-- Encrypt the value in column CardNumber with symmetric
-- key CreditCards_Key11.
-- Save the result in column CardNumber_Encrypted.
UPDATE Sales.CreditCard
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'),
CardNumber, 1, CONVERT( varbinary, CreditCardID) );
GO
USE AdventureWorks2012;
-- Create a column in which to store the encrypted data.
ALTER TABLE Sales.CreditCard.
ADD CardNumber_Encrypted varbinary(128);
GO
-- Open the symmetric key with which to encrypt the data.
OPEN SYMMETRIC KEY CreditCards_Key11
DECRYPTION BY CERTIFICATE Sales09;
-- Encrypt the value in column CardNumber with symmetric
-- key CreditCards_Key11.
-- Save the result in column CardNumber_Encrypted.
UPDATE Sales.CreditCard
SET CardNumber_Encrypted = EncryptByKey(Key_GUID('CreditCards_Key11'),
CardNumber, 1, CONVERT( varbinary, CreditCardID) );
GO
Ayrıca bkz.
Başvuru
USEDECRYPTBYKEYÇOĞALTILMIŞ (Transact-sql)
SIMETRIK anahtar (Transact-sql) oluştur
SIMETRIK anahtar (Transact-sql) değiştirme
SIMETRIK anahtar (Transact-sql) bırak