SQL 暗号化機能への SQL Server コネクタの使用

適用対象 SQL Server

Azure Key Vault の保護下にある非対称キーを使用した、一般的な SQL の暗号化アクティビティは次の 3 つの領域に分けられます。

  • Azure Key Vault からの非対称キーを使用した透過的データ暗号化

  • Key Vault からの非対称キーを使用したバックアップの暗号化

  • Key Vault からの非対称キーを使用した列レベルの暗号化

このトピックの手順に着手する前に、「 Azure Key Vault を使用した拡張キー管理のセットアップ手順」のトピックのパート I からパート IV を実行してください。

Note

1.0.0.440 以前のバージョンは置き換えられ、実稼働環境ではサポートされなくなりました。 Microsoft ダウンロード センターにアクセスし、[SQL Server コネクタのメンテナンスとトラブルシューティング] ページの "SQL Server コネクタのアップグレード" に示されている手順を使用して、バージョン 1.0.1.0 以降にアップグレードしてください。

Note

Microsoft Entra ID は以前に Azure Active Directory(Azure AD)として知られていました。

Azure Key Vault からの非対称キーを使用した透過的データ暗号化

「Azure Key Vault を使用した拡張キー管理のセットアップ手順」のトピックのパート I からパート IV を終えたら、Azure Key Vault キーを使用し、データベースの暗号化キーを TDE で暗号化します。 PowerShell を使用したキーのローテーションの詳細については、「PowerShell を使用して Transparent Data Encryption (TDE) 保護機能をローテーションする」を参照してください。

重要

ロールオーバー後に以前のバージョンのキーは削除しないでください。 キーがロール オーバーされると、古いデータベース バックアップ、バックアップされたログファイル、トランザクション ログ ファイルなど、一部のデータは引き続き以前のキーで暗号化されます。

資格情報とログインが必要となります。また、データベースに格納されるデータとログを暗号化するためのデータベース暗号化キーを作成する必要があります。 データベースを暗号化するには、データベースに対する CONTROL 権限が必要です。 次の図は、Azure Key Vault 使用下における暗号化キーの階層を示したものです。

Azure Key Vault を使用する場合の暗号化キーの階層を示す図。

  1. データベース エンジンが TDE に使用する SQL Server の資格情報を作成する

    データベース エンジンは、データベースの読み込み時に、Microsoft Entra アプリケーション資格情報を使用して Key Vault にアクセスします。 手順 1 で説明されているように、データベース エンジンに対して別の クライアント IDシークレット を作成し、付与される Key Vault アクセス許可を制限することをお勧めします。

    次の Transact-SQL スクリプトを以下のように変更します。

    • IDENTITY 引数 (ContosoDevKeyVault) を編集し、Azure Key Vault を参照するようにします。

      • グローバル Azure を使用している場合は、IDENTITY 引数をパート II で使用した実際の Azure Key Vault の名前に置き換えます。
      • プライベート Azure クラウド (Azure Government、21Vianet が運営する Azure、Azure Germany など) を使用している場合は、IDENTITY 引数をパート II の手順 3 で返された Vault URI に置き換えます。 Vault URI に "https://" は含めないでください。
    • SECRET 引数の最初の部分を、手順 1 の Microsoft Entra アプリケーション クライアント ID に置き換えます。 この例のクライアント IDEF5C8E094D2A4A769998D93440D8115D です。

      重要

      クライアント IDのハイフンは削除してください。

    • SECRET 引数の 2 番目の部分を、パート I のクライアント シークレットを使って完了します。この例で、パート 1 のクライアント シークレットReplaceWithAADClientSecret です。

    • 完成した SECRET 引数の文字列は、ハイフンを含まない文字と数字の長いシーケンスになります。

    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 に使用する SQL Server ログインを作成する

    SQL Server ログインを作成し、手順 1. で作成した資格情報を追加します。 この例の Transact-SQL では、既にインポートされているキーと同じものを使用しています。

    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. データベース暗号化キー (DEK) を作成する

    DEK は、データベース インスタンス内のデータとログ ファイルを暗号化するキーです。このキーがさらに、Azure Key Vault の非対称キーで暗号化されます。 DEK は、SQL Server でサポートされている任意のアルゴリズムまたはキーの長さを使用して作成できます。

    USE ContosoDatabase;  
    GO  
    
    CREATE DATABASE ENCRYPTION KEY   
    WITH ALGORITHM = AES_256   
    ENCRYPTION BY SERVER ASYMMETRIC KEY CONTOSO_KEY;  
    GO  
    
  4. TDE を有効にする

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

    Management Studio を使い、オブジェクト エクスプローラーでデータベースに接続して、TDE が有効になっていることを確認します。 データベースを右クリックし、 [タスク]をポイントして、 [データベース暗号化の管理]をクリックします。

    [タスク] > [データベース暗号化の管理] が選択されたオブジェクト エクスプローラーを示すスクリーンショット。

    [データベース暗号化の管理] ダイアログ ボックスで、TDE が有効になっていることを確認し、DEK の暗号化に使用されている非対称キーを確認します。

    [データベース暗号化をオンに設定] オプションが選択され、TDE が有効になっていることを示す黄色のバナーが表示された、[データベース暗号化の管理] ダイアログボックスのスクリーンショット。

    代わりに、次の Transact-SQL スクリプトを実行してもかまいません。 暗号化の状態が "3" である場合、データベースが暗号化済みであることを示します。

    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;  
    

    Note

    いずれかのデータベースで TDE が有効になっている場合は常に、 tempdb データベースが自動的に暗号化されます。

