Aracılığıyla paylaş


Öğretici: Rastgele şifreleme kullanarak kapanım özellikli sütunlarda dizin oluşturma ve kullanma

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

Bu öğretici, güvenli ortamlar ile desteklenen rastgele şifrelemeyi kullanarak kapanım özellikli sütunlarda dizin oluşturma ve kullanma yöntemleriniAlways Encrypted'da açıklar. Size şunu gösterir:

  • Sütunu koruyan anahtarlara (sütun ana anahtarı ve sütun şifreleme anahtarı) erişiminiz olduğunda dizin oluşturma.
  • Sütunu koruyan anahtarlara erişiminiz olmadığında nasıl dizin oluşturursunuz.

Önkoşullar

SQL Server Management Studio'nun (SSMS) en son sürümünü yükleyin.

Bu öğreticideki aşağıdaki adımları uygulamadan önce Güvenli kuşatmalarla Always Encrypted kullanmaya başlama öğreticilerinden birini tamamladığınızdan emin olun.

1. Adım: Veritabanınızda Hızlandırılmış Veritabanı Kurtarma'yı (ADR) etkinleştirme

Not

Bu adım yalnızca SQL Server için geçerlidir. Azure SQL Veritabanı veya Azure SQL Yönetilen Örneği kullanıyorsanız bu adımı atlayın. ADR, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği'nde her zaman etkindir.

Microsoft, rastgele şifreleme kullanarak kapanım özellikli bir sütunda ilk dizini oluşturmadan önce veritabanınızda ADR'yi etkinleştirmenizi kesinlikle önerir. Güvenli kuşatmalarla Always EncryptedVeritabanı Kurtarma bölümüne bakın.

  1. Önceki öğreticide kullandığınız tüm SSMS örneklerini kapatın. SSMS'nin kapatılması, açtığınız ve ADR'yi etkinleştirmek için gereken veritabanı bağlantılarını kapatır.

  2. Yeni bir SSMS örneği açın ve veritabanı bağlantısı için Always Encrypted etkinleştirilmeden SQL Server örneğine sysadmin olarak bağlanın.

    1. SSMS'i başlatın.
    2. Sunucuya Bağlan iletişim kutusunda sunucu adınızı belirtin, bir kimlik doğrulama yöntemi seçin ve kimlik bilgilerinizi belirtin.
    3. Seçenekler >> sekmesini seçin ve Her Zaman Şifrelenmiş sekmesini seçin.
    4. Enable Always Encrypted (sütun şifrelemesi) onay kutusunun seçili olmadığından emin olun.
    5. seçinbağlan.
  3. AdR'yi etkinleştirmek için yeni bir sorgu penceresi açın ve aşağıdaki deyimi yürütür.

    ALTER DATABASE ContosoHR SET ACCELERATED_DATABASE_RECOVERY = ON;
    

2. Adım: Rol ayrımı olmadan dizin oluşturma ve test

Bu adımda şifrelenmiş bir sütunda dizin oluşturacak ve test edeceğiz. Hem DBA'nın rollerini üstlenen, veritabanını yöneten hem de anahtarlara erişimi olan veri sahibini üstlenen ve verileri koruyan tek bir kullanıcı olarak hareket edeceksiniz.

  1. Yeni bir SSMS örneği açın ve veritabanı bağlantısı için Always Encrypted etkin SQL Server örneğine bağlanın.

    1. SSMS'nin yeni bir örneğini başlatın.
    2. Sunucuya Bağlan iletişim kutusunda sunucu adınızı belirtin, bir kimlik doğrulama yöntemi seçin ve kimlik bilgilerinizi belirtin.
    3. Seçenekler >> sekmesini seçin ve Her Zaman Şifrelenmiş sekmesini seçin.
    4. Onay kutularını seçin: Always Encrypted'ı Etkinleştir (sütun şifrelemesi) ve Güvenli Kuşatmaları Etkinleştir
    5. Veritabanınız için kanıtlama kullanıyorsanız kanıtlama hizmetinizi (Konak Koruyucu Hizmeti veya Microsoft Azure Kanıtlama) temsil eden Kapanım Kanıtlama Protokolü değerini seçin ve kapanım kanıtlama URL'sini doldurun. Aksi takdirde Yok'a tıklayın.
    6. seçinbağlan.
    7. Always Encrypted sorguları için parametreleştirmeyi etkinleştirmeniz istenirse, etkinleştirseçin.
  2. Always Encrypted için Parametreleştirme'yi etkinleştirmeniz istenmediyse, etkin olup olmadığını doğrulayın.

    1. SSMS'nin ana menüsünden Araçları'ı seçin.
    2. Seçenekler'i seçin....
    3. Sorgu Yürütme>SQL Server>Gelişmişgidin.
    4. Always Encrypted için "Parametreleştirmeyi Etkinleştir" seçeneğinin işaretli olduğundan emin olun.
    5. Tamamseçin.
  3. Bir sorgu penceresi açın ve Employees tablosundaki LastName sütununu şifrelemek üzere aşağıdaki ifadeleri yürütün. Sonraki adımlarda bu sütunda bir dizin oluşturacak ve kullanacaksınız.

    ALTER TABLE [HR].[Employees]
    ALTER COLUMN [LastName] [nvarchar](50) 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
    
  4. LastName sütununda bir dizin oluşturun. Always Encrypted etkinleştirildiğinden, veritabanına bağlı olduğunuzda, SSMS içindeki istemci sürücüsü, dizini oluşturmak için gereken CEK1 (sütun şifreleme anahtarı, LastName sütununu koruyan) anahtarını şeffaf bir şekilde enklava sağlar.

    CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
    INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
    GO
    
  5. LastName sütununda zengin bir sorgu çalıştırın ve sorguyu yürütürken SQL Server'ın dizini kullandığını doğrulayın.

    1. Aynı veya yeni bir sorgu penceresinde, araç çubuğundaki Canlı Sorgu İstatistikleri ekle düğmesinin açık emin olun.

    2. Aşağıdaki sorguyu yürütür.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Canlı Sorgu İstatistikleri sekmesinde sorgunun dizini kullandığını gözlemleyin.

