SQL şifreleme özellikleriyle SQL Server Connector'ı kullanın

Şunlar için geçerlidir: SQL Server

Azure Key Vault tarafından korunan asimetrik anahtar kullanan yaygın SQL Server şifreleme faaliyetleri aşağıdaki üç alana ayrılır:

  • Azure Key Vault'tan asimetrik bir anahtar kullanılarak şeffaf veri şifreleme (TDE).
  • Anahtar kasasından asimetrik bir anahtar kullanarak yedeklemeleri şifrelemek.
  • Anahtar kasasından asimetrik bir anahtar kullanılarak sütun seviyesinde şifreleme.

Bu makaledeki adımları uygulamadan önce Set up Saydam Veri Şifrelemesi with Azure Key Vault for SQL Server içindeki 1'den 4'e kadar olan adımları tamamlayın.

Uyarı

1.0.0.440 ve daha eski sürümler yenisiyle değiştirildi ve üretim ortamlarında artık desteklenmiyor. 1.0.1.0 veya daha sonrasına yükseltin. Microsoft İndirme Merkezi'dan güncel sürümü indirin ve SQL Server Connector bakım ve sorun giderme bölümündeki "SQL Server Connector'ı Yükseltme" bölümündeki talimatları takip edin.

Uyarı

Microsoft Entra Id daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

Azure Key Vault'tan asimetrik bir anahtar kullanılarak şeffaf veri şifreleme

SQL Server için Azure Key Vault ile Saydam Veri Şifrelemesini Ayarlama başlıklı makaledeki 1-4. adımları tamamladıktan sonra, veritabanı şifreleme anahtarını TDE ile şifrelemek için Azure Key Vault anahtarını kullanın. PowerShell kullanılarak anahtarları döndürmek hakkında daha fazla bilgi için PowerShell kullanarak Saydam Veri Şifrelemesi (TDE) koruyucusunu döndürme bölümüne bakınız.

Önemli

Anahtar yenileme işleminden sonra anahtarın önceki sürümlerini silmeyin. Anahtar değişimi yapıldığında, bazı veriler hâlâ önceki anahtarlarla şifrelenmiş olur; örneğin eski veritabanı yedeklemeleri, yedeklenmiş günlük dosyaları ve işlem günlüğü dosyaları.

Kimlik bilgileri ve bir oturum açma oluşturmanız ve veritabanındaki verileri ve günlükleri şifreleyen bir veritabanı şifreleme anahtarı oluşturmanız gerekir. Bir veritabanını şifrelemek için veritabanı üzerinde CONTROL izni gereklidir. Aşağıdaki grafik, Azure Key Vault kullandığınızda şifreleme anahtarının hiyerarşisini göstermektedir.

