拡張キー管理 (EKM)

適用対象:SQL Server

SQL Server には、 拡張キー管理 (EKM) を含むデータ暗号化機能が用意されています。暗号化とキーの生成には Microsoft Cryptographic API (MSCAPI) が使用されます。 データおよび鍵暗号化用の暗号化鍵は一時的な鍵コンテナ内で作成され、データベースに保存する前にプロバイダーからエクスポートしなければなりません。 このアプローチにより、SQL Serverは暗号鍵の階層構造や鍵のバックアップを含む鍵管理を担当できます。

規制遵守の需要が高まり、データプライバシーへの懸念が高まる中、組織は暗号化を多層防御ソリューションとして活用しています。 このアプローチは多くの場合、データベースの暗号化管理ツールを使用するだけで実現できるものではありません。 ハードウェアベンダーは hardware security modules (HSM)を用いてエンタープライズ鍵管理に対応する製品を提供しています。 HSM デバイスでは、暗号化キーがハードウェア モジュールまたはソフトウェア モジュールに格納されます。 この方法は、暗号化鍵が暗号化されたデータに存在しないため、より安全です。

複数のベンダーが鍵管理と暗号化加速の両方のためにHSMを提供しています。 HSM デバイスでは、アプリケーションと HSM の仲介として、サーバー プロセスとのハードウェア インターフェイスが使用されます。 また、モジュール上に MSCAPI プロバイダー (ハードウェアの場合もあればソフトウェアの場合もあります) が実装されています。 MSCAPIはしばしばHSMが提供する機能の一部しか提供しません。 ベンダーはHSMの管理、鍵設定、鍵アクセスのための管理ソフトウェアも提供できます。

HSMの実装はベンダーごとに異なり、SQL Serverで使用するには共通のインターフェースが必要です。 MSCAPIはこのインターフェースを提供していますが、HSM機能の一部のみをサポートしています。 これにも、対称キーをネイティブに永続化できないことや、セッション指向のサポートが不足していることなど、ほかの制限もあります。

SQL Server拡張可能鍵管理は、サードパーティのEKMおよびHSMベンダーがモジュールをSQL Serverに登録できるようにします。 モジュールが登録されると、SQL Serverユーザーはそのモジュールに保存された暗号鍵を使用できます。 SQL Serverは、これらのモジュールがサポートする高度な暗号化機能、例えば一括暗号化や復号化、鍵の管理機能(鍵のエイジングやキー ローテーション)にアクセスできます。

Azure VMでSQL Serverを実行すると、SQL ServerはAzure Key Vaultに保存されたキーを使用できます。 詳細については、Azure Key Vault (SQL Server)を使った拡張可能な鍵管理をご覧ください。

EKM構成

拡張可能な鍵管理はすべてのSQL Serverのエディションで提供されているわけではありません。 SQL Serverのエディションでサポートされている機能一覧については、「SQL Server 2025のエディションおよびサポート機能」をご覧ください。

既定では、拡張キー管理は無効です。 この機能を有効にするには、 sp_configure(Transact-SQL) ストアドプロシージャを以下のオプションと値で使用してください。

sp_configure 'show advanced', 1;
GO
RECONFIGURE;
GO
sp_configure 'EKM provider enabled', 1;
GO
RECONFIGURE;
GO

注

EKMをサポートしていないSQL Serverのエディションでこのオプションにsp_configureを指定するとエラーが出ます。

機能を無効にするには、値を 0に設定してください。 サーバー オプションの設定方法については、「sp_configure (Transact-SQL)」を参照してください。

EKMの使い方

SQL Server拡張可能鍵管理は、データベースファイルを保護する暗号化鍵をスマートカード、USBデバイス、EKM/HSMモジュールなどのオフボックスデバイスに保存できます。 また、固定サーバー ロール sysadmin のメンバーを除くデータベース管理者からもデータを保護します。 外部EKM/HSMモジュールでデータベースユーザーのみがアクセスできる暗号化鍵を使ってデータを暗号化できます。

