Aracılığıyla paylaş


Azure Data Studio ile Always Encrypted kullanarak sütunları sorgulama

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen Örneği

Bu makalede Azure Data Studio kullanılarak Always Encrypted ile şifrelenmiş sütunların nasıl sorgulandığı açıklanmaktadır. Azure Data Studio ile şunları yapabilirsiniz:

  • Şifrelenmiş sütunlarda depolanan şifre metni değerlerini alın.
  • Şifrelenmiş sütunlarda depolanan düz metin değerlerini alın.
  • Şifrelenmiş sütunları hedefleyen düz metin değerleri gönderin (örneğin, INSERT veya UPDATE deyimlerinde ve SELECT deyimlerindeki WHERE yan tümcelerinin arama parametresi olarak).

Şifrelenmiş sütunlarda depolanan şifreleme metni değerlerini alma

Bu bölümde şifrelenmiş sütunlarda depolanan verilerin şifre metni olarak nasıl alındığı açıklanmaktadır.

Adımlar

  1. Şifreleme metni değerlerini alan bir SELECT sorgu çalıştıracağınız sorgu penceresi için veritabanı bağlantısı için Always Encrypted'ı devre dışı bırakmış olduğunuzdan emin olun. Aşağıda, veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma hakkında bilgi bulabilirsiniz.
  2. SELECT sorgunuzu çalıştırın. Şifrelenmiş sütunlardan alınan tüm veriler ikili (şifrelenmiş) değerler olarak döndürülür.

Örnek

SSN Patients tablosunda şifrelenmiş bir sütun olduğu varsayıldığında, veritabanı bağlantısı için Always Encrypted devre dışı bırakılmışsa aşağıda gösterilen sorgu ikili şifreleme metni değerlerini alır.

SELECT * FROM [dbo].[Patients] sorgusunun ve sonuçlarının, ikili şifre yazısı değerleri olarak gösterilen ekran görüntüsü.

Şifrelenmiş sütunlarda depolanan düz metin değerlerini alma

Bu bölümde şifrelenmiş sütunlarda depolanan verilerin şifre metni olarak nasıl alındığı açıklanmaktadır.

Önkoşullar

  • Azure Data Studio sürüm 17.1 veya üzeri.
  • Sorgunuzu çalıştırdığınız sütunları koruyan ana sütunlara ve anahtarlara ilişkin meta verilere erişiminiz olmalıdır. Ayrıntılar için, aşağıdaki Şifrelenmiş sütunları sorgulama izinlerine bakınız.
  • Sütun anahtarlarınız Azure Key Vault veya Windows Sertifika Deposu'nda depolanmalıdır. Azure Data Studio diğer anahtar depolarını desteklemez ve Azure Key Vault'ta yönetilen HSM'lerde depolanan sütun ana anahtarlarını desteklemez.

Adımlar

  1. Verilerinizi almak ve şifresini çözmek için bir SELECT sorgu çalıştıracağınız sorgu penceresi için veritabanı bağlantısı için Always Encrypted'ı etkinleştirin. Bu, SQL Server için Microsoft .NET Veri Sağlayıcısı'na (Azure Data Studio tarafından kullanılır) sorgu sonuç kümesindeki şifrelenmiş sütunların şifresini çözmesini ister. Aşağıdaki Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma bakın.
  2. SELECT sorgunuzu çalıştırın. Şifrelenmiş sütunlardan alınan tüm veriler, özgün veri türlerinin düz metin değerleri olarak döndürülür.

Örnek

SSN'nin Patients tablosunda şifrelenmiş bir sütun olduğu varsayıldığında, veritabanı bağlantısı için Always Encrypted etkinse ve SSN sütunu için yapılandırılmış sütun ana anahtarına erişiminiz varsa, aşağıda gösterilen sorgu düz metin değerleri döndürür.

SELECT * FROM [dbo].[Patients] sorgusunun ekran görüntüsü ve düz metin değerleri olarak gösterilen sorgu sonuçları.

Şifrelenmiş sütunları hedefleyen düz metin değerleri gönderme

Bu bölümde, şifrelenmiş bir sütunu hedefleyen değerler gönderen bir sorguyu çalıştırma işlemi açıklanmaktadır. Örneğin, şifrelenmiş bir sütunda depolanan bir değere göre ekleyen, güncelleştiren veya filtreleyen bir sorgu:

Önkoşullar

  • Azure Data Studio sürüm 18.1 veya üzeri.
  • Sorgunuzu çalıştırdığınız sütunları koruyan ana sütunlara ve anahtarlara ilişkin meta verilere erişiminiz olmalıdır. Ayrıntılar için aşağıdaki Şifrelenmiş sütunları sorgulama izinleri bakın.
  • Sütun anahtarlarınız Azure Key Vault ya da Windows Sertifika Deposu'nda saklanmalıdır. Azure Data Studio diğer anahtar depolarını desteklemez ve Azure Key Vault'ta yönetilen HSM'lerde depolanan sütun ana anahtarlarını desteklemez.

