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. İstemci uygulamalarında hassas verileri şifreleyerek şifreleme anahtarlarının Veritabanı Altyapısı'na hiçbir zaman sunulmamasını sağlayabilirsiniz. Bu yaklaşım, 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' ın, sıralama ve filtreleme de dahil olmak üzere şifrelenmiş verilerde işlem gerçekleştirememe gibi belirli kısıtlamaları vardır (belirleyici şifreleme kullanan nokta aramalar hariç). Bu sınırlama, bazı sorgu ve uygulamaların Always Encrypted ile uyumlu olmayabileceği 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. İstemcide 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 gereken uygulamalar için karşılaştırma işleçlerini kullanın, şifrelenmiş sütunlarda sıralama ve dizin oluşturun, Always Encrypted'ı güvenli kuşatmalarla uygulayın.
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ı.
Sütun şifreleme anahtarı, şifrelenmiş bir sütundaki verileri şifreler. 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ışında güvenilen bir anahtar deposunda depolayın. Bu adımdan sonra sütun şifreleme anahtarları sağlayın ve her anahtarı bir sütun ana anahtarıyla şifreleyin.
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. Bu adım, şifrelenmiş sütunlarla yeni tablolar oluşturmayı veya mevcut sütunları ve verileri şifrelemeyi gerektirebilir. 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ı belirtin. 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 şifrelemeyi kullanarak, şifrelenmiş sütunlarda nokta aramaları, eşitlik birleşimleri, gruplandırma ve dizin oluşturma işlemleri gerçekleştirebilirsiniz. Ancak yetkisiz kullanıcılar, özellikle Doğru/Yanlış veya Kuzey/Güney/Doğu/Batı bölgesi gibi küçük bir dizi olası şifrelenmiş değer varsa şifrelenmiş sütundaki desenleri inceleyerek şifrelenmiş değerler hakkında bilgi tahmin edebilir.
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 yöntem, rastgele şifrelemenin güvenliğini artırır.
Şifrelenmiş sütunlarda karşılaştırma işleçleri, sıralama ve dizin oluşturma kullanarak desen eşleştirmesi gerçekleştirmek için güvenli kuşatmalarla Always Encrypted'ı benimseyin ve rastgele şifreleme uygulayın. 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 şifreleme kullanmanız gerekir. Bu şifreleme türü, şifreli sütunlarda nokta aramaları, eşitlik birleşimleri, gruplandırma ve dizin oluşturma gibi işlemlere olanak tanır.
Tasarım gereği veritabanı sisteminin şifreleme anahtarlarına erişimi olmadığından, herhangi bir sütun şifrelemesi için verilerin veritabanı dışına taşınması ve şifrelenmesi gerekir. Şifreleme işlemi uzun sürebilir ve ağ kesintilerine karşı savunmasızdır. 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 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 önceki 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 ile şifrelenmiş sütunlarda hesaplama gerçekleştiremezsiniz. 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 gereken uygulamalar için karşılaştırma işleçlerini kullanın, şifrelenmiş sütunlarda sıralama ve dizin oluşturun, Always Encrypted'ı güvenli kuşatmalarla uygulayın.
Düz metin ve şifrelenmiş veriler içeren hesaplamaları tetikleyen sorgu deyimlerini kullanamazsınız. Ö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 başka bir yolla)
UPDATEkopyalama ,BULK INSERT,SELECT INTOveyaINSERT..SELECT. - Ş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 charUygulamaları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 parametrelerini kullanın. Ş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.
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 gereksinim, ş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, timestamp, rowversion, image, ntext, text, sql_variant, hierarchyid, geography, geometry, vector, alias, user-defined types.
- FILESTREAM sütunları.
- IDENTITY özelliğine sahip sütunlar.
- ROWGUIDCOL özelliğine sahip sütunlar.
-
İkili kod noktası () harmanlamaları dışında harmanlamalar içeren dize (
_BIN2, char ve diğer) sütunlar. Harmanlama, veritabanının varsayılan harmanlamasından farklı olmamalıdır. - 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 ifade desteklenmeyen işlemler gerçekleştirdiğinde, hesaplanan sütunlar tarafından başvurulan 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 veya izlenen sütunlar.
-
Değişiklik izlemesi olan tablolardaki birincil anahtar sütunları.
- Dinamik veri maskeleme kullanılarak maskelenen sütunlar.
-
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 grupları 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 | Description |
|---|---|
| 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 | Description |
|---|---|
| sys.sütun_şifreleme_anahtarları | Sütun şifreleme anahtarları (CEK' ler) hakkında bilgi verir |
| sys.sütun_şifreleme_anahtar_değerleri | 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. |
Her sütun için depolanan şifreleme meta verileri hakkında bilgi için bkz. sys.columns.
Veritabanı izinleri
Always Encrypted dört veritabanı izni kullanır.
| Sistem kataloğu görünümleri ve saklı yordamlar | Description |
|---|---|
ALTER ANY COLUMN MASTER KEY |
Sütun ana anahtarı meta verilerini oluşturmak ve silmek için gereklidir. |
ALTER ANY COLUMN ENCRYPTION KEY |
Sütun şifreleme anahtarı meta verilerini oluşturmak ve silmek için gereklidir. |
VIEW ANY COLUMN MASTER KEY DEFINITION |
Şifrelenmiş sütunları sorgulamak için gereken sütun ana anahtarı meta verilerine erişmek ve bunu okumak için gereklidir. |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
Ş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 | ALTER ANY COLUMN MASTER KEY |
ALTER ANY COLUMN ENCRYPTION KEY |
VIEW ANY COLUMN MASTER KEY DEFINITION |
VIEW ANY COLUMN ENCRYPTION KEY DEFINITION |
|---|---|---|---|---|
| Anahtar yönetimi (veritabanında anahtar meta verilerini oluşturma, değiştirme veya gözden geçirme) | X | X | X | X |
| Şifrelenmiş sütunları sorgulama | X | X |
Dikkat edilmesi gereken önemli hususlar
Şifrelenmiş sütunlar seçilirken
VIEW ANY COLUMN MASTER KEY DEFINITIONveVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONizinleri gereklidir. Bu izinler, kullanıcının anahtar depolarındaki sütun ana anahtarları için izni olmasa bile sütunları korur ve düz metin erişimi engeller.SQL Server'da genel sabit veritabanı rolü varsayılan olarak hem hem de
VIEW ANY COLUMN MASTER KEY DEFINITIONVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONizinleri verir. Veritabanı yöneticisi bu ortak rol izinlerini iptal etmeyi veya reddetmeyi seçebilir ve bunları belirli rollere veya kullanıcılara daha kısıtlı denetim gerçekleştirmeleri için verebilir.SQL Veritabanı'nda, public sabit veritabanı rolü varsayılan olarak
VIEW ANY COLUMN MASTER KEY DEFINITIONveVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONizinlerini vermez. Bu değişiklik, DacFx'in eski sürümlerini kullanan bazı eski araçların düzgün çalışmasını sağlar. Şifrelenmiş sütunlarla çalışmak için (bunların şifresini çözmese bile), veritabanı yöneticisininVIEW ANY COLUMN MASTER KEY DEFINITIONveVIEW ANY COLUMN ENCRYPTION KEY DEFINITIONizinlerini açıkça vermesi gerekir.