3. Adım: Rol ayrımı ile dizin oluşturma

Bu adımda, şifrelenmiş bir sütunda iki farklı kullanıcıymış gibi davranarak bir dizin oluşturacaksınız. Bir kullanıcı, dizin oluşturması gereken ancak anahtarlara erişimi olmayan bir DBA'dır. Diğer kullanıcı, anahtarlara erişimi olan bir veri sahibidir.

  1. Always Encrypted etkinleştirilmeden, SSMS örneğini kullanarak aşağıdaki ifadeyi yürütüp LastName sütunundan dizini kaldırın.

    DROP INDEX IX_LastName ON [HR].[Employees]; 
    GO
    
  2. Veri sahibi (veya anahtarlara erişimi olan bir uygulama) olarak davranarak, kapanım içindeki önbelleği CEK1ile doldurun.

    Not

    2. Adım: Rol ayrımı olmadan dizin oluşturma ve testsonra SQL Server örneğinizi yeniden başlatmadıysanız, CEK1 önbellekte zaten bulunduğundan bu adım yedeklidir. Bir veri sahibinin, kapalı alanda zaten mevcut değilse, bir anahtarı kapalı alana nasıl sağlayabileceğini göstermek için ekledik.

    1. Always Encrypted etkinleştirilmiş SSMS örneğinde, aşağıdaki ifadeleri bir sorgu penceresinde yürütün. deyimi, tüm kapanım özellikli sütun şifreleme anahtarlarını kapanıma gönderir. Ayrıntılar için bkz. sp_enclave_send_keys.

      EXEC sp_enclave_send_keys;
      GO
      
    2. Yukarıdaki saklı yordamı yürütmeye alternatif olarak, LastName sütununa yönelik kapanım kullanan bir DML sorgusu çalıştırabilirsiniz. Bu işlem, bölgeyi yalnızca CEK1ile doldurur.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
  3. DBA olarak davranarak dizini oluşturun.

    1. Always Encrypted özelliği etkin olmadan SSMS örneğinde aşağıdaki ifadeleri sorgu penceresinde yürütün.

      CREATE INDEX IX_LastName ON [HR].[Employees] ([LastName])
      INCLUDE ([EmployeeID], [FirstName], [SSN], [Salary]);
      GO
      
  4. Veri sahibi olarak, LastName sütununda zengin bir sorgu çalıştırın ve SORGUyu yürütürken SQL Server'ın dizini kullandığını doğrulayın.

    1. SSMS örneğinde, Always Encrypted etkinleştirildiyse, mevcut bir sorgu penceresini seçin veya yeni bir sorgu penceresi açın ve araç çubuğundaki Canlı Sorgu İstatistiklerini Ekle düğmesinin açık olduğundan emin olun.

    2. Aşağıdaki sorguyu yürütür.

      DECLARE @LastNamePrefix NVARCHAR(50) = 'Aber%';
      SELECT * FROM [HR].[Employees] WHERE [LastName] LIKE @LastNamePrefix;
      GO
      
    3. Canlı Sorgu İstatistiklerisorgunun dizini kullandığını gözlemleyin.

Sonraki adımlar

Ayrıca bkz.