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, SQL Server Management Studio (SSMS)kullanılarak Always Encrypted ile şifrelenmiş sütunların nasıl sorgulandığı açıklanmaktadır. SSMS 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).
Not
Azure Key Vault'ta yönetilen HSM depolanan sütun ana anahtarlarını kullanmak için SSMS 18.9 veya sonraki bir sürüm gerekir.
Şifrelenmiş sütunlarda depolanan şifreleme metni değerlerini alma
Şifrelenmiş sütunlarda depolanan verilerin şifre metnini alan SELECT sorgularının çalıştırılması (verilerin şifresini çözmeden) verileri koruyan sütun ana anahtarlarına erişiminiz olmasını gerektirmez. Şifrelenmiş bir sütundaki değerleri SSMS'de şifre metni olarak almak için:
- Sorgunuzu çalıştırdığınız sütunları koruyan anahtarlar hakkındaki meta verilere erişebildiğinizden emin olun. Gerçek sütun ana anahtarlarına erişebilmeniz gerekmez, ancak veritabanındaki sütun ana anahtarı ve sütun şifreleme anahtarı meta veri nesnelerini görüntülemek için veritabanı düzeyinde izinlere ihtiyacınız vardır. Ayrıntılar için aşağıdaki Şifrelenmiş sütunları sorgulama izinlerine bakınız.
- Şifreleme metni değerlerini alan bir
SELECT
sorgusu çalıştırabileceğiniz Sorgu Düzenleyicisi penceresinin veritabanı bağlantısı için Always Encrypted'ı devre dışı bırakmış olduğunuzdan emin olun. Aşağıda, bir veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma hakkında ve numaralı bölümlere bakın. -
SELECT
sorgunuzu çalıştırın. Şifrelenmiş sütunlardan alınan tüm veriler ikili (şifrelenmiş) değerler olarak döndürülür.
Şifreli metin örneği alınıyor
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
Şifrelenmiş bir sütundaki değerleri düz metin olarak almak için (değerlerin şifresini çözmek için):
- Sorgunuzu çalıştırdığınız sütunları koruyan anahtarlar hakkındaki meta verilere ve ana sütun anahtarlara erişebildiğinizden emin olun. Ayrıntılar için aşağıdaki Şifrelenmiş sütunları sorgulama izinlerine bakabilirsiniz.
- Verilerinizi alan ve şifresini çözen bir
SELECT
sorgu çalıştırabileceğiniz Sorgu Düzenleyicisi penceresi için Veritabanı bağlantısı için Always Encrypted'ı etkinleştirdiğinizden emin olun. Bu, SQL Server için .NET Framework Veri Sağlayıcısı'na (SSMS tarafından kullanılır) sorgu sonuç kümesindeki şifrelenmiş sütunların şifresini çözmesini ister. Aşağıda, numaralı "Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma" konusuna 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.
Düz metin örneği alınıyor
SSN'nin Patients
tablosunda şifrelenmiş bir char(11)
sütunu olduğu varsayıldığında, veritabanı bağlantısı için Always Encrypted etkinleştirildiyse 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
Şifrelenmiş bir sütunu hedefleyen bir değer gönderen bir sorguyu yürütmek için, örneğin şifrelenmiş bir sütunda depolanan bir değere göre ekleme, güncelleştirme veya filtreleme gerçekleştirme:
Sorgunuzun çalıştığı sütunları koruyan anahtarlar için ana sütun anahtarlara ve meta verilere erişebildiğinizden emin olun. Daha fazla bilgi için aşağıdaki Şifrelenmiş sütunları sorgulama izinleri bakın.
Verilerinizi alan ve şifresini çözen bir
SELECT
sorgu çalıştırabileceğiniz Sorgu Düzenleyicisi penceresi için Veritabanı bağlantısı için Always Encrypted'ı etkinleştirdiğinizden emin olun. Bu, SQL Server için .NET Framework Veri Sağlayıcısı'na (SSMS tarafından kullanılır) sorgu sonuç kümesindeki şifrelenmiş sütunların şifresini çözmesini ister. Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakmaya aşağıdaki ve bölümünde bakın.Sorgu Düzenleyicisi penceresi için 'Always Encrypted' özelliğinde parametreleştirmenin etkin olduğundan emin olun. (En az SSMS sürüm 17.0 gerektirir.) Veritabanına eklemek, güncellemek veya ölçüt olarak filtrelemek istediğiniz bir değerle Transact-SQL değişkenini bildirin ve başlatın. Ayrıntılar için aşağıdaki Always Encrypted Parametreleştirme bölümüne bakın.
Transact-SQL değişkeninin değerini veritabanına göndererek sorgunuzu çalıştırın. SSMS değişkeni bir sorgu parametresine dönüştürür ve veritabanına göndermeden önce değerini şifreler.
Örnek
SSN
'nin 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 ve veritabanı bağlantısı için "Always Encrypted" etkin, Sorgu Düzenleyici penceresi için "Always Encrypted" parametreleştirmesi etkin, ve SSN
sütunu için yapılandırılmış sütun anahtarına erişiminiz varsa, LastName
sütununun değerini döndürür.
Şifrelenmiş sütunları sorgulama izinleri
Şifre metnindeki verileri alan sorgular da dahil olmak üzere şifrelenmiş sütunlarda sorgu çalıştırmak için veritabanındaki VIEW ANY COLUMN MASTER KEY DEFINITION
ve VIEW ANY COLUMN ENCRYPTION KEY DEFINITION
izinlerine sahip olmanız gerekir.
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 anahtarları oluşturma ve depolama bölümünü inceleyin ve anahtar deponuzla ilgili bir bölümü bulun.
Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma
SSMS'deki 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ı için Always Encrypted'ın etkinleştirilmesi, SQL Server Management Studio tarafından kullanılan SQL Server için .NET Framework Veri Sağlayıcısının saydam bir şekilde şunları denemesini gerektirir:
- Ş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, SSMS'nin kullandığı SQL Server için .NET Framework Veri Sağlayıcısı sorgu parametrelerini şifrelemeyi veya sonuçların şifresini çözmeyi denemez.
Yeni bir bağlantı oluşturduğunuzda veya Sunucuya Bağlan iletişim kutusunu kullanarak var olan bir bağlantıyı değiştirdiğinizde Always Encrypted'ı etkinleştirebilir veya devre dışı bırakabilirsiniz.
Always Encrypted'ı etkinleştirmek (devre dışı bırakmak) için:
- Sunucuya Bağlan iletişim kutusunu açın (ayrıntılar için bkz. SQL Server örneğine bağlanma ).
- Seçenekseçin.
- Always Encrypted sekmesini seçin. Always Encrypted'ı etkinleştirmek için Always Encrypted'ı etkinleştir (sütun şifreleme)seçin. Always Encrypted'ı devre dışı bırakmak için Always Encrypted'ı Etkinleştir (sütun şifrelemesi) seçili olmadığından emin olun.
- seçin,bağlan.
İpucu
Mevcut Sorgu Düzenleyicisi penceresinde Always Encrypted'ın etkinleştirilmesi ve devre dışı bırakılması arasında geçiş yapmak için:
- Sorgu Düzenleyicisi penceresinde herhangi bir yere sağ tıklayın.
- Bağlantı>Bağlantıyı Değiştir ...öğesini seçin. Bu işlem, Sorgu Düzenleyicisi penceresinin geçerli bağlantısı için Sunucuya Bağlan diyalog penceresi açar.
- Yukarıdaki adımları izleyerek Always Encrypted'ı etkinleştirin veya devre dışı bırakın ve Bağlanöğesine tıklayın.
Not
Always Encrypted ilegüvenli kapanımlar kullanırken, sunucu tarafı güvenli bir kapanımdan yararlanan deyimleri çalıştırmak için bkz. Güvenli kapanımlarıkullanarak Transact-SQL deyimlerini çalıştırma.
Always Encrypted için parametreleştirme
Always Encrypted için parametreleştirme, SQL Server Management Studio'da Transact-SQL değişkenleri otomatik olarak sorgu parametrelerine (SqlParameter Sınıfıörnekleri) dönüştüren bir özelliktir. (En az SSMS sürüm 17.0 gerektirir.) Bu, SQL Server için temel alınan .NET Framework Veri Sağlayıcısının şifrelenmiş sütunları hedefleyen verileri algılamasını ve bu verileri veritabanına göndermeden önce şifrelemesini sağlar.
Parametreleme olmadan, .NET Framework Veri Sağlayıcısı, Sorgu Düzenleyicisi'nde yazdığınız her deyimi, parametrelenmemiş bir sorgu olarak iletir. 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 NCHAR(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.
Geçerli Sorgu Düzenleyicisi penceresinde Always Encrypted için Parametreleştirmeyi etkinleştirmek/devre dışı bırakmak için:
- Ana menüden sorgu seçin.
- Sorgu Seçenekleri...seçin.
- Yürütme>Gelişmişbölümüne gidin.
- Always Encrypted için Parametreleştirmeyi Etkinleştir'ı seçin veya kaldırın.
- 'yı seçinOK .
Gelecekteki Sorgu Düzenleyicisi pencerelerine yönelik Always Encrypted için Parametreleştirmeyi etkinleştirmek/devre dışı bırakmak için:
- Ana menüden Araçları'ni seçin.
- Seçenekler'i seçin....
- Sorgu Yürütme>SQL Server>Gelişmişgidin.
- Always Encrypted için Parametreleştirmeyi Etkinleştirseçin veya seçimini kaldırın.
- Tamamseçin.
Sorgu Düzenleyicisi penceresinde Always Encrypted etkin bir veritabanı bağlantısı kullanan bir sorgu yürütürseniz ancak Sorgu Düzenleyicisi penceresi için parametreleme etkinleştirilmediyse, bunu etkinleştirmeniz istenir.
Not
Always Encrypted için parametreleştirme yalnızca Always Encrypted etkin veritabanı bağlantılarını kullanan Sorgu Düzenleyicisi pencerelerinde çalışır (bkz. Always Encryptediçin Parametreleştirmeyi etkinleştirme ve devre dışı bırakma ). Sorgu Düzenleyicisi penceresinde Always Encrypted etkinleştirilmemiş bir veritabanı bağlantısı kullanılıyorsa hiçbir Transact-SQL değişkeni parametrelendirilmeyecektir.
Always Encrypted için Parametreleştirme nasıl çalışır?
Sorgu Düzenleyicisi penceresi için hem Always Encrypted için Parametreleştirme hem de veritabanı bağlantısındaki Always Encrypted davranışı etkinleştirilirse, SQL Server Management Studio aşağıdaki önkoşul koşulları karşılayan Transact-SQL değişkenleri parametreleştirmeyi dener:
- "Aynı ifadede bildirilip (satır içi başlatma) 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, SQL Server Management Studio'nun parametreleştireceği değişken örnekleri verilmiştir.
DECLARE @SSN char(11) = '795-73-9838';
DECLARE @BirthDate date = '19990104';
DECLARE @Salary money = $30000;
Sql Server Management Studio'nun parametreleştirmeye çalışmayacağından birkaç değişken örneği 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:
- Parametre olarak başlatılacak değişkenin sabitinin 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 ISO 8601 ile uyumluaşağıdaki 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
SQL Server Management 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 Düzenleyicisi'nde bir uyarı altı çizili olarak işaretlenir. Bir uyarı alt çizgisiyle işaretlenmiş bir bildirimin üzerine geldiğinizde, parametreleştirme işleminin sonuçlarını, elde edilen SqlParameter nesnesinin anahtar özelliklerinin değerleri de dahil olmak üzere (değişkene eşlendiği): SqlDbType, Boyut, Hassasiyet, Ölçek, SqlValuegöreceksiniz. Ayrıca, Hata Listesi görünümünün Uyarı sekmesinde başarıyla parametreleştirilmiş tüm değişkenlerin tam listesini de görebilirsiniz. Hata Listesi görünümünü açmak için, ana menüden Görünüm'ni seçin ve ardından hata listesi seçin.
SQL Server Management 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. Hata altı çizili olarak işaretlenmiş bildirim üzerine geldiğinizde hata ile ilgili sonuçları alırsınız. Ayrıca, Hata Listesi görünümünün Hata sekmesinde tüm değişkenler için parametreleştirme hatalarının tam listesini de görebilirsiniz. Hata Listesi görünümünü açmak için, ana menüden Görünüm'ni seçin ve ardından hata listesi seçin.
Aşağıdaki ekran görüntüsünde altı değişken bildirimi örneği gösterilmektedir. SQL Server Management Studio ilk üç değişkeni başarıyla parametrelendirdi. Son üç değişken parametreleştirme için önkoşul koşulları karşılamadı ve bu nedenle SQL Server Management Studio bunları parametreleştirmeye çalışmadı (bildirimleri hiçbir şekilde işaretlenmedi).
Aşağıdaki başka bir örnek, parametreleştirme için önkoşul koşulları karşılayan iki değişkeni gösterir, ancak değişkenler yanlış başlatıldığı için parametreleştirme girişimi başarısız olmuştur.
Not
Always Encrypted, tür dönüştürmelerinin sınırlı bir alt kümesini desteklediğinden, çoğu durumda bir Transact-SQL değişkeninin veri türünün hedeflediği veritabanı sütununun türüyle aynı olması gerekmektedir. Ö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 SQL Server Management Studio'da .NET Framework tarafından gerçekleştirilir. .NET Framework 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