Share via


encryptbykey (Transact-sql)

Verileri bir simetrik anahtar kullanarak şifreler.

Konu bağlantısı simgesi 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 notÖ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

hashbytes (Transact-sql)

Kavramlar

Şifreleme hiyerarşisi