Aracılığıyla paylaş


Always Encrypted (Her Zaman Şifreli)

Şunlar için geçerlidir:SQL ServerAzure 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:

  1. 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ış.

  2. 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:

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:

    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 INTOveya INSERT..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 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 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:

  • Always Encrypted, aşağıdaki özelliklere sahip sütunlar için desteklenmez:

    Ö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:

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 DEFINITION ve VIEW ANY COLUMN ENCRYPTION KEY DEFINITION izinleri 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 DEFINITION izinleri 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 DEFINITION ve VIEW ANY COLUMN ENCRYPTION KEY DEFINITION izinlerini 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öneticisinin VIEW ANY COLUMN MASTER KEY DEFINITION ve VIEW ANY COLUMN ENCRYPTION KEY DEFINITION izinlerini açıkça vermesi gerekir.

Sonraki adım