Azure Key Vault kullanılırken şifreleme anahtarının hiyerarşisini gösteren diyagram.

  1. TDE için kullanılacak Veritabanı Altyapısı için bir SQL Server kimlik bilgisi oluşturma

    Database Engine, veritabanı yüklenirken anahtar kasasına erişmek için Microsoft Entra uygulama kimlik bilgilerini kullanır. Verdiğiniz anahtar kasası izinlerini sınırlamak için, Database Engine için, Adım 1: Kimlik doğrulama modelini ayarlayın bölümünde açıklandığı gibi başka bir İstemci Kimliği ve Sır oluşturun.

    Aşağıdaki Transact-SQL betiğini aşağıdaki yollarla değiştirin:

    • IDENTITY argümanını (ContosoDevKeyVault), Azure Key Vault'unuzu işaret edecek şekilde değiştirin.

      • Global Azure kullanıyorsanız, IDENTITY bağımsız değişkenini 2. Adım: Anahtar kasası oluşturma bölümünden Azure Key Vault’unuzun adıyla değiştirin.
      • Özel bir Azure bulutu kullanıyorsanız, örneğin Azure Kamu, 21Vianet tarafından işletilen Azure veya Azure Almanya, IDENTITY argümanını PowerShell kullanarak anahtar kasası ve anahtar oluşturma bölümünde döndürülen Vault URI'si ile değiştirin. Anahtar kasası URI'sine "https://" eklemeyin.
    • Argümanın SECRET ilk kısmını, Adım 1: Kimlik doğrulama modelini ayarlayın bölümündeki Microsoft Entra uygulamasının İstemci Kimliği ile değiştirin. Bu örnekte İstemci Kimliği şeklindedir EF5C8E094D2A4A769998D93440D8115D.

      Önemli

      İstemci Kimliği'nden kısa çizgileri kaldırmanız gerekir.

    • Argümanın ikinci kısmını 1. adımdaki SECRETClient Secret ile tamamla. Bu örnekte, İstemci SırrıReplaceWithAADClientSecret.

    • SECRET argümanı için son dize, tire içermeyen uzun bir harf ve sayı dizisidir.

    USE master;  
    CREATE CREDENTIAL Azure_EKM_TDE_cred   
        WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
        -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
        SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplaceWithAADClientSecret'   
    FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;  
    
  2. TDE için Veritabanı Altyapısına yönelik bir SQL Server oturumu oluşturun

    Bir SQL Server girişi oluşturun ve 1. adım'dan kimlik bilgilerini ona ekleyin. Bu Transact-SQL örnek, daha önce içeri aktarılan anahtarın aynısını kullanır.

    USE master;  
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it loads a database   
    -- encrypted by TDE.  
    CREATE LOGIN TDE_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY;  
    GO   
    
    -- Alter the TDE Login to add the credential for use by the   
    -- Database Engine to access the key vault  
    ALTER LOGIN TDE_Login   
    ADD CREDENTIAL Azure_EKM_TDE_cred ;  
    GO  
    
  3. Veritabanı şifreleme anahtarını (DEK) oluşturun

    DEK, veritabanı örneğindeki verilerinizi ve günlük dosyalarınızı şifreler ve kendisi de Azure Key Vault asimetrik anahtarı tarafından şifrelenir. DEK'i, SQL Server'ın desteklediği herhangi bir algoritma veya anahtar uzunluğuyla oluşturabilirsiniz.

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. TDE'yi aç

    -- Alter the database to enable transparent data encryption.  
    ALTER DATABASE ContosoDatabase   
    SET ENCRYPTION ON;  
    GO  
    

    Management Studio kullanarak, Nesne Gezgini ile veritabanınıza bağlanarak TDE'nin açık olduğunu doğrulayın. Veritabanınıza sağ tıklayın, Görevler'e işaret edin ve ardından Veritabanı Şifrelemesini Yönet'i seçin.

    >

    Veritabanı Şifrelemesini Yönet iletişim kutusunda TDE'nin açık olduğunu ve DEK'yi hangi asimetrik anahtarın şifrelediğini onaylayın.

    Veritabanı Şifrelemesini Ayarla seçeneğinin seçili olduğu ve Şimdi TDE'nin açık olduğu sarı bir başlık bulunan Veritabanı Şifrelemesini Yönet iletişim kutusunun ekran görüntüsü.

    Alternatif olarak, aşağıdaki Transact-SQL betiğini yürütebilirsiniz. 3 şifreleme durumu şifrelenmiş bir veritabanını gösterir.

    USE MASTER  
    SELECT * FROM sys.asymmetric_keys  
    
    -- Check which databases are encrypted using TDE  
    SELECT d.name, dek.encryption_state   
    FROM sys.dm_database_encryption_keys AS dek  
    JOIN sys.databases AS d  
         ON dek.database_id = d.database_id;  
    

    Uyarı

    Herhangi tempdb bir veritabanı TDE'yi etkinleştirildiğinde veritabanı otomatik olarak şifrelenir.

Anahtar kasasından asimetrik bir anahtar kullanarak yedeklemeleri şifrelemek

Şifrelenmiş yedeklemeler SQL Server 2014 (12.x) ile başlayarak desteklenir. Aşağıdaki örnek, anahtar kasadaki asimetrik anahtarın koruduğu bir veri şifreleme anahtarıyla şifrelenmiş bir yedek oluşturur ve geri getirir.

