次の方法で共有


EKM を使用して SQL Server で透過的なデータ暗号化を有効にする

適用対象:SQL Server

この記事では、Transact-SQL で拡張キー管理 (EKM) モジュールに格納されている非対称キーを使用してデータベース暗号化キーを保護するために、SQL Server で Transparent Data Encryption (TDE) を有効にする方法について説明します。

TDE は、データベース暗号化キーと呼ばれる対称キーを使用してデータベース全体のストレージを暗号化します。 データベース暗号化キーは、 master データベースのデータベース マスター キー (DMK) によって保護される証明書を使用して保護することもできます。 DMK を使用したデータベース暗号化キーの保護の詳細については、「 Transparent Data Encryption (TDE)」を参照してください。 SQL Server が Azure 仮想マシンで実行されているときに TDE を構成する方法については、「Azure Key Vault を使用した拡張キー管理 (SQL Server)」を参照してください。 Azure Key Vault でキーを使用して TDE を構成する方法の詳細については、「 SQL 暗号化機能への SQL Server コネクタの使用」を参照してください。

制限事項

データベース暗号化キーの作成およびデータベースの暗号化は、高い特権を持つユーザー (システム管理者など) が行う必要があります。 EKM モジュールは、そのユーザーを認証できる必要があります。

データベース エンジンは、起動時にデータベースを開く必要があります。 EKM によって認証される資格情報を作成し、非対称キーに基づくログインに追加する必要があります。 ユーザーはそのログインを使用してサインインすることはできませんが、データベース エンジンは EKM デバイスで自身を認証できます。

EKM モジュールに格納されている非対称キーが失われた場合、SQL Server でデータベースを開くことはありません。 EKM プロバイダーを使用して非対称キーをバックアップできる場合は、バックアップを作成して安全な場所に保存しておく必要があります。

EKM プロバイダーに必要なオプションとパラメーターは、次のコード例で提供されているものとは異なる場合があります。 詳細については、EKM プロバイダーを参照してください。

アクセス許可

この記事では、次の権限を使用します。

  • 構成オプションを変更して RECONFIGURE ステートメントを実行するには、 ALTER SETTINGS サーバー レベルのアクセス許可が付与されている必要があります。 ALTER SETTINGS 権限は、sysadmin 固定サーバー ロールと serveradmin 固定サーバー ロールでは暗黙のうちに付与されています。

  • ALTER ANY CREDENTIALアクセス許可が必要です。

  • ALTER ANY LOGINアクセス許可が必要です。

  • CREATE ASYMMETRIC KEYアクセス許可が必要です。

  • データベース CONTROL 暗号化するには、データベースに対するアクセス許可が必要です。

Transact-SQL の使用

  1. EKM プロバイダーによって提供されるファイルを SQL Server のあるコンピューターの適切な場所にコピーします。 この例では、 C:\EKM_Files フォルダーを使用します。

  2. EKM プロバイダーの要件に従ってコンピューターに証明書をインストールします。

    Note

    SQL Server は EKM プロバイダーを提供していません。 EKM プロバイダーごとに、インストール、構成、およびユーザー承認の手順が異なります。 この手順を完了するには、EKM プロバイダーのドキュメントを参照してください。

  3. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  4. 標準バーで、 [新しいクエリ] を選択します。

  5. 次の例をコピーしてクエリ ウィンドウに貼り付け、実行 選択します。

    -- Enable advanced options.
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE;
    GO
    
    -- Enable EKM provider
    EXECUTE sp_configure 'EKM provider enabled', 1;
    GO
    
    RECONFIGURE;
    GO
    
    -- Create a cryptographic provider, which we have chosen to call "EKM_Prov," based on an EKM provider
    CREATE CRYPTOGRAPHIC PROVIDER EKM_Prov
        FROM FILE = 'C:\EKM_Files\KeyProvFile.dll';
    GO
    
    -- Create a credential that will be used by system administrators.
    CREATE CREDENTIAL sa_ekm_tde_cred
        WITH IDENTITY = 'Identity1',
        SECRET = '<password>' FOR CRYPTOGRAPHIC PROVIDER EKM_Prov;
    GO
    
    -- Add the credential to a high privileged user such as your
    -- own ___domain login in the format [DOMAIN\login].
    ALTER LOGIN [Contoso\Mary] ADD CREDENTIAL sa_ekm_tde_cred;
    GO
    
    -- create an asymmetric key stored inside the EKM provider
    USE master;
    GO
    
    CREATE ASYMMETRIC KEY ekm_login_key
         FROM PROVIDER [EKM_Prov]
             WITH ALGORITHM = RSA_512,
             PROVIDER_KEY_NAME = 'SQL_Server_Key';
    GO
    
    -- Create a credential that will be used by the Database Engine.
    CREATE CREDENTIAL ekm_tde_cred
        WITH IDENTITY = 'Identity2', SECRET = '<secret>'
        FOR CRYPTOGRAPHIC PROVIDER EKM_Prov;
    
    -- Add a login used by TDE, and add the new credential to the login.
    CREATE LOGIN EKM_Login
        FROM ASYMMETRIC KEY ekm_login_key;
    GO
    
    ALTER LOGIN EKM_Login
        ADD CREDENTIAL ekm_tde_cred;
    GO
    
    -- Create the database encryption key that will be used for TDE.
    USE AdventureWorks2022;
    GO
    
    CREATE DATABASE ENCRYPTION KEY
        WITH ALGORITHM = AES_128
        ENCRYPTION BY SERVER ASYMMETRIC KEY ekm_login_key;
    GO
    
    -- Alter the database to enable transparent data encryption.
    ALTER DATABASE AdventureWorks2022
        SET ENCRYPTION ON;
    GO