Udostępnij za pośrednictwem


ENCRYPTBYKEY (Transact-SQL)

Dane są szyfrowane klucz zawartości.

Topic link iconKonwencje składni języka Transact-SQL

EncryptByKey (key_GUID , { 'cleartext' | @cleartext }
        [, { add_authenticator | @add_authenticator }
          , { authenticator | @authenticator } ] )

Argumenty

  • key_GUID
    Jest identyfikatorem GUID klucz do zaszyfrowania cleartext. uniqueidentifier.

  • 'cleartext'
    Znajdują się dane, które mają zostać zaszyfrowane przy użyciu klucz.

  • @ zwykły tekst
    Jest zmienną typu nvarchar, char, varchar, binary, varbinary, lub nchar zawierający dane, które mają zostać zaszyfrowane przy użyciu klucz.

  • add_authenticator
    Wskazuje, czy wystawca uwierzytelnienia będą szyfrowane razem z cleartext. Musi mieć wartość 1, jeśli za pomocą wystawca uwierzytelnienia.int.

  • @ add_authenticator
    Wskazuje, czy wystawca uwierzytelnienia będą szyfrowane razem z cleartext. Musi mieć wartość 1, jeśli za pomocą wystawca uwierzytelnienia.int.

  • authenticator
    Is the data from which to derive an authenticator.sysname.

  • @ wystawca uwierzytelnienia
    Czy zmienna, która zawiera dane, z którego ma pochodzić wystawca uwierzytelnienia.

Zwracane typy

varbinary Maksymalny rozmiar 8000 bajtów.

Remarks

EncryptByKey używa klucz symetrycznego.Ten klucz musi być otwarty.Jeśli klucz zawartości jest już otwarty w bieżącej sesja, nie trzeba go ponownie otworzyć w odniesieniu do kwerendy.

wystawca uwierzytelnienia pomaga powstrzymania podstawiania wartości całkowite pól zaszyfrowanych.Rozważmy na przykład w poniższej tabela dane listy płac.

Employee_ID

Standard_Title

Base_Pay

345

Kopiowanie pomieszczenie Asystenta

Fskj % 7 ^ edhn00

697

Starszy inspektora finansowego

M0x8900f56543

694

Inspektor zapis danych

% Cvc97824 ^ 34f

Bez przerywania szyfrowanie, złośliwy użytkownik może wywnioskować istotnych informacji od kontekstu, w którym przechowywany jest szyfrowany,.Ponieważ ma być stosowany więcej niż Kopiuj pomieszczenie asystent dyrektora finansowego, następuje szyfrowane M0x8900f56543 wartość musi być większa niż wartość szyfrowane Fskj % 7 ^ edhn00.W takim przypadku każdy użytkownik posiadający uprawnienie ALTER w tabela może udzielić Asystenta pomieszczenie Kopiuj podnosi przez zastąpienie danych w jego Base_Pay pole kopie danych przechowywanych w Base_Pay pole dyrektora finansowego.Aby taki atak podstawiania wartości całkowite całkowicie pomija szyfrowanie.

Ataki podstawiania wartości całkowite może być odparty przez dodanie informacji kontekstowych zwykły tekst przed ich szyfrowanie.Te informacje kontekstowe są używane do weryfikacji danych zwykły tekst nie został przeniesiony.

Jeśli dane są szyfrowane jest podany jako parametr wystawca uwierzytelnienia, te same wystawca uwierzytelnienia jest wymagany do odszyfrowania danych przy użyciu DecryptByKey.W przypadku szyfrowanie czas, wartość mieszania wystawca uwierzytelnienia jest szyfrowany wraz z zwykły tekst.Podczas odszyfrowywania ten sam wystawca uwierzytelnienia muszą być przekazywane do DecryptByKey.Jeśli dwa nie pasują do siebie, odszyfrowywanie nie powiedzie się.Oznacza to, że wartość została przeniesiona, ponieważ został on zaszyfrowany.Firma Microsoft zaleca, aby za pomocą kolumna zawierającej wartość unikatowa i niezmiennymi jako protokół uwierzytelniający.Jeśli zmieni się wartość wystawca uwierzytelnienia, możesz utracić dostęp do danych.

Symetryczny szyfrowanie i odszyfrowywania jest stosunkowo szybkie i nadaje się do pracy z dużymi ilościami danych.

Important noteImportant Note:

Za pomocą SQL Server szyfrowanie działa razem z ANSI_PADDING OFF ustawienie może spowodować utratę danych z powodu konwersji niejawnych. Aby uzyskać więcej informacji na temat ANSI_PADDING zobacz SET ANSI_PADDING (Transact-SQL).

Przykłady

Funkcje przedstawione w poniższych przykładach korzysta z kluczy i certyfikatów utworzonych w Jak: Szyfruj kolumna danych.

A.Szyfrowanie ciąg przy klucz zawartości

W następującym przykładzie dodano kolumna, która ma być Employee Tabela, a następnie szyfruje wartość numeru PESEL, który jest przechowywany w kolumnie 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.Rekord wraz z wartością uwierzytelnianie szyfrowania

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