Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Simetrik anahtar kullanarak verileri şifreler.
Transact-SQL söz dizimi kuralları
Uyarı
Bu söz dizimi, Azure Synapse Analytics'teki sunucusuz SQL havuzu tarafından desteklenmez.
Sözdizimi
EncryptByKey ( key_GUID , { 'cleartext' | @cleartext }
[, { add_authenticator | @add_authenticator }
, { authenticator | @authenticator } ] )
Tartışmalar
key_GUID
Cleartext şifrelemek için kullanılacak anahtarın GUID değeridir.
uniqueidentifier.
'cleartext'
Anahtarla şifrelenecek verilerdir.
@cleartext
Anahtarla şifrelenecek verileri içeren nvarchar, char, varchar, binary, varbinary veya nchar türünde bir değişkendir.
add_authenticator
Kimlik doğrulayıcının cleartext ile birlikte şifrelenip şifrelenmeyeceğini gösterir. Kimlik doğrulayıcı kullanılırken 1 olmalıdır.
int.
@add_authenticator
Kimlik doğrulayıcının cleartext ile birlikte şifrelenip şifrelenmeyeceğini gösterir. Kimlik doğrulayıcı kullanılırken 1 olmalıdır.
int.
Doğrulayıcı
Kimlik doğrulayıcının türetildiği verilerdir.
sysname.
@authenticator
Bir kimlik doğrulayıcının türetildiği verileri içeren bir değişkendir.
Dönüş Türleri
boyutu en fazla 8.000 bayt olan varbinary.
Anahtar açık değilse, anahtar yoksa veya anahtar kullanım dışı bırakılmış bir RC4 anahtarıysa ve veritabanı uyumluluk düzeyi 110 veya daha yüksek değilse NULL döndürür.
Cleartext değeri NULL ise NULL döndürür.
Açıklamalar
EncryptByKey bir simetrik anahtar kullanır. Bu anahtar açık olmalıdır. Simetrik anahtar geçerli oturumda zaten açıksa sorgu bağlamında yeniden açmanız gerekmez.
Kimlik doğrulayıcı, şifrelenmiş alanların tam değer değişimini caydırmanıza yardımcı olur. Örneğin, aşağıdaki bordro verileri tablosunu göz önünde bulundurun.
| Employee_ID | Standard_Title | Base_Pay |
|---|---|---|
| 345 | Oda Yardımcısı Kopyala | Fskj%7^edhn00 |
| 697 | Finans Müdürü | M0x8900f56543 |
| 694 | Veri Girişi Gözetmenliği | Cvc97824%^34f |
Şifrelemeyi bozmadan, kötü amaçlı bir kullanıcı şifre metninin depolandığı bağlamdan önemli bilgiler çıkarabilir. Bir Finans Müdürüne Kopyalama Odası Yardımcısı'na göre daha fazla ödeme uygulandığından, M0x8900f56543 olarak şifrelenen değerin Fskj%7^edhn00 olarak şifrelenen değerden büyük olması gerekir. Bu durumda, tabloda ALTER izni olan herhangi bir kullanıcı, Base_Pay alanındaki verileri Finans Müdürü'ne ait Base_Pay alanında depolanan verilerin bir kopyasıyla değiştirerek Oda Yardımcısı Kopyala'ya yükseltme yapabilir. Bu tam değer değiştirme saldırısı şifrelemeyi tamamen atlar.
Tam değerli değiştirme saldırıları, şifrelemeden önce düz metine bağlamsal bilgiler eklenerek engellenebilir. Bu bağlamsal bilgiler düz metin verilerinin taşınmadığını doğrulamak için kullanılır.
Veriler şifrelendiğinde kimlik doğrulayıcı parametresi belirtilirse, DecryptByKey kullanarak verilerin şifresini çözmek için aynı kimlik doğrulayıcı gereklidir. Şifreleme zamanında, kimlik doğrulayıcının karması düz metinle birlikte şifrelenir. Şifre çözme zamanında, aynı kimlik doğrulayıcı DecryptByKey'e geçirilmelidir. İkisi eşleşmezse, şifre çözme başarısız olur. Bu, değerin şifrelendikten sonra taşındığını 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 verilere erişimi kaybedebilirsiniz.
Simetrik şifreleme ve şifre çözme nispeten hızlıdır ve büyük miktarda veriyle çalışmaya uygundur.
Önemli
SQL Server şifreleme işlevlerinin ANSI_PADDING OFF ayarıyla birlikte kullanılması örtük dönüştürmeler nedeniyle veri kaybına neden olabilir. ANSI_PADDING hakkında daha fazla bilgi için bkz . SET ANSI_PADDING (Transact-SQL).
Örnekler
Aşağıdaki örneklerde gösterilen işlevsellik, Nasıl Yapılır: Veri Sütununu Şifreleme bölümünde oluşturulan anahtarlara ve sertifikalara dayanır.
A. Bir dizeyi simetrik anahtarla şifreleme
Aşağıdaki örnek tabloya Employee bir sütun ekler ve ardından sütununda NationalIDNumberdepolanan Sosyal Güvenlik numarasının değerini şifreler.
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. Bir kaydı kimlik doğrulama değeriyle birlikte şifreleme
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
Ayrıca Bkz.
DECRYPTBYKEY (Transact-SQL)
SIMETRİK ANAHTAR OLUŞTUR (Transact-SQL)
ALTER SIMETRIK ANAHTAR (Transact-SQL)
DROP SIMETRIK ANAHTAR (Transact-SQL)
Şifreleme Hiyerarşisi
HASHBYTES (Transact-SQL)