Adımlar

  1. Verilerinizi almak ve şifresini çözmek için bir SELECT sorgu çalıştıracağınız sorgu penceresi için veritabanı bağlantısı için Always Encrypted'ı etkinleştirin. Bu SQL Server için Microsoft .NET Veri Sağlayıcısı'na (Azure Data Studio tarafından kullanılır) şifrelenmiş sütunları hedefleyen sorgu parametrelerini şifrelemesini ve şifrelenmiş sütunlardan alınan sonuçların şifresini çözmesini ister. Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakmaya aşağıdaki ve numarasına bakın.
  2. Sorgu penceresi için Always Encrypted için Parametreleştirmeyi etkinleştirin. Ayrıntılar için aşağıdaki Always Encrypted Parametreleştirme bölümüne bakın.
  3. Bir Transact-SQL değişkeni tanımlayın ve veritabanına göndermek (ekleme, güncelleştirme veya filtreleme için) istediğiniz bir değerle başlatın.
  4. Transact-SQL değişkeninin değerini veritabanına göndererek sorgunuzu çalıştırın. Azure Data Studio değişkeni bir sorgu parametresine dönüştürür ve veritabanına göndermeden önce değerini şifreler.

Örnek

SSN Patients tablosunda şifrelenmiş bir char(11) sütunu olduğu varsayıldığında, aşağıdaki betik SSN sütununda '795-73-9838' içeren bir satır bulmaya çalışır. Veritabanı bağlantısı için Always Encrypted etkinse, sorgu penceresi için Always Encrypted için Parametreleştirme etkinleştirilirse ve SSN sütunu için yapılandırılmış sütun ana anahtarına erişiminiz varsa sonuçlar döndürülür.

DECLARE <span class= @SSN char(11) = '795-73-9838' SELECT * FROM [dbo].[Patients] WHERE [SSN] = @SSN sorgusunun ve sorgu sonuçlarının ekran görüntüsü." />

Şifrelenmiş sütunları sorgulama izinleri

Şifreli sütunlarda, şifreli metinlerdeki verileri almak da dahil olmak üzere herhangi bir sorgu çalıştırmak için, veritabanında VIEW ANY COLUMN MASTER KEY DEFINITION ve VIEW ANY COLUMN ENCRYPTION KEY DEFINITION izinlerine ihtiyacınız vardır.

Yukarıdaki izinlere ek olarak, sorgu sonuçlarının şifresini çözmek veya herhangi bir sorgu parametresini şifrelemek için (Transact-SQL değişkenleri parametreleştirilerek üretilen), hedef sütunları koruyan sütun ana anahtarına erişmek ve bu anahtarı kullanmak için anahtar deposu izinlerine de ihtiyacınız vardır. Anahtar deposu izinleri hakkında ayrıntılı bilgi için Always Encrypted için sütun ana anahtarları oluşturma ve depolama gidin ve anahtar deponuzla ilgili bir bölüm bulun.

Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma

Azure Data Studio'daki bir veritabanına bağlandığınızda, veritabanı bağlantısı için Always Encrypted'ı etkinleştirebilir veya devre dışı bırakabilirsiniz. Varsayılan olarak Always Encrypted devre dışıdır.

Veritabanı bağlantısında Always Encrypted'ı etkinleştirmek, Azure Data Studio tarafından kullanılan Microsoft .NET Veri Sağlayıcısı'nın SQL Server üzerindeetiketiyle belirtilen işlemleri saydam bir şekilde gerçekleştirmeyi denemesini sağlar.

  • Şifrelenmiş sütunlardan alınan ve sorgu sonuçlarında döndürülen tüm değerlerin şifresini çöz.
  • Şifrelenmiş veritabanı sütunlarını hedefleyen parametreli Transact-SQL değişkenlerinin değerlerini şifreleyin.

Bir bağlantı için Always Encrypted'ı etkinleştirmezseniz, SQL Server için Microsoft .NET Veri Sağlayıcısı sorgu parametrelerini şifrelemeyi veya sonuçların şifresini çözmeyi denemez.

Veritabanına bağlanırken Always Encrypted'ı etkinleştirebilir veya devre dışı bırakabilirsiniz. Veritabanına bağlanma hakkında genel bilgi için bkz:

Always Encrypted'ı etkinleştirmek (devre dışı bırakmak) için:

  1. Bağlantı iletişim kutusunda Gelişmiş...öğesine tıklayın.
  2. Bağlantı için Always Encrypted'ı etkinleştirmek için Always Encrypted alanını Etkinleştirildişeklinde ayarlayın. Always Encrypted'ı devre dışı bırakmak için, Always Encrypted alanının değerini boş bırakın veya Devre Dışıolarak ayarlayın.
  3. Tamam tıklayın Gelişmiş Özelliklerkapatmak için.

