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.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Always Encrypted'ın diyagramı.
Always Encrypted ve güvenli bölgelerle Always Encrypted, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve SQL Server veritabanlarındaki kredi kartı numaraları ve ulusal veya bölgesel kimlik numaraları (örneğin, ABD sosyal güvenlik numaraları) gibi hassas bilgileri korumak için tasarlanmış özelliklerdir. İstemcilerin istemci uygulamalarındaki hassas verileri şifrelemesine olanak tanır ve şifreleme anahtarlarının Veritabanı Altyapısı'na hiçbir zaman sunulmamasını sağlar. Bu, verilerin sahibi olan ve görüntüleyebilenler ile verileri yöneten ancak erişimi olmayanlar arasında bir ayrım sağlar: şirket içi veritabanı yöneticileri, bulut veritabanı operatörleri veya diğer yüksek ayrıcalıklı yetkisiz kullanıcılar. Sonuç olarak Always Encrypted, müşterilerin hassas verilerini bulutta güvenli bir şekilde depolamasına olanak sağlayarak kötü niyetli insider'ların veri hırsızlığı riskini azaltır.
Always Encrypted, sıralama, filtreleme (belirleyici şifreleme kullanan nokta aramaları hariç) gibi şifrelenmiş verilerde işlem gerçekleştirilememesi gibi belirli kısıtlamalara sahiptir. Bu, bazı sorguların ve uygulamaların Always Encrypted ile uyumlu olmadığı veya uygulama mantığında önemli değişiklikler gerektirebileceği anlamına gelir.
Bu sınırlamaları gidermek için Güvenli kuşatmalarla Always Encrypted , veritabanı altyapısının şifrelenmiş verileri güvenli kapanım olarak adlandırılan korumalı bir bellek alanında işlemesini sağlar. Güvenli kuşatmalar desen eşleştirmeyi, çeşitli karşılaştırma işleçlerini ve yerinde şifrelemeyi destekleyerek Always Encrypted'ın gizli bilgi işlem özelliklerini geliştirir.
Always Encrypted, şifrelemenin uygulamalar için sorunsuz olmasını sağlar. İstemci tarafında Always Encrypted özellikli sürücü, hassas verileri Veritabanı Altyapısı'na göndermeden önce şifreler ve uygulama semantiğini korumak için sorguları otomatik olarak yeniden yazar. Ayrıca şifrelenmiş veritabanı sütunlarından gelen sorgu sonuçlarının şifresini otomatik olarak çözer.
Always Encrypted'ı yapılandırma
Uyarı
Desen eşleştirmesi gerçekleştirmesi, şifrelenmiş sütunlarda karşılaştırma işleçleri, sıralama ve dizin kullanması gereken uygulamalar için Always Encrypted'ı güvenli kuşatmalarla uygulamanız gerekir.
Bu bölümde Always Encrypted'i ayarlamaya genel bir bakış sağlanır. Ayrıntılar ve kullanmaya başlamak için Öğretici: Always Encrypted'ı kullanmaya başlama konusuna bakın.
Veritabanınızda Always Encrypted'ı yapılandırmak için şu adımları izleyin:
Verilerinizi korumak için şifreleme anahtarları sağlayın. Always Encrypted iki tür anahtar kullanır:
- Sütun şifreleme anahtarları.
- Sütun anahtarları.
Şifrelenmiş bir sütundaki verileri şifrelemek için bir sütun şifreleme anahtarı kullanılır. Sütun ana anahtarı, bir veya daha fazla sütun şifreleme anahtarını şifreleyen bir anahtar koruma anahtarıdır.
Sütun ana anahtarlarını Azure Key Vault, Windows sertifika deposu veya donanım güvenlik modülü gibi veritabanı sisteminin dışındaki güvenilir bir anahtar deposunda depolamanız gerekir. Bundan sonra sütun şifreleme anahtarları sağlamalı ve her bir anahtarı bir sütun ana anahtarıyla şifrelemelisiniz.
Son olarak, veritabanınızdaki anahtarlar hakkındaki meta verileri kaydedin. Sütun ana anahtarı meta verileri, sütun ana anahtarının konumunu içerir. Sütun şifreleme anahtarı meta verileri, sütun şifreleme anahtarının şifrelenmiş değerini içerir. Veritabanı Altyapısı herhangi bir anahtarı düz metin olarak depolamaz veya kullanmaz.
Always Encrypted anahtarlarını yönetme hakkında daha fazla bilgi için bkz. Always Encrypted için anahtar yönetimine genel bakış.
Korumayı sağlamak için hassas bilgiler içeren belirli veritabanı sütunları için şifreleme ayarlayın. Bunun için şifrelenmiş sütunlarla yeni tablolar oluşturulması veya mevcut sütunların ve verilerin şifrelenmesi gerekebilir. Bir sütun için şifrelemeyi yapılandırırken, şifreleme algoritması, verileri korumak için sütun şifreleme anahtarı ve şifreleme türü hakkındaki ayrıntıları belirtmeniz gerekir. Always Encrypted iki şifreleme türünü destekler:
Belirleyici şifreleme her zaman belirli bir düz metin değeri için aynı şifrelenmiş değeri oluşturur. Belirleyici şifrelemenin kullanılması, şifrelenmiş sütunlarda nokta aramalarına, eşitlik birleşimlerine, gruplandırmalara ve dizin oluşturma işlemlerine olanak tanır. Ancak, özellikle Doğru/Yanlış veya Kuzey/Güney/Doğu/Batı bölgesi gibi küçük bir dizi olası şifrelenmiş değer varsa, yetkisiz kullanıcıların şifrelenmiş sütundaki desenleri inceleyerek şifrelenmiş değerler hakkında bilgi tahmin etmelerine de olanak tanıyabilir.
Rastgele şifreleme , verileri öngörülemez şekilde şifreleyen bir yöntem kullanır. Her özdeş düz metin girişi ayrı bir şifrelenmiş çıkışla sonuçlanmış olur. Bu, rastgele şifrelemenin güvenliğini artırır.
Karşılaştırma işleçlerini, sıralamayı ve şifrelenmiş sütunlarda dizin oluşturmayı kullanarak desen eşleştirme gerçekleştirmek için güvenli kuşatmalarla Always Encrypted'ı benimsemeli ve rastgele şifreleme uygulamalısınız. Always Encrypted (güvenli kuşatmalar olmadan) rastgele şifreleme, şifrelenmiş sütunlarda arama, gruplandırma, dizin oluşturma veya birleştirmeyi desteklemez. Bunun yerine, arama veya gruplandırma amacıyla tasarlanan sütunlar için belirleyici şifrelemenin kullanılması önemlidir. Bu, şifrelenmiş sütunlarda nokta aramaları, eşitlik birleşimleri, gruplandırma ve dizin oluşturma gibi işlemlere olanak tanır.
Veritabanı sisteminin tasarım gereği şifreleme anahtarlarına erişimi olmadığından, herhangi bir sütun şifrelemesi için verilerin veritabanı dışına taşınması ve şifrelenmesi gerekir. Bu, bu şifreleme işleminin uzun sürebileceği ve ağ kesintilerine karşı savunmasız olduğu anlamına gelir. Ayrıca, daha sonra bir sütunu yeniden şifrelemeniz gerekirse (örneğin, şifreleme anahtarını döndürürken veya şifreleme türlerini değiştirirken) aynı zorluklarla yeniden karşılaşırsınız. Always Encrypted'ın güvenli kuşatmalarla kullanılması, verileri veritabanından taşıma gereksinimini ortadan kaldırır. Kapanım güvenilir olduğundan, uygulamanızdaki bir istemci sürücüsü veya Azure Data Studio veya SQL Server Management Studio (SSMS) gibi bir araç şifreleme işlemleri sırasında anahtarları kapanımla güvenli bir şekilde paylaşabilir. Daha sonra, kapanım sütunları yerinde şifreleyebilir veya yeniden şifreleyebilir, bu da bu eylemler için gereken süreyi önemli ölçüde azaltır.
Always Encrypted şifreleme algoritmalarıyla ilgili ayrıntılar için bkz. Always Encrypted şifrelemesi.
SQL araçlarını kullanarak yukarıdaki adımları gerçekleştirebilirsiniz:
- SQL Server Management Studio'u kullanarak Always Encrypted anahtarlarını sağla
- PowerShell kullanarak Always Encrypted'ı yapılandırma
- sqlpackage - Kurulum işlemini otomatik hale getirin
Always Encrypted anahtarların ve korumalı hassas verilerin hiçbir zaman veritabanı ortamına düz metin olarak sunulmadığından emin olmak için, Veritabanı Altyapısı anahtar sağlama ve veri şifreleme veya şifre çözme işlemlerine dahil olamaz. Bu nedenle, Transact-SQL (T-SQL) anahtar sağlama veya şifreleme işlemlerini desteklemez. Aynı nedenle, var olan verileri şifrelemek veya yeniden şifrelemek (farklı bir şifreleme türü veya sütun şifreleme anahtarıyla) veritabanının dışında gerçekleştirilmesi gerekir (SQL araçları bunu otomatikleştirebilir).
Şifrelenmiş bir sütunun tanımını değiştirdikten sonra sp_refresh_parameter_encryption yürüterek nesnenin Always Encrypted meta verilerini güncelleştirin.
Sınırlamalar
Şifrelenmiş sütunlardaki sorgular için aşağıdaki sınırlamalar geçerlidir:
Rastgele şifreleme kullanılarak şifrelenen sütunlarda hesaplamaya izin verilmez. Belirleyici şifreleme, eşitlik karşılaştırmaları içeren aşağıdaki işlemleri destekler- başka hiçbir işleme izin verilmez.
- = (Eşittir) (Transact-SQL) nokta aramalarında.
- IN (Transact-SQL).
- SELECT - GROUP BY- Transact-SQL.
- DISTINCT.
Uyarı
Desen eşleştirmesi gerçekleştirmesi, şifrelenmiş sütunlarda karşılaştırma işleçleri, sıralama ve dizin kullanması gereken uygulamalar için Always Encrypted'ı güvenli kuşatmalarla uygulamanız gerekir.
Düz metin ve şifrelenmiş veriler içeren hesaplamaları tetikleyen sorgu deyimlerine izin verilmez. Örneğin:
- Şifrelenmiş bir sütunu düz metin içeren bir sütun veya sabit değerle karşılaştırma.
- Düz metin sütunundaki verileri şifrelenmiş bir sütuna (veya tersi) UPDATE, BULK INSERT, SELECT INTO veya INSERT..SELECT ile kopyalama.
- Şifrelenmiş sütunlara sabit değerler ekleme.
Bu tür ifadeler aşağıdakine benzer işlenen çakışma hatalarıyla sonuçlanır.
Msg 206, Level 16, State 2, Line 89 Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char
Uygulamaların şifrelenmiş sütunlar için değer sağlamak için sorgu parametrelerini kullanması gerekir. Örneğin, şifrelenmiş sütunlara veri eklerken veya bunları belirleyici şifreleme kullanarak filtrelerken sorgu parametreleri kullanılmalıdır. Şifrelenmiş sütunlara karşılık gelen değişmez değerlerin veya T-SQL değişkenlerinin geçirilmesi desteklenmez. Kullandığınız bir istemci sürücüsüne özgü daha fazla bilgi için bkz. Always Encrypted kullanarak uygulama geliştirme.
Azure Data Studio veya SSMS'de, şifrelenmiş sütunlarla ilişkili değerleri işleyen sorguları yürütmek için Always Encrypted değişkenleri için parametreleştirme uygulamak önemlidir. Bu, şifrelenmiş sütunlara veri ekleme veya bunlara filtre uygulama (belirleyici şifrelemenin kullanıldığı durumlarda) gibi senaryoları içerir.
Şifrelenmiş sütunları hedefleyen tablo değerli parametreler desteklenmez.
Aşağıdaki yan tümceleri kullanan sorgular desteklenmez:
- XML için (SQL Server)
- FOR JSON ile sorgu sonuçlarını JSON olarak biçimlendirme
Always Encrypted, aşağıdaki özelliklere sahip sütunlar için desteklenmez:
- Şu veri türlerinden birini kullanan sütunlar: xml, zaman damgası, satır dönüştürme, görüntü, ntext, metin, sql_variant, hiyerarşi kimliği, coğrafya, geometri, diğer ad, kullanıcı tanımlı türler.
- FILESTREAM sütunları
- IDENTITY özelliğine sahip sütunlar.
- ROWGUIDCOL özelliğine sahip sütunlar.
- İkili kod noktası (_BIN2) harmanlamaları dışında harmanlamalar içeren dize (varchar, char vb.) sütunları.
- Rastgele şifreleme kullanılırken kümelenmiş ve kümelenmemiş dizinler için anahtar olan sütunlar (belirleyici şifreleme kullanan sütunlardaki dizinler desteklenir).
- Tam metin dizinlerinde bulunan sütunlar (Always Encrypted ,Full-Text Arama'yı desteklemez).
- Tablodaki hesaplanan sütunları belirtin.
- Always Encrypted için ifadede desteklenmeyen işlemler gerçekleştirildiğinde, hesaplanan sütunlar tarafından referans edilen sütunlar.
- Seyrek sütunlar kullanın.
- Rastgele şifreleme kullanılırken, istatistikler tarafından başvurulan sütunlar (belirleyici şifreleme de desteklenir).
- Sütunları bölümleme.
- Varsayılan kısıtlamaları olan sütunlar.
- Rastgele şifreleme kullanıldığında, benzersiz kısıtlamalar tarafından başvurulan sütunlar (belirleyici şifreleme desteklenir).
- Rastgele şifreleme kullanılırken birincil anahtar sütunları (belirlenimci şifreleme desteklenir).
- Rastgele veya belirleyici şifreleme kullanılırken, başvurulan ve başvuruda bulunan sütunlar farklı anahtarlar veya algoritmalar kullanıyorsa, yabancı anahtar kısıtlamalarındaki sütunlara başvurma.
- Kontrol kısıtlamaları tarafından başvurulan sütunlar.
- Değişiklik verisi yakalama kullanılarak yakalanan/izlenen sütunlar.
- Değişiklik izlemesi olan tablolardaki birincil anahtar sütunları.
- Maskelenmiş sütunlar ( Dinamik veri maskeleme kullanılarak).
- Bellek için iyileştirilmiş bir tablodaki bir sütuna yerel olarak derlenmiş bir modülde başvurulduğunda, şifreleme bu tablodaki sütunların hiçbirine uygulanamaz.
- Esnetme veritabanı tablolarındaki sütunlar. (Always Encrypted ile şifrelenmiş sütunları olan tablolar Stretch için etkinleştirilebilir.)
Önemli
Stretch Database, SQL Server 2022 (16.x) ve Azure SQL Veritabanı'nda kullanım dışıdır. Bu özellik, Veritabanı Altyapısı'nın gelecekteki bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.
- Dış (PolyBase) tablolarındaki sütunlar (not: Aynı sorguda dış tablolar ile şifrelenmiş sütunların kullanımı desteklenir).
Aşağıdaki özellikler şifrelenmiş sütunlarda çalışmaz:
- SQL Server Çoğaltma (işlemsel, birleştirme veya anlık çoğaltma). Always On kullanılabilirlik grubu da dahil olmak üzere fiziksel çoğaltma özellikleri desteklenir.
- Dağıtılmış sorgular (bağlı sunucular, OPENROWSET (Transact-SQL), OPENDATASOURCE (Transact-SQL)).
- Farklı veritabanlarından şifrelenmiş sütunlarda birleştirmeler gerçekleştiren Veritabanları Arası Sorgular.
Always Encrypted Transact-SQL başvurusu
Always Encrypted aşağıdaki Transact-SQL deyimlerini, sistem kataloğu görünümlerini, sistem saklı yordamlarını ve izinleri kullanır.
Açıklamalar
DDL Deyimi | Açıklama |
---|---|
SÜTUN ANA ANAHTAR OLUŞTUR | Veritabanında bir sütun ana anahtarı meta veri nesnesi oluşturur |
DROP COLUMN MASTER KEY | Veritabanından bir sütun ana anahtarını bırakır. |
SÜTUN ŞİFRELEME ANAHTARI OLUŞTUR | Bir sütun şifreleme anahtarı meta veri nesnesi oluşturur. |
SÜTUN ŞİFRELEME ANAHTARINI DEĞİŞTİR | Veritabanındaki bir sütun şifreleme anahtarını değiştirir ve şifrelenmiş bir değer ekler veya bırakır. |
SÜTUN ŞİFRELEME ANAHTARINI SİL | Veritabanından bir sütun şifreleme anahtarı bırakır. |
TABLO OLUŞTURMA (İLE ŞIFRELENMIŞ) | Şifreleme sütunlarını belirtir |
Sistem kataloğu görünümleri ve saklı yordamlar
Sistem kataloğu görünümleri ve saklı yordamlar | Açıklama |
---|---|
sys.sütun_şifreleme_anahtarları | Sütun şifreleme anahtarları (CEK' ler) hakkında bilgi verir |
sys.column_encryption_key_values | Sütun şifreleme anahtarlarının (CEK) şifrelenmiş değerleri hakkında bilgi verir |
sys.column_master_keys | Her veritabanı ana anahtarı için bir satır döndürür |
sp_refresh_parameter_encryption | Belirtilen şemaya bağlı olmayan saklı yordamın, kullanıcı tanımlı işlevin, görünümün, DML tetikleyicisinin, veritabanı düzeyinde DDL tetikleyicisinin veya sunucu düzeyinde DDL tetikleyicisinin parametreleri için Always Encrypted meta verilerini güncelleştirir |
sp_describe_parameter_encryption | Always Encrypted özelliği kullanılarak korunan veritabanı sütunlarına karşılık gelen parametreleri belirlemek için belirtilen Transact-SQL deyimini ve parametrelerini analiz eder. |
Ayrıca her sütun için depolanan şifreleme meta verileri hakkında bilgi için sys.columns dosyasına bakın.
Veritabanı izinleri
Always Encrypted için dört veritabanı izni vardır.
Sistem kataloğu görünümleri ve saklı yordamlar | Açıklama |
---|---|
HERHANGI BIR SÜTUN ANA ANAHTARıNı DEĞIŞTIRME | Sütun ana anahtarı meta verilerini oluşturmak ve silmek için gereklidir. |
HERHANGİ BİR SÜTUN ŞİFRELEME ANAHTARINI DEĞİŞTİR | Sütun şifreleme anahtarı meta verilerini oluşturmak ve silmek için gereklidir. |
HERHANGI BIR SÜTUN ANA ANAHTAR TANıMıNı GÖRÜNTÜLEME | Şifrelenmiş sütunları sorgulamak için gereken sütun ana anahtarı meta verilerine erişmek ve bunu okumak için gereklidir. |
HERHANGI BIR SÜTUN ŞIFRELEME ANAHTARı TANıMıNı GÖRÜNTÜLEME | Şifrelenmiş sütunları sorgulamak için gereken sütun şifreleme anahtarı meta verilerine erişmek ve bunu okumak için gereklidir. |
Aşağıdaki tabloda, yaygın eylemler için gereken izinler özetlemektedir.
Senaryo | HERHANGI BIR SÜTUN ANA ANAHTARıNı DEĞIŞTIRME | HERHANGI BIR SÜTUN ŞİFRELEME ANAHTARINI ALTER ETME | HERHANGI BIR SÜTUN ANA ANAHTAR TANıMıNı GÖRÜNTÜLEME | HERHANGI BIR SÜTUN ŞIFRELEME ANAHTARı TANıMıNı GÖRÜNTÜLEME |
---|---|---|---|---|
Anahtar yönetimi (veritabanında anahtar meta verilerini oluşturma/değiştirme/gözden geçirme) | X | X | X | X |
Şifrelenmiş sütunları sorgulama | X | X |
Dikkat edilmesi gereken önemli hususlar
Şifrelenmiş sütunlar seçilirken, kullanıcının sütun ana anahtarlarına (anahtar depolarında) izni olmasa bile, sütunları koruma amacıyla HERHANGİ BİR SÜTUN ANAHTAR TANIMI ve SÜTUN ŞİFRELEME ANAHTAR TANIMINI GÖRÜNTÜLE izinleri gereklidir ve bu izinler düz metin erişim denemelerini önler.
SQL Server'da hem SÜTUN ANA ANAHTAR TANIMINI GÖRÜNTÜLE hem de SÜTUN ŞİFRELEME ANAHTAR TANIMINI GÖRÜNTÜLE izinleri varsayılan olarak public sabit veritabanı rolüne verilir. Veritabanı yöneticisi genel rol izinlerini iptal etmeyi (veya reddetmeyi) ve daha kısıtlı denetim uygulamak için belirli rollere veya kullanıcılara vermeyi seçebilir.
SQL Veritabanı'nda HERHANGİ Bİr SÜTUN ANA ANAHTAR TANIMI GÖRÜNTÜLE ve HERHANGİ Bİr SÜTUN ŞIFRELEME ANAHTAR TANIMI GÖRÜNTÜLE izinleri varsayılan olarak ortak sabit veritabanı rolüne verilmez. Bu, mevcut bazı eski araçların (DacFx'in eski sürümlerini kullanarak) düzgün çalışmasını sağlar. Şifrelenmiş sütunlarla çalışmak için (şifreleri çözülmezse bile), veritabanı yöneticisinin HERHANGİ Bİr SÜTUN ANA ANAHTAR TANIMI GÖRÜNTÜLE ve SÜTUN ŞIFRELEME ANAHTAR TANIMINA BAK izinlerini açıkça vermesi gerekir.