Udostępnij za pomocą


ENCRYPTBYKEY (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database w usłudze Microsoft Fabric

Szyfruje dane przy użyciu klucza symetrycznego.

Transact-SQL konwencje składni

Uwaga / Notatka

Ta składnia nie jest obsługiwana przez bezserwerową pulę SQL w usłudze Azure Synapse Analytics.

Składnia

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

Argumenty (w programowaniu)

key_GUID
To identyfikator GUID klucza, który ma być używany do szyfrowania tekstu zwykłego. uniqueidentifier.

"cleartext"
Czy dane, które mają być szyfrowane za pomocą klucza.

@cleartext
To zmienna typu nvarchar, char, varchar, binary, varbinary lub nchar , która zawiera dane, które mają być szyfrowane za pomocą klucza.

add_authenticator
Wskazuje, czy wystawca uwierzytelniania zostanie zaszyfrowany razem z tekstem cleartext. Musi być 1 w przypadku korzystania z wystawcy uwierzytelniającego. int.

@add_authenticator
Wskazuje, czy wystawca uwierzytelniania zostanie zaszyfrowany razem z tekstem cleartext. Musi być 1 w przypadku korzystania z wystawcy uwierzytelniającego. int.

Wystawca uwierzytelnienia
To dane, z których ma pochodzić wystawca uwierzytelnienia. sysname.

@authenticator
To zmienna zawierająca dane, z których ma pochodzić wystawca uwierzytelnienia.

Typy zwracane

varbinary o maksymalnym rozmiarze 8000 bajtów.

Zwraca wartość NULL, jeśli klucz nie jest otwarty, jeśli klucz nie istnieje lub jeśli klucz jest przestarzałym kluczem RC4, a baza danych nie jest zgodna z poziomem zgodności 110 lub wyższym.

Zwraca wartość NULL, jeśli wartość cleartext ma wartość NULL.

Uwagi

Klucz EncryptByKey używa klucza symetrycznego. Ten klucz musi być otwarty. Jeśli klucz symetryczny jest już otwarty w bieżącej sesji, nie musisz otwierać go ponownie w kontekście zapytania.

Wystawca uwierzytelniania pomaga odstraszać zastępowanie całych wartości zaszyfrowanych pól. Rozważmy na przykład poniższą tabelę danych płacowych.

Employee_ID Standard_Title Base_Pay
345 Asystent pokoju kopiowania Fskj%7^edhn00
697 Dyrektor finansowy M0x8900f56543
694 Nadzorca wprowadzania danych Cvc97824%^34f

Bez przerywania szyfrowania złośliwy użytkownik może wywnioskować istotne informacje z kontekstu, w którym jest przechowywany szyfr. Ponieważ dyrektor finansowy jest wypłacany więcej niż asystent pokoju kopiowania, wynika z tego, że wartość zaszyfrowana jako M0x8900f56543 musi być większa niż wartość zaszyfrowana jako Fskj%7^edhn00. Jeśli tak, każdy użytkownik z uprawnieniem ALTER w tabeli może dać Asystentowi pokoju kopiowania podnieść, zastępując dane w polu Base_Pay kopią danych przechowywanych w polu Base_Pay dyrektora finansowego. Ten atak zastępujący całą wartość całkowicie pomija szyfrowanie.

Ataki oparte na podstawie całej wartości można udaremnić przez dodanie informacji kontekstowych do zwykłego tekstu przed ich zaszyfrowaniem. Te informacje kontekstowe służą do sprawdzania, czy dane w postaci zwykłego tekstu nie zostały przeniesione.

Jeśli parametr wystawcy uwierzytelniania jest określony, gdy dane są szyfrowane, ten sam wystawca uwierzytelniania jest wymagany do odszyfrowania danych przy użyciu funkcji DecryptByKey. W czasie szyfrowania skrót wystawcy uwierzytelnienia jest szyfrowany razem z zwykły tekst. W czasie odszyfrowywania ten sam wystawca uwierzytelnienia musi zostać przekazany do elementu DecryptByKey. Jeśli te dwa nie są zgodne, odszyfrowywanie zakończy się niepowodzeniem. Oznacza to, że wartość została przeniesiona, ponieważ została zaszyfrowana. Zalecamy użycie kolumny zawierającej unikatową i niezmienną wartość jako wystawcę uwierzytelnienia. Jeśli wartość wystawcy uwierzytelnienia ulegnie zmianie, możesz utracić dostęp do danych.

Szyfrowanie symetryczne i odszyfrowywanie jest stosunkowo szybkie i nadaje się do pracy z dużymi ilościami danych.

Ważne

Użycie funkcji szyfrowania programu SQL Server wraz z ustawieniem ANSI_PADDING OFF może spowodować utratę danych z powodu niejawnych konwersji. Aby uzyskać więcej informacji na temat ANSI_PADDING, zobacz SET ANSI_PADDING (Transact-SQL).

Przykłady

Funkcje przedstawione w poniższych przykładach opierają się na kluczach i certyfikatach utworzonych w temacie How To: Encrypt a Column of Data (Szyfrowanie kolumny danych).

Odp. Szyfrowanie ciągu przy użyciu klucza symetrycznego

Poniższy przykład dodaje kolumnę do Employee tabeli, a następnie szyfruje wartość numeru ubezpieczenia społecznego przechowywanego w kolumnie NationalIDNumber.

USE AdventureWorks2022;  
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. Szyfrowanie rekordu wraz z wartością uwierzytelniania

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

Zobacz też

DECRYPTBYKEY (Transact-SQL)
TWORZENIE KLUCZA SYMETRYCZNEGO (Transact-SQL)
ZMIENIJ KLUCZ SYMETRYCZNY (Transact-SQL)
ZRZUĆ KLUCZ SYMETRYCZNY (Transact-SQL)
Hierarchia szyfrowania
SKRÓTY (Transact-SQL)