Udostępnij za pośrednictwem


ENCRYPTBYKEY (Transact-SQL)

Dane są szyfrowane za pomocą kluczsymetrycznego.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

Argumenty

  • key_GUID
    Identyfikator GUID klucz używany do szyfrowania jest cleartext.uniqueidentifier.

  • 'cleartext'
    To dane są szyfrowane przy użyciu klucz.

  • @zwykły tekst
    Jest zmienną typu nvarchar, char, varchar, binary, varbinary, lub nchar zawierający dane, które mają być szyfrowane za pomocą klucz.

  • add_authenticator
    Wskazuje, czy wystawca uwierzytelnienia będą szyfrowane razem z cleartext.Musi wynosić 1, podczas korzystania z wystawca uwierzytelnienia.int.

  • @ add_authenticator
    Wskazuje, czy wystawca uwierzytelnienia będą szyfrowane razem z cleartext.Musi wynosić 1, podczas korzystania z wystawca uwierzytelnienia.int.

  • authenticator
    To dane, z którego pochodzi wystawca uwierzytelnienia.sysname.

  • @wystawca uwierzytelnienia
    Jest zmienna, która zawiera dane, z którego pochodzi wystawca uwierzytelnienia.

Zwracane typy

varbinaryMaksymalny rozmiar 8000 bajtów.

Uwagi

EncryptByKey używa kluczsymetrycznego.Ten klucz musi być otwarty.klucz symetryczny jest już otwarty w bieżącej sesja, nie trzeba go ponownie otworzyć w kontekście 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

Kopiuj pomieszczenia Asystenta

Fskj % 7 ^ edhn00

697

Dyrektor finansowy

M0x8900f56543

694

Inspektor zapis danych

Cvc97824% ^ 34f

Bez przerywania szyfrowanie, złośliwy użytkownik może rozpoznać istotnych informacji od kontekstu, w którym przechowywany jest szyfrowany.Ponieważ dyrektora finansowego wypłacana jest więcej niż kopia Asystenta pokoju, następuje wartość zaszyfrowane jako M0x8900f56543 musi być większa niż wartość zaszyfrowane jako Fskj % 7 ^ edhn00.Jeśli tak, każdy użytkownik z uprawnieniem do zmiany w tabela można nadać Asystenta miejsca kopiowania podnoszenie przez zastąpienie danych w jego Base_Pay pole kopie danych przechowywanych w Base_Pay pole z głównego finansowe urzędnika.Atak podstawiania wartości całości całkowicie pomija szyfrowanie .

Ataki podstawiania wartości całości można odparty przez dodanie informacji kontekstowych zwykły tekst przed ich szyfrowanie.Te informacje kontekstowe jest używana do sprawdzenia, czy dane w zwykły tekst nie zostały przeniesione.

Jeśli parametr wystawca uwierzytelnienia jest określony, gdy dane są szyfrowane, tym samym wystawca uwierzytelnienia jest wymagany do odszyfrowania danych przy użyciu DecryptByKey.W szyfrowanie czasmieszania wystawca uwierzytelnienia jest szyfrowane razem z zwykły tekst.W odszyfrowywania czasten sam wystawca uwierzytelnienia muszą zostać przekazane do DecryptByKey.Jeśli dwa nie pasują do siebie, odszyfrowywanie nie powiedzie się.Oznacza to, że wartość została przeniesiona, ponieważ została zaszyfrowana.Zaleca się kolumna zawierającej wartości unikatowe i niezmienność jako wystawca uwierzytelnienia.Jeśli zmieni się wartość wystawca uwierzytelnienia , może utracić dostęp do danych.

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

Ważna informacjaWażne:

Za pomocą SQL ServerFunkcjeszyfrowanie wraz z ustawieniem spowodowałyby wyłączenie może spowodować utratę danych z powodu konwersje niejawne. Aby uzyskać więcej informacji na temat spowodowałyby zobacz Ustaw spowodowałyby (Transact-SQL).

Przykłady

Funkcje przedstawione w poniższych przykładach opiera się na klucze i certyfikaty utworzone w jak: Szyfruj kolumny danych.

A.ciąg z symetrycznego kluczszyfrowania

Poniższy przykład dodaje kolumna do Employee tabelai szyfruje wartość numer ubezpieczenia społecznego, który jest przechowywany w kolumna NationalIDNumber.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2;

-- 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