Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL 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)