Bağlantı için Always Encrypted'ı etkinleştirme adımlarını gösteren kısa video.

güvenli yerleşimlerleAlways Encrypted kullanırken, sunucu tarafı güvenli yerleşimden yararlanan deyimleri çalıştırmak için, bağlantı için Always Encrypted özelliğini etkinleştirmenin yanı sıra bir yerleşim doğrulama protokolü ve bir yerleşim doğrulama URL'si belirtmeniz gerekir. Ayrıntılı bilgi için bkz. Azure Data Studio'da kuşatmaları kullanarak T-SQL deyimlerini çalıştırmak için önkoşullar.

Bahşiş

Always Encrypted'ın var olan bir sorgu penceresinde etkinleştirilmesi ve devre dışı bırakılması arasında geçiş yapmak için, Bağlantısını Kes'e tıklayın ve Bağlan'e tıklayın ve Always Encrypted alanının istenen değerleriyle veritabanınıza yeniden bağlanmak için yukarıdaki adımları tamamlayın.

Not

Sorgu penceresindeki Bağlantıyı Değiştir düğmesi şu anda Always Encrypted'ın etkinleştirilmesi ve devre dışı bırakılması arasında geçiş desteği sunmamaktadır.

Always Encrypted için parametreleştirme

Always Encrypted için parametreleştirme, Azure Data Studio 18.1 ve sonraki sürümlerinde Transact-SQL değişkenleri otomatik olarak sorgu parametrelerine (sqlparameter Sınıfı örnekleri) dönüştüren bir özelliktir. Bu, alttaki SQL Server için Microsoft .NET Veri Sağlayıcısı'nın şifrelenmiş sütunları hedefleyen verileri algılayarak bu verileri veritabanına göndermeden önce şifrelemesini sağlar.

Parametreleme olmadan, SQL Server için Microsoft .NET Veri Sağlayıcısı, sorgu penceresinde oluşturduğunuz her deyimi parametrelenmemiş bir sorgu olarak geçirir. Sorgu şifrelenmiş sütunları hedefleyen değişmez değerler veya Transact-SQL değişkenleri içeriyorsa, SQL Server için .NET Framework Veri Sağlayıcısı sorguyu veritabanına göndermeden önce bunları algılayamaz ve şifreleyemez. Sonuç olarak, tür uyuşmazlığı (düz metin değişmez Transact-SQL değişkeni ile şifrelenmiş sütun arasındaki) nedeniyle sorgu başarısız olur. Örneğin, SSN sütununun şifrelendiğinden aşağıdaki sorgu parametreleme olmadan başarısız olur.

DECLARE @SSN CHAR(11) = '795-73-9838'
SELECT * FROM [dbo].[Patients]
WHERE [SSN] = @SSN

Always Encrypted için Parametreleştirmeyi etkinleştirme ve devre dışı bırakma

Always Encrypted için parametreleştirme varsayılan olarak devre dışıdır.

Always Encrypted için Parametreleştirmeyi etkinleştirmek/devre dışı bırakmak için:

  1. Dosya>Tercihleri>Ayarlar'i seçin (Mac'teKod>Tercihleri>Ayarlar).
  2. Veri>Microsoft SQL Serverbölümüne gidin.
  3. Always Encrypted için Parametreleştirmeyi Etkinleştirseçin veya seçimini kaldırın.
  4. Ayarları penceresini kapatın.

Always Encrypted için Parametreleştirme'yi etkinleştirmeyi/devre dışı bırakmayı gösteren kısa video.

Not belirtisi

Always Encrypted için parametreleştirme yalnızca Always Encrypted etkin veritabanı bağlantılarını kullanan bir sorguda çalışır (bkz. Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma). Sorgu penceresi Always Encrypted etkinleştirilmemiş bir veritabanı bağlantısı kullanıyorsa hiçbir Transact-SQL değişkeni parametrelendirilmeyecektir.

Always Encrypted için Parametreleştirme nasıl çalışır?

Sorgu penceresi için hem Always Encrypted için Parametreleştirme hem de Always Encrypted etkinleştirildiyse, Azure Data Studio aşağıdaki önkoşulları karşılayan Transact-SQL değişkenlerini parametreleştirmeyi dener:

  • Aynı deyimde (satır içi başlatma) bildirilir ve başlatılır. Ayrı SET deyimleri kullanılarak bildirilen değişkenler parametrelendirilmeyecek.
  • Tek bir değişmez değer kullanılarak başlatılır. tüm işleçler veya işlevler dahil olmak üzere ifadeler kullanılarak başlatılan değişkenler parametrelendirilmeyecektir.

