Aracılığıyla paylaş


Transact-SQL ile sütun şifrelemeyi yerinde yapılandırma

Şunlar için geçerlidir: Windows Azure SQL Veritabanı'nda SQL Server 2019 (15.x) ve sonraki sürümleri

Bu makalede, ALTER TABLE Deyimi/ALTER COLUMN ifadeleriyle güvenli bölgeler kullanılarak Always Encrypted ile sütunlarda yerinde kriptografik işlemlerin nasıl gerçekleştirileceği açıklanmaktadır. Yerinde şifreleme ve genel önkoşullar hakkında temel bilgiler için bkz. Güvenli kapsayıcılar ile Always Encrypted kullanarak anında sütun şifrelemeyi yapılandırma.

ALTER TABLE veya ALTER COLUMN deyimiyle bir sütun için hedef şifreleme yapılandırmasını ayarlayabilirsiniz. Deyimini yürüttüğünüzde, sunucu tarafındaki güvenli alan, deyimdeki sütun tanımında belirtilen geçerli ve hedef şifreleme yapılandırmasına bağlı olarak, sütunda depolanan verileri şifreler, yeniden şifreler veya şifresini çözer.

  • Sütun şu anda şifrelenmemişse, sütun tanımında ENCRYPTED WITH yan tümcesini belirtirseniz şifrelenir.
  • Sütun şu anda şifrelenmişse, sütun tanımında ENCRYPTED WITH yan tümcesini belirtmezseniz, sütun şifresi çözülür (düz metin sütununa dönüştürülür).
  • Sütun şu anda şifrelenmişse, ENCRYPTED WITH yan tümcesini belirtirseniz ve belirtilen sütun şifreleme türü veya sütun şifreleme anahtarı şu anda kullanılan şifreleme türünden veya sütun şifreleme anahtarından farklıysa yeniden şifrelenir.

Not

Tek bir ALTER TABLE/ALTER COLUMN deyiminde, sütunu NULL veya NOT NULLolarak değiştirmek ya da harmanlamayı değiştirmek dışında şifreleme işlemlerini diğer değişikliklerle birleştiremezsiniz. Örneğin, bir sütunu şifreleyemez VE tek bir ALTER TABLE/ALTER COLUMN Transact-SQL deyimindeki sütunun veri türünü değiştiremezsiniz. İki ayrı deyim kullanın.

Sunucu tarafı güvenli kapanım alanı kullanan herhangi bir sorgu, yerinde şifrelemeyi tetikleyen bir ALTER TABLE/ALTER COLUMN deyimini, Always Encrypted ve enclave hesaplamaları etkinleştirilmiş bir bağlantı üzerinden göndermelidir.

Bu makalenin geri kalanında SQL Server Management Studio'daki ALTER TABLE/ALTER COLUMN deyimi kullanılarak yerinde şifrelemenin nasıl tetikleneceği açıklanır. Alternatif olarak, Azure Data Studio'dan veya uygulamanızdan ALTER TABLE/ALTER COLUMN yayımlayabilirsiniz.

Not

Şu anda SqlServer PowerShell modülünde invoke-Sqlcmd cmdlet'ini ve sqlcmd yerinde şifreleme işlemleri için ALTER TABLE/ALTER COLUMN kullanılmasını desteklemez.

SSMS'de Transact-SQL ile yerinde şifreleme gerçekleştirme

Önkoşullar

