SQL Serverおよびデータベース暗号化キー(データベース エンジン)

適用対象:SQL Server

SQL Server では、暗号化キーを使用して、サーバーのデータベースに格納されているデータ、資格情報、接続情報がセキュリティ保護されます。 SQL Server には、対称と非対称の 2 種類のキーがあります。 対称キーでは、データの暗号化と暗号化解除に同じパスワードが使用されます。 非対称キーでは、データを暗号化するパスワード ( 公開 キー) とデータの暗号化を解除するパスワード ( 秘密 キー) が使い分けられます。

SQL Server の暗号化キーでは、公開キー、秘密キー、対称キーを組み合わせて機密データの保護に使用します。 対称キーは、SQL Server インスタンスを最初に起動するときの SQL Server 初期化時に作成されます。 SQL Serverは、SQL Serverに保存されている機密データを暗号化するためにこの鍵を使用します。 オペレーティングシステムは公開鍵と秘密鍵を作成し、対称鍵を保護します。 公開キーと秘密キーのペアは、データベースに機密データを格納する SQL Server インスタンスごとに作成されます。

SQL Server およびデータベース キーの用途

SQL Server では、キーに 2 つの主要な用途があります。1 つは SQL Server インスタンス上で生成され、使用されるサービス マスター キー (SMK)、もう 1 つはデータベースに使用されるデータベース マスター キー (DMK) です。

サービス マスター キー

サービス マスター キーは、 SQL Server 暗号化階層のルートになります。 SQL Serverはインスタンスが初めて起動したときにSMKを生成し、リンクされたサーバーのパスワード、認証情報、各データベースのマスターキーを暗号化するために使用します。

SMKはローカルマシンキーまたはWindowsデータ保護API(DPAPI)を使用して暗号化されます。 DPAPIはSQL ServerサービスアカウントのWindows認証情報から派生したキーを使用します。 キーは双方向で保護されているため、サービス マスターキーは、その作成に使用されたサービス アカウント、またはそのマシンの資格情報にアクセスできるプリンシパルによって開くことができます。

SQL ServerはAES暗号化アルゴリズムを使ってサービスマスターキーとデータベースマスターキーを保護します。 AES は SQL Server 2012 (11.x) より前のバージョンで使用されていた 3DES アルゴリズムを置き換えました。 それらの以前のバージョンのいずれかから データベース エンジン のインスタンスをアップグレードした後、SMK と DMK を再生成して、マスター キーを AES にアップグレードしてください。 SMK の再生成の詳細については、 ALTER SERVICEALTER SERVICE MASTER KEY (Transact-SQL) および ALTER MASTER KEY (Transact-SQL) を参照してください。

データベース マスター キー

データベースマスターキーは、データベース内に存在する証明書や非対称キーの秘密鍵を保護する対称鍵です。 データの暗号化も可能ですが、長さに制限があるため、データに関しては非対称キーほど実用的ではありません。 データベースマスターキーの自動復号を可能にするために、SMKを使ってキーのコピーが暗号化されます。 SQL Serverはそのコピーをキーが使われるデータベースとmasterシステムデータベースの両方に保存します。

masterシステムデータベースに保存されているDMKのコピーは、DMKが変更されるたびに静かに更新されます。 この既定値は、DROP ENCRYPTION BY SERVICE MASTER KEY の ALTER MASTER KEY オプションを使用して変更できます。 サービスマスターキーで暗号化されていないDMKは、OPEN MASTER KEYOPEN MASTER KEY (Transact-SQL) とパスワードを使用して開く必要があります。

SQL Serverおよびデータベースキーの管理

暗号化鍵の管理には、新しいデータベース鍵の作成、サーバー鍵およびデータベース鍵のバックアップ、そして鍵をいつ、どのように復元・削除・変更するかを知ることが含まれます。

対称キーを管理するには、SQL Serverに含まれるツールを使って以下の作業を行います。

  • サーバーを復旧させるため、または計画的な移行の一環として使用できるように、サーバーおよびデータベースのキーのコピーをバックアップします。
  • 以前に保存したキーをデータベースに復元します。 鍵を復元することで、新しいサーバーインスタンスは元々暗号化していなかった既存のデータにアクセスできます。
  • 暗号化されたデータにアクセスできなくなった場合は、データベース内の暗号化されたデータを削除します。
  • 鍵が漏洩した場合に備えて、鍵を再作成し、データを再暗号化してください。 セキュリティのベストプラクティスとして、数ヶ月ごとに鍵を定期的に再作成し、鍵を解読しようとする攻撃からサーバーを守りましょう。
  • 複数のサーバーが 1 つのデータベースとそのデータベースの暗号化を解除するキーの両方を共有する場合は、サーバー スケールアウト配置に対してサーバー インスタンスを追加または削除します。

重要なセキュリティ情報

サービスマスターキーで保護されたオブジェクトにアクセスするには、キー作成に使ったSQL Serverサービスアカウントか、キー作成元のシステムに紐づいたコンピュータ(マシン)アカウントのいずれかが必要です。 SQL Serverサービスアカウントまたはコンピュータアカウントを変更してもキーへのアクセスを失いません。 しかし、両方のアカウントを変更すると、サービスマスターキーへのアクセスを失います。 これら2つの要素のいずれも持たないままサービスマスターキーへのアクセスを失うと、元のキーで暗号化されたデータやオブジェクトを復号できません。

サービスマスターキーで保護された接続は、そのキーを持っていないと復元できません。

データベースマスターキーで保護されたオブジェクトやデータにアクセスするには、キーの保護に使用されるパスワードだけで十分です。

注意事項

この記事で説明した鍵へのアクセスをすべて失えば、それらの鍵で保護されたオブジェクト、接続、データへのアクセスも失います。 サービス マスター キーの復元で説明されているようにサービス マスター キーを復元することも、元の暗号化システムに戻ってアクセスを回復することもできます。 アクセスを復旧するための「抜け道」はありません。