Aşağıda Azure Data Studio'nun parametreleştireceği değişkenlere örnekler verilmiştir.

DECLARE @SSN char(11) = '795-73-9838';
   
DECLARE @BirthDate date = '19990104';
DECLARE @Salary money = $30000;

Azure Data Studio'nun parametreleştirmeyi deneymeyeceği değişkenlere birkaç örnek aşağıda verilmiştir:

DECLARE @Name nvarchar(50); --Initialization separate from declaration
SET @Name = 'Abel';

DECLARE @StartDate date = GETDATE(); -- a function used instead of a literal

DECLARE @NewSalary money = @Salary * 1.1; -- an expression used instead of a literal

Parametreleştirme girişiminin başarılı olması için:

  • Parametrik olarak başlatılacak değişkenin sabit türü, değişken bildirimindeki türle eşleşmelidir.
  • Değişkenin bildirilen türü bir tarih veya saat türüyse, değişkenin aşağıdaki ISO 8601 uyumlu biçimlerden biri kullanılarak bir dize kullanılarak başlatılması gerekir.

Parametreleştirme hatalarına neden olacak Transact-SQL değişken bildirimlerinin örnekleri aşağıda verilmiştir:

DECLARE @BirthDate date = '01/04/1999' -- unsupported date format   
   
DECLARE @Number int = 1.1 -- the type of the literal does not match the type of the variable   

Azure Data Studio, hangi değişkenlerin başarıyla parametrelendirilebileceğini ve hangi parametreleştirme girişimlerinin başarısız olduğunu (ve nedenini) size bildirmek için IntelliSense kullanır.

Başarıyla parametrelendirilebilen bir değişkenin bildirimi, sorgu penceresinde altı çizili bir bilgi iletisiyle işaretlenir. Bilgi iletisi altı çizili olarak işaretlenmiş bir bildirim deyiminin üzerine gelirseniz, sonuçta elde edilen SqlParameter Sınıfı nesnesinin anahtar özelliklerinin değerleri de dahil olmak üzere parametreleştirme işleminin sonuçlarını içeren iletiyi görürsünüz (değişken şuna eşlenir: SqlDbType, Boyut, Duyarlık, Ölçek, , SqlValue). Ayrıca, Sorunları görünümünde başarıyla parametrelendirilen tüm değişkenlerin tam listesini de görebilirsiniz. Sorunlar görünümünü açmak için Görünüm>Sorunlarıseçeneğini belirleyin.

Azure Data Studio bir değişkeni parametreleştirmeye çalıştıysa ancak parametreleştirme başarısız olduysa, değişkenin bildirimi bir hata altı çizili olarak işaretlenir. Bir hata altı çizili olarak işaretlenmiş bildirim ifadesinin üzerine geldiğinizde hata hakkında bilgi alırsınız. Ayrıca, Sorunlar görünümünde tüm değişkenler için parametreleştirme hatalarının tam listesini de görebilirsiniz.

Not

Always Encrypted, tür dönüştürmelerinin sınırlı bir alt kümesini desteklediğinden, çoğu durumda Transact-SQL değişkeninin veri türünün hedeflenen hedef veritabanı sütununun türüyle aynı olması gerekir. Örneğin, Patients tablosundaki SSN sütununun türünün char(11)olduğunu varsayarsak, nchar(11)olan @SSN değişkeninin türü sütunun türüyle eşleşmediğinden aşağıdaki sorgu başarısız olur.

DECLARE @SSN nchar(11) = '795-73-9838'
SELECT * FROM [dbo].[Patients]
WHERE [SSN] = @SSN;
Msg 402, Level 16, State 2, Line 5   
The data types char(11) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Clinic') collation_name = 'Latin1_General_BIN2' 
and nchar(11) encrypted with (encryption_type = 'DETERMINISTIC', 
encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_Auto1', 
column_encryption_key_database_name = 'Clinic') are incompatible in the equal to operator.

Not

Parametreleştirme olmadan, tür dönüştürmeleri de dahil olmak üzere sorgunun tamamı SQL Server/Azure SQL Veritabanı içinde işlenir. Parametreleştirme etkinleştirildiğinde, bazı tür dönüştürmeleri Azure Data Studio'da SQL Server için Microsoft .NET Veri Sağlayıcısı tarafından gerçekleştirilir. Microsoft .NET tür sistemi ile SQL Server tür sistemi (örneğin, float gibi bazı türlerin farklı duyarlığı) arasındaki farklar nedeniyle, parametreleştirme etkinken yürütülen bir sorgu parametreleştirme etkinleştirilmeden yürütülen sorgudan farklı sonuçlar üretebilir.

Sonraki adımlar

Ayrıca bkz.