Key Vault からの非対称キーを使用したバックアップの暗号化

暗号化されたバックアップは、SQL Server 2014 (12.x) 以降でサポートされています。 次の例では、資格情報コンテナー内の非対称キーで保護したデータ暗号化キーによって暗号化したバックアップを作成し、復元します。
データベース エンジンは、データベースの読み込み時に、Microsoft Entra アプリケーション資格情報を使用して Key Vault にアクセスします。 手順 1 で説明されているように、データベース エンジンに対して別の クライアント IDシークレット を作成し、付与される Key Vault アクセス許可を制限することをお勧めします。

  1. データベース エンジンがバックアップの暗号化に使用する SQL Server の資格情報を作成する

    次の Transact-SQL スクリプトを以下のように変更します。

    • IDENTITY 引数 (ContosoDevKeyVault) を編集し、Azure Key Vault を参照するようにします。

      • グローバル Azure を使用している場合は、IDENTITY 引数をパート II で使用した実際の Azure Key Vault の名前に置き換えます。
      • プライベート Azure クラウド (Azure Government、21Vianet が運営する Microsoft Azure、Azure Germany など) を使用している場合は、IDENTITY 引数をパート II の手順 3 で返された Vault URI に置き換えます。 Vault URI に "https://" は含めないでください。
    • SECRET 引数の最初の部分を、手順 1 の Microsoft Entra アプリケーション クライアント ID に置き換えます。 この例のクライアント IDEF5C8E094D2A4A769998D93440D8115D です。

      重要

      クライアント IDのハイフンは削除してください。

    • SECRET 引数の 2 番目の部分を、パート I で使用した クライアント シークレット に置き換えます。この例のパート I で使用した クライアント シークレットReplace-With-AAD-Client-Secretです。 完成した SECRET 引数は、 ハイフンを含まないアルファベットと数字とから成る長い文字列になります。

      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. データベース エンジンがバックアップ暗号化に使用する SQL Server ログインを作成する

    バックアップを暗号化するためにデータベース エンジンで使用される SQL Server ログインを作成し、それに手順 1 の資格情報を追加します。 この例の Transact-SQL では、既にインポートされているキーと同じものを使用しています。

    重要

    TDE (上の例) または列レベルの暗号化 (次の例) で既に使用している非対称キーと同じものをバックアップ暗号化に使用することはできません。

    この例では、Key Vault に格納されている CONTOSO_KEY_BACKUP 非対称キーを使用します。このキーは、マスター データベースに対してパート IV の手順 5. の説明に従って作成するか、あらかじめインポートしておくことができます。

    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. データベースのバックアップ

    Key Vault に保存されている非対称鍵で暗号化を指定し、データベースをバックアップします。

    下の例では、データベースが既に TDE で暗号化されていて、非対称キー CONTOSO_KEY_BACKUP が TDE の非対称キーとは異なる場合、バックアップは TDE 非対称キーと CONTOSO_KEY_BACKUP の両方で暗号化されることに注意してください。 バックアップの暗号化を解除するには、両方のキーがターゲットの SQL Server インスタンスで必要になります。

    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. データベースの復元

    TDE で暗号化されたデータベースのバックアップを復元するには、ターゲットの SQL Server インスタンスは最初に、暗号化に使用された非対称のキー コンテナー キーのコピーが必要です。 次の方法でこれを実現します。

    • TDE に使用された元の非対称キーが Key Vault にない場合は、Key Vault キーのバックアップを復元するか、またはローカルの HSM からキーを再インポートします。 重要: キーの拇印を、データベースのバックアップに記録された拇印と照合させるには、キーの名前が元の名前と同じ Key Vault キー名でなければいけません。

    • 手順 1 と 2 をターゲットの SQL Server インスタンスに適用します。

    • ターゲットの SQL Server インスタンスが、バックアップの暗号化に使用された非対称キーにアクセス可能になったら、サーバー上のデータベースを復元します。

    復元のサンプル コードは次のとおりです。

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

    バックアップ オプションの詳細については、「 BACKUP (Transact-SQL)」を参照してください。

Key Vault からの非対称キーを使用した列レベルの暗号化

次の例では、資格情報コンテナー内の非対称キーによって保護された対称キーを作成します。 その後、その対称キーを使用してデータベース内のデータを暗号化します。

重要

非対称キーをバックアップ暗号化で既に使用した場合は、同じものを列レベルの暗号化に使用することはできません。

この例では、「 CONTOSO_KEY_COLUMNS Azure Key Vault を使用する拡張キー管理のセットアップ手順 」の手順 3. (セクション 3) の説明に従って以前にインポートまたは作成した、資格情報コンテナーに格納されている非対称キーを使用します。 この非対称キーを ContosoDatabase データベースで使用するには、 CREATE ASYMMETRIC KEY ステートメントをもう一度実行して、 ContosoDatabase データベースにキーへの参照を提供する必要があります。

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;  

参照

Azure Key Vault を使用した拡張キー管理のセットアップ手順
Azure Key Vault を使用した拡張キー管理
EKM provider enabled サーバー構成オプション
SQL Server コネクタのメンテナンスとトラブルシューティング