Database Engine, veritabanı yüklenirken anahtar kasasına erişmek için Microsoft Entra uygulama kimlik bilgilerini kullanır. Verdiğiniz anahtar kasası izinlerini sınırlamak için, Database Engine için, Adım 1: Kimlik doğrulama modelini ayarlama bölümünde açıklandığı gibi başka bir İstemci Kimliği ve Sır oluşturun.

  1. Yedek şifreleme için Database Engine için bir SQL Server kimlik bilgisi oluşturun

    Aşağıdaki Transact-SQL betiğini aşağıdaki yollarla değiştirin:

    • IDENTITY argümanını (ContosoDevKeyVault), Azure Key Vault'unuzu işaret edecek şekilde değiştirin.

      • Global Azure kullanıyorsanız, IDENTITY bağımsız değişkenini 2. Adım: Anahtar kasası oluşturma bölümünden Azure Key Vault’unuzun adıyla değiştirin.
      • Özel bir Azure bulutu kullanıyorsanız, örneğin Azure Kamu, 21Vianet tarafından işletilen Microsoft Azure veya Azure Almanya, IDENTITYPowerShell kullanarak anahtar kasası ve anahtar oluşturma bölümünde döndürülen Vault URI'si ile argümanı değiştirin. Anahtar kasası URI'sine "https://" eklemeyin.
    • Argümanın SECRET ilk kısmını, Adım 1: Kimlik doğrulama modelini kurun bölümündeki Microsoft Entra uygulamasının İstemci Kimliği ile değiştirin. Bu örnekte İstemci Kimliği şeklindedir EF5C8E094D2A4A769998D93440D8115D.

      Önemli

      İstemci Kimliği'nden kısa çizgileri kaldırmanız gerekir.

    • Argümanın ikinci kısmını SECRETClient Secret ile 1. adımdaki tamamla. Bu örnekte, İstemci SırrıReplace-With-AAD-Client-Secretşudur. SECRET bağımsız değişkeni için son dize, tire içermeyen uzun bir harf ve sayı dizisidir.

      USE master;  
      
      CREATE CREDENTIAL Azure_EKM_Backup_cred   
          WITH IDENTITY = 'ContosoDevKeyVault', -- for global Azure
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.usgovcloudapi.net', -- for Azure Government
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.azure.cn', -- for Microsoft Azure operated by 21Vianet
          -- WITH IDENTITY = 'ContosoDevKeyVault.vault.microsoftazure.de', -- for Azure Germany   
          SECRET = 'EF5C8E094D2A4A769998D93440D8115DReplace-With-AAD-Client-Secret'   
      FOR CRYPTOGRAPHIC PROVIDER AzureKeyVault_EKM_Prov;    
      
  2. Yedek şifrelemesi için Veritabanı Altyapısı'na bir SQL Server oturum açma hesabı oluşturun

    Veritabanı Altyapısı tarafından şifreleme yedeklemeleri için kullanılacak bir SQL Server oturumu oluşturun ve 1. Adımdaki kimlik bilgilerini ekleyin. Bu Transact-SQL örnek, daha önce içeri aktarılan anahtarın aynısını kullanır.

    Önemli

    Eğer bu anahtarı zaten TDE için (önceki örnek) veya sütun seviyesi şifreleme için (aşağıdaki örnek) kullandıysanız, aynı asimetrik anahtarı yedekleme şifrelemesi için kullanamazsınız.

    Bu örnek, 2. Adım: Anahtar kasası oluşturma bölümünde açıklandığı gibi, master veritabanı için daha önce içe aktarabileceğiniz veya oluşturabileceğiniz, anahtar kasasında depolanan CONTOSO_KEY_BACKUP asimetrik anahtarı kullanır.

    USE master;  
    
    -- Create a SQL Server login associated with the asymmetric key   
    -- for the Database engine to use when it is encrypting the backup.  
    CREATE LOGIN Backup_Login   
    FROM ASYMMETRIC KEY CONTOSO_KEY_BACKUP;  
    GO   
    
    -- Alter the Encrypted Backup Login to add the credential for use by   
    -- the Database Engine to access the key vault  
    ALTER LOGIN Backup_Login   
    ADD CREDENTIAL Azure_EKM_Backup_cred ;  
    GO  
    
  3. Veritabanını yedekleyin

    Veritabanını yedekleyin, anahtar kasasında saklanan asimetrik anahtarı kullanarak şifrelemeyi belirtin.

    Aşağıdaki örnekte, veritabanı zaten TDE ile şifrelenmişse ve asimetrik anahtar CONTOSO_KEY_BACKUP TDE asimetrik anahtarından farklıysa, yedek hem TDE asimetrik anahtarı hem CONTOSO_KEY_BACKUP ile şifrelenir. Hedef SQL Server örneği, yedeklemenin şifresini çözmek için her iki anahtara da ihtiyaç duyar.

    USE master;  
    
    BACKUP DATABASE [DATABASE_TO_BACKUP]  
    TO DISK = N'[PATH TO BACKUP FILE]'   
    WITH FORMAT, INIT, SKIP, NOREWIND, NOUNLOAD,   
    ENCRYPTION(ALGORITHM = AES_256,   
    SERVER ASYMMETRIC KEY = [CONTOSO_KEY_BACKUP]);  
    GO  
    
  4. Veritabanını geri yükle

    TDE ile şifrelenmiş bir veritabanı yedeğini geri yüklemek için, hedef SQL Server örneğinin önce şifreleme için kullanılan asimetrik anahtar kasa anahtarının bir kopyasına sahip olması gerekir. Bu kopyayı sağlamak için:

    • TDE için kullanılan orijinal asimetrik anahtar artık anahtar kasasında değilse, anahtar kasası anahtarı yedeğini geri yükleyin veya anahtarı yerel bir HSM'den yeniden içeri aktarın. Anahtarın parmak izinin veritabanı yedeklemesinde kaydedilen parmak iziyle eşleşmesi için, anahtarın başlangıçta sahip olduğu aynı anahtar kasası anahtar adını kullanması gerekir.

    • Hedef SQL Server örneğinde 1. ve 2. adımları uygula.

    • Hedef SQL Server örneği, yedeklemeyi şifrelemek için kullanılan asimetrik anahtarlara eriştikten sonra, veritabanını sunucuda geri yükleyin.

    Örnek geri yükleme kodu:

    RESTORE DATABASE [DATABASE_TO_BACKUP]  
    FROM DISK = N'[PATH TO BACKUP FILE]'   
        WITH FILE = 1, NOUNLOAD, REPLACE;  
    GO  
    

    Yedekleme seçenekleri hakkında daha fazla bilgi için bkz BACKUP . (Transact-SQL).