Adımlar

  1. Veritabanı bağlantısında Always Encrypted ve enclave hesaplamaları etkinleştirilmiş olarak bir sorgu penceresi açın. Ayrıntılar için bkz. Veritabanı bağlantısı için Always Encrypted'ı etkinleştirme ve devre dışı bırakma.

  2. Sorgu penceresinde şifrelemek, şifresini çözmek veya yeniden şifrelemek istediğiniz bir sütun için hedef şifreleme yapılandırmasını belirterek ALTER TABLE/ALTER COLUMN deyimini çalıştırın. Sütunu şifreliyor veya yeniden şifreliyorsanız, ENCRYPTED WITH yan tümcesini kullanın. Sütununuz bir dize sütunuysa (örneğin, char, varchar, nchar, nvarchar), harmanlamayı bin2 harmanlaması olarak da değiştirmeniz gerekebilir.

    Not

    Sütun ana anahtarınız Azure Key Vault'ta depolanıyorsa Azure'da oturum açmanız istenebilir.

  3. Tabloya erişen tüm toplu işlemler ve saklı yordamlar için plan önbelleğini temizleyerek parametre şifreleme bilgilerini yenileyin.

    ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
    

    Not

    Etkilenen sorgunun planını önbellekten kaldırmazsanız, şifrelemeden sonra sorgunun ilk yürütmesi başarısız olabilir.

    Geçici sorgu performansında düşüşe neden olabileceğinden plan önbelleğini dikkatlice temizlemek için ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE veya DBCC FREEPROCCACHE kullanın. Önbelleği temizlemenin olumsuz etkisini en aza indirmek için, yalnızca etkilenen sorgular için planları seçmeli olarak kaldırabilirsiniz.

  4. sys.parameters içinde kalıcı olan ve sütunları şifreleyerek geçersiz kılınmış olabilecek her modülün parametrelerine (saklı yordam, işlev, görünüm, tetikleyici) ait meta verileri güncelleştirmek için sp_refresh_parameter_encryption çağırın.

Örnekler

Yerinde sütun şifreleme

Aşağıdaki örnekte şu varsayımlar yer alır:

  • CEK1, kapanım özellikli bir sütun şifreleme anahtarıdır.
  • SSN sütunu düz metindir ve şu anda Latin1, BIN2 olmayan harmanlama gibi varsayılan veritabanı harmanlamasını kullanır (örneğin, Latin1_General_CI_AI_KS_WS).

Bu ifade, SSN sütununu belirleyici şifreleme ve enclave destekli sütun şifreleme anahtarını yerinde kullanarak şifreler. Ayrıca, karşılık gelen (aynı kod sayfasında) BIN2 harmanlaması ile varsayılan veritabanı harmanlamasının üzerine yazar.

İşlem çevrimiçi gerçekleştirilir (ONLINE = ON). Ayrıca sorgu planlarını yeniden oluşturan ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHEçağrısının tablo şeması değişikliğinden etkilendiğini unutmayın.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1], ENCRYPTION_TYPE = Deterministic, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL
WITH
(ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Şifreleme türünü değiştirmek için sütunu yerinde yeniden şifreleme

Aşağıdaki örnekte şu varsayımlar yer alır:

  • SSN sütunu, CEK1belirleyici şifreleme ve kapanım özellikli bir sütun şifreleme anahtarı kullanılarak şifrelenir.
  • Geçerli sıralama, sütun düzeyinde ayarlanmış olarak Latin1_General_BIN2.

Aşağıdaki deyim, rastgele şifreleme ve aynı anahtarı (CEK1) kullanarak sütunu yeniden şifreler

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK1]
, ENCRYPTION_TYPE = Randomized
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Sütun şifreleme anahtarını döndürmek amacıyla sütunu yerinde yeniden şifreleyin.

Aşağıdaki örnekte şu varsayımlar yer alır:

  • SSN sütunu rastgele şifreleme ve CEK1kapanım özellikli bir sütun şifreleme anahtarı kullanılarak şifrelenir.
  • CEK2, güvenlik bölgesi etkin bir sütun şifreleme anahtarıdır (CEK1'den farklıdır).
  • Geçerli sıralama, sütun düzeyinde ayarlanmış olarak Latin1_General_BIN2.

Aşağıdaki ifade, sütunu CEK2ile yeniden şifreleme yapar.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK2]
, ENCRYPTION_TYPE = Randomized
, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL;
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Bir sütunun şifresini yerinde çözme

Aşağıdaki örnekte şu varsayımlar yer alır:

  • SSN sütunu, kapanım özellikli bir sütun şifreleme anahtarı kullanılarak şifrelenir.
  • Geçerli sıralama, sütun düzeyinde ayarlanmış olarak Latin1_General_BIN2.

Aşağıdaki ifade sütunun şifresini çözer ve sıralama düzenini değiştirmeden tutar. Alternatif olarak harmanlamayı değiştirmeyi de seçebilirsiniz. Örneğin, harmanlamayı aynı deyimde BIN2 olmayan bir harmanlama olarak değiştirin.

ALTER TABLE [dbo].[Employees]
ALTER COLUMN [SSN] [char](11) COLLATE Latin1_General_BIN2
WITH (ONLINE = ON);
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE;
GO

Sonraki adımlar

Ayrıca bkz.