拡張キー管理にはその他、次のような利点があります。

  • 追加の認可確認により、職務分離が可能になります。
  • ハードウェアベースの暗号化および復号化においてより高性能です。
  • 外部での暗号化キーの生成。
  • 外部暗号化鍵の保管は、データと鍵を物理的に分離します。
  • 暗号化キーの取得。
  • 外部暗号化鍵保持は、暗号化鍵の回転を可能にします。
  • 暗号化キーのより簡単な復元。
  • 暗号化キーの管理可能な配布。
  • 暗号化キーの安全な破棄。

拡張キー管理は、ユーザー名とパスワードの組み合わせに対して使用することも、EKM ドライバーで定義されたその他の方法に対して使用することもできます。

注意事項

トラブルシューティングの際には、EKM プロバイダーから取得した暗号化キーを Microsoft テクニカル サポートに提供する必要がある場合があります。 問題を解決するためにベンダーのツールやプロセスにアクセスする必要性が生じる場合もあります。

EKMデバイスによる認証

EKM モジュールでは複数の種類の認証をサポートできますが、 各プロバイダーは SQL Server に対して 1 種類の認証のみを提供します。 つまり、モジュールがBasic 認証と他の認証の両方をサポートしている場合、一方を公開しますが、両方は公開しません。

ユーザー名とパスワードを用いたEKMデバイス固有の基本認証

ユーザー名とパスワードのペアを用いた基本的な認証をサポートするEKMモジュールでは、SQL Serverは認証情報による透明な認証を提供します。 資格情報の詳細については、「資格情報 (データベース エンジン)」を参照してください。

EKMプロバイダーの認証情報を作成し、WindowsまたはSQL Serverアカウントのいずれかのログインにマッピングして、ログインごとにEKMモジュールにアクセスできます。 認証情報の identity フィールドにはユーザー名が含まれ、secret フィールドにはEKMモジュールに接続するためのパスワードが含まれています。

EKMプロバイダーにログインマッピングされた認証情報が存在しない場合、SQL Serverはサービスアカウントにマッピングされた認証情報を使用します。

ログインには複数の認証情報が割り当てられますが、それぞれが異なるEKMプロバイダーに使われている場合に限ります。 マップされた資格情報は、各ログインで各 EKM プロバイダーにつき 1 つだけ存在する必要があります。 同じ認証情報を他のログインにマッピングすることもできます。

その他のEKMデバイス固有の認証

Windows認証またはユーザー名とパスワードの組み合わせ以外の認証を使用するEKMモジュールでは、SQL Server とは独立して認証を行う必要があります。

EKMデバイスによる暗号化と復号

対称鍵と非対称鍵を用いてデータを暗号化・復号するために、以下の機能や特徴を用いてください:

関数または機能 リファレンス
対称キー暗号化 CREATE SYMMETRIC KEY (Transact-SQL)
非対称鍵暗号化 CREATE ASYMMETRIC KEY (Transact-SQL)
EncryptByKey(key_guid, 'cleartext', ...) ENCRYPTBYKEY(Transact-SQL)
DecryptByKey(ciphertext, ...) DECRYPTBYKEY(Transact-SQL)
EncryptByAsmKey(key_guid, 'cleartext') ENCRYPTBYASYMKEY(Transact-SQL)
DecryptByAsmKey(ciphertext) DECRYPTBYASYMKEY(Transact-SQL)

EKM鍵によるデータベース鍵暗号化

SQL Server では、EKM キーを使用してデータベースのその他のキーを暗号化できます。 EKM デバイスで対称キーと非対称キーの両方を作成および使用できます。 EKM 非対称キーを使用してネイティブ (EKM 以外) の対称キーを暗号化することができます。

以下の例は、データベースの対称鍵を作成し、EKMモジュール上の鍵を使って暗号化します。

CREATE SYMMETRIC KEY Key1
WITH ALGORITHM = AES_256
ENCRYPTION BY EKM_AKey1;
GO

-- Open the database key.
OPEN SYMMETRIC KEY Key1
DECRYPTION BY EKM_AKey1;

SQL Serverにおけるデータベースおよびサーバーキーの詳細については、「SQL Server およびデータベースの暗号化キー (データベース エンジン)」をご覧ください。

注

1つのEKM鍵を別のEKM鍵で暗号化することはできません。

SQL Serverは、EKMプロバイダーから生成された非対称キーでモジュールに署名することをサポートしていません。