Anahtar kasasından asimetrik bir anahtar kullanılarak sütun düzeyinde şifreleme

Aşağıdaki örnek, anahtar kasasında asimetrik anahtar tarafından korunan bir simetrik anahtar oluşturur. Simetrik anahtar daha sonra veri tabanındaki verileri şifreler.

Önemli

Eğer yedek şifreleme için zaten kullanmışsanız, aynı asimetrik anahtarı sütun seviyesinde şifreleme için kullanamazsınız.

Bu örnek, CONTOSO_KEY_COLUMNS anahtar kasasında saklanan asimetrik anahtarı kullanır; bu anahtarı daha önce içe aktarabilir veya oluşturabilirsiniz, Adım 2: Anahtar kasası oluşturmak. Bu asimetrik anahtarı ContosoDatabase veritabanında kullanmak için, ContosoDatabase veritabanına anahtara başvuru vermek üzere CREATE ASYMMETRIC KEY ifadesini yeniden çalıştırın.

USE [ContosoDatabase];  
GO  
  
-- Create a reference to the key in the key vault  
CREATE ASYMMETRIC KEY CONTOSO_KEY_COLUMNS   
FROM PROVIDER [AzureKeyVault_EKM_Prov]  
WITH PROVIDER_KEY_NAME = 'ContosoDevRSAKey2',  
CREATION_DISPOSITION = OPEN_EXISTING;  
  
-- Create the data encryption key.  
-- The data encryption key can be created using any SQL Server   
-- supported algorithm or key length.  
-- The DEK will be protected by the asymmetric key in the key vault  
  
CREATE SYMMETRIC KEY DATA_ENCRYPTION_KEY  
    WITH ALGORITHM=AES_256  
    ENCRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
DECLARE @DATA VARBINARY(MAX);  
  
--Open the symmetric key for use in this session  
OPEN SYMMETRIC KEY DATA_ENCRYPTION_KEY   
DECRYPTION BY ASYMMETRIC KEY CONTOSO_KEY_COLUMNS;  
  
--Encrypt syntax  
SELECT @DATA = ENCRYPTBYKEY  
    (  
    KEY_GUID('DATA_ENCRYPTION_KEY'),   
    CONVERT(VARBINARY,'Plain text data to encrypt')  
    );  
  
-- Decrypt syntax  
SELECT CONVERT(VARCHAR, DECRYPTBYKEY(@DATA));  
  
--Close the symmetric key  
CLOSE SYMMETRIC KEY DATA_ENCRYPTION_KEY;