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
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
veyaUPDATE
deyimlerinde veSELECT
deyimlerindekiWHERE
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
- Ş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. -
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.
Ş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
- 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. -
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.
Ş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
- 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. - 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.
- 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.
- 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.
@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:
- Hızlı Başlangıç: Azure Data Studio kullanarak SQL Server'a bağlanma ve sorgulama
- Hızlı Başlangıç: Azure SQL veritabanı bağlanmak ve sorgulamak için Azure Data Studio'yu kullanma
Always Encrypted'ı etkinleştirmek (devre dışı bırakmak) için:
- Bağlantı iletişim kutusunda Gelişmiş...öğesine tıklayın.
- 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.
- Tamam tıklayın Gelişmiş Özelliklerkapatmak için.
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:
- Dosya>Tercihleri>Ayarlar'i seçin (Mac'teKod>Tercihleri>Ayarlar).
- Veri>Microsoft SQL Serverbölümüne gidin.
- Always Encrypted için Parametreleştirmeyi Etkinleştirseçin veya seçimini kaldırın.
- Ayarları penceresini kapatın.
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
- Always Encrypted kullanarak uygulama geliştirme