ENCRYPTBYKEY (Transact-SQL)
Encrypts verileri kullanarak simetrik anahtar.
EncryptByKey (key_GUID , { 'cleartext' | @cleartext }
[, { add_authenticator | @add_authenticator }
, { authenticator | @authenticator } ] )
Bağımsız değişkenler
key_GUID
Şifrelemek için kullanılan anahtarın GUID'dircleartext.uniqueidentifier.'cleartext'
Ortak anahtar ile şifrelenmesi için veri kısmında.@ düz metin
Türünde bir değişken minvarchar,char,varchar,binary,varbinary, orncharşifreli anahtar. için veriyi içerenadd_authenticator
Gösterir mi bir doğrulayıcı ile birlikte şifrelenircleartext.1 Kullanırken olmalı bir doğrulayıcı.int.@ add_authenticator
Gösterir mi bir doğrulayıcı ile birlikte şifrelenircleartext.1 Kullanırken olmalı bir doğrulayıcı.int.authenticator
Is the data from which to derive an authenticator.sysname.Kimlik Doğrulayıcı
Bir doğrulayıcı oluşturmak istediğiniz verileri içeren değişken belirtilir.
Dönüş Türleri
varbinary en çok 8.000 bayt boyutu ile.
Remarks
EncryptByKey simetrik bir anahtar kullanır.Bu anahtar, açık olması gerekir.Simetrik anahtar geçerli oturumda açık durumda, sorgu bağlamında yeniden açmak gerekmez.
Kimlik Doğrulayıcı, bütün değer yerine şifreli alan önüne geçilmesine yardımcı olur.Örneğin, aşağıdaki tabloda, bordro verilerini göz önünde bulundurun.
Employee_ID |
Standard_Title |
Base_Pay |
---|---|---|
345 |
Oda yardımcı kopyalama |
Fskj % 7 ^ edhn00 |
697 |
Baş mali yetkili |
M0x8900f56543 |
694 |
Veri girişi Yöneticisi |
Cvc97824% ^ 34f |
Şifreleme koparmadan, kötü niyetli bir kullanıcının, ciphertext depolandığı içerik önemli bilgileri algılayın.Bir baş Finans yetkili bir kopyası oda Yardımcısı birden fazla ödeme için şifreli M0x8900f56543 Fskj % 7 şifrelenmiş büyük olmalıdır, izleyen ^ edhn00.Tablo üzerinde ALTER iznine sahip herhangi bir kullanıcı verin kopyası oda Yardımcısı bir artırma ile kullanıcının verileri değiştirmeBase_Pay baş Finans memuru. Base_Pay alanında depolanan verilerin bir kopyasını alan Bu bütün değer değiştirme saldırı şifreleme tamamen atlar.
Şifrelemeden önce düz metine kavramsal bilgileri ekleyerek bütün değer değiştirme saldırıları thwarted.Bu bağlamsal bilgiler düz metin veriler değil taşındı doğrulamak için kullanılır.
Veri şifreli olduğunda bir kimlik doğrulayıcı parametresi belirtilirse, aynı kimlik DecryptByKey kullanarak verilerin şifresini çözmek için gereklidir.Şifreleme saat, doğrulayıcı karma düz metin'ile birlikte şifrelenir.Şifre çözme saat DecryptByKey için aynı doğrulayıcı geçirilmelidir.İki eşleşmiyorsa, şifre çözme başarısız olur.Bu değer, şifrelenmiş olduğundan taşındı gösterir.Kimlik doğrulayıcı olarak benzersiz ve değişmeyen bir değer içeren sütun kullanmanız önerilir.Kimlik değeri, veri erişimi kaybedebilirsiniz.
Simetrik şifreleme ve şifre çözme oldukça hızlıdır ve büyük miktarda verilerle çalışmak için uygundur.
Important Note: |
---|
KullanarakSQL Serverşifreleme işlevleri ile birlikteANSI_PADDING OFFayar nedeniyle veri kaybına neden Örtük dönüştürmeler.ANSI_PADDING, daha fazla bilgi için bkz:küme ANSI_PADDING (Transact-SQL). |
Örnekler
Aşağıdaki örneklerde gösterildiği işlevselliğini kullanır anahtarları ve sertifikaları oluşturulanNasıl: Şifreleme sütun veri.
C.Bir dize bir simetrik anahtar şifreleme
Aşağıdaki örnek, bir sütun eklerEmployeeTablo ve daha sonra sosyal güvenlik numarasını sütunda depolanan değeri şifreler.NationalIDNumber.
USE AdventureWorks;
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 kaydı ile birlikte bir kimlik değeri şifreleme
USE AdventureWorks;
-- 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