【SQL Server】AlwaysOn可用性グループ環境でTDE(透過的データ暗号化)を構成する詳細手順
本記事では、AlwaysOn可用性グループ(AG)と組み合わせてTDE(Transparent Data Encryption/透過的データ暗号化)を設定するための具体的な手順を詳しく解説します。
はじめに
SQL Serverには、物理ファイルを暗号化して顧客の機密データを保護するためのTDE(透過的データ暗号化)が用意されています。TDEはSQL Server 2008において、Enterprise Editionの機能として初めて導入されました。
TDEが利用可能なSQL Serverのエディション
- SQL Server 2008、2008 R2、2012、2014、2016、2017(Evaluation、Developer、Enterprise)
SQL Server 2019以降では、ほとんどのエディションでTDEが利用可能になりました。
- SQL Server 2019 - Standard、Evaluation、Developer、Enterprise
TDEとAlwaysOn可用性グループを構成する3つのシナリオ
- TDEで暗号化されたデータベースをAGグループに追加する
- AGグループに既に存在するデータベースへTDEを構成する
- 期限切れ証明書のローテーション
シナリオ1:TDE暗号化済みデータベースをAGグループに追加する
ここでは、2ノード構成のAGを使用してTDEをセットアップします。セカンダリレプリカが複数ある場合は、セカンダリ側の手順をそれぞれのレプリカに対して実行してください。
- プライマリレプリカ:node1
- セカンダリレプリカ:node2
- AGグループ:TDE_AG
ヒント: TDEを実装する前に、DBCC CHECKDBを実行してデータベースにエラーがないことを確認し、最新のフルバックアップを取得しておくことをお勧めします。
ステップ1:プライマリインスタンス - マスターキーの作成
初めてTDE暗号化を行う場合、マスターキーはまだ存在しないはずです。以下のSQLを実行しても結果セットは返されません。
次に、強力なパスワードを使用してmasterデータベースにマスターキーを作成します。
作成後、マスターキーを検証します。
ベストプラクティスとして、マスターキーは安全な場所にバックアップしてください。バックアップ用のパスワードは、マスターキーのパスワードとは異なるものでも構いません。
ステップ2:プライマリインスタンス - 証明書の作成
データベース暗号化キーを保護するための証明書を作成します。証明書の既定の有効期限は1年です。ヒント: 1年で証明書が失効するのは運用上望ましくないため、有効期限を5年に設定することがベストプラクティスです。
以下のT-SQLを実行して、証明書が正しく作成されたことを確認します。
ステップ3:プライマリインスタンス - データベース暗号化キー(DEK)の作成
実際のデータベース内容を暗号化する対称キーであるDEK(データベース暗号化キー)を作成します。利用可能なAESアルゴリズムを指定して作成できます。
ステップ4:プライマリインスタンス - 証明書のバックアップ
証明書と秘密キーは必ずバックアップしてください。バックアップがあれば、データベースのバックアップファイルを別のSQL Serverインスタンスへ復元したり、データファイルをアタッチしたりできるようになります。
ステップ5:セカンダリインスタンス - マスターキーの作成
マスターキーが存在しない場合は、すべてのセカンダリレプリカにもデータベースマスターキーを作成する必要があります。手順はプライマリインスタンスのステップ1と同じです。なお、本例ではステップ1の時点で両方のインスタンスにマスターキーを作成済みです。
ステップ6:セカンダリインスタンス - セカンダリ証明書の作成
プライマリレプリカからすべてのセカンダリレプリカへ証明書ファイルをコピーし、プライマリレプリカの証明書を使ってセカンダリレプリカ上に証明書を作成します。
その際、プライマリレプリカで証明書バックアップを暗号化した際に使用した復号用パスワードを指定する必要があります。
ステップ7:プライマリインスタンス - TDE暗号化の有効化
最後に、対象のデータベースでTDEを有効にするために以下のコマンドを実行します。
続いて、暗号化処理の進行状況を監視し、状態が「3」(暗号化完了)になっていることを確認します。
以下のクエリを実行すると、TDEが有効になっているデータベースの一覧を取得できます。
上記の結果から、TDE_DBデータベースでTDEが有効になっており、暗号化状態「3」はデータベースが完全に暗号化されたことを意味します。なお、ユーザーデータベースに対してTDEを有効にすると、tempdbも自動的に暗号化される点に注意してください。
ステップ8:可用性グループへのデータベース追加
それでは、暗号化したデータベースをAGグループに追加しましょう。
注意: TDEで暗号化されたデータベースを可用性グループに追加する場合、SSMSのGUI操作はサポートされていません。
T-SQLを使用してデータベースをAGグループに追加する必要があります。まずプライマリレプリカ上で、TDE_Testデータベースのフルバックアップとトランザクションログバックアップを取得し、セカンダリ側へコピーします。その後、セカンダリでNORECOVERYオプションを指定して復元します。
バックアップと復元が完了したら、以下のコマンドを実行してデータベースを可用性グループに追加します。
ステップ9:AGヘルスチェックの検証
ダッシュボードでAGの正常性状態を確認し、手動フェイルオーバーテストを実施して、TDEを有効化したデータベースが問題なく動作することを確認します。
シナリオ2:AGグループに既に存在するデータベースへのTDE構成
データベースが既にAGグループに追加されている場合でも、最初のシナリオで説明した手順と同様にしてTDEを有効化できます。
必要な手順は以下の通りです。
ステップ1:プライマリインスタンス - マスターキーの作成
ステップ2:プライマリインスタンス - 証明書の作成
ステップ3:プライマリインスタンス - DEKの作成
ステップ4:プライマリインスタンス - 証明書のバックアップ
ステップ5:セカンダリインスタンス - マスターキーの作成
ステップ6:セカンダリインスタンス - セカンダリ証明書の作成
ステップ7:プライマリインスタンス - TDE暗号化の有効化
ステップ9:AGヘルスチェックの検証
前のシナリオで両方のレプリカにマスターキーと証明書を作成済みの場合、ステップ1、2、4、5、6は省略できます。実際に必要なのは、ステップ3(DEKの作成)とステップ7(TDEの有効化)のみです。
- プライマリレプリカ:node1
- セカンダリレプリカ:node2
- AGグループ:TDE_AG
- AGデータベース:Test_tde
- TDE証明書:TDE_AG2021
ステップ3および7 - プライマリインスタンスでの実行
暗号化処理の進行状況を監視し、状態が「3」(暗号化完了)になっていることを確認します。
以下のクエリで、TDEが有効になったデータベースを確認できます。
最後にAGヘルスチェックを検証し、フェイルオーバーテストを実施して、すべてが正常に動作していることを確認してください。
シナリオ3:期限切れ証明書のローテーション
期限切れの証明書でもデータベースの通常の操作には支障ありませんが、TDE証明書の有効期限が近づいていることに気づいたら、ベストプラクティスとして証明書をローテーション(更新)しておきましょう。
TDE証明書の有効期限を確認したうえで、以下の手順に従ってSQL TDE証明書をローテーションします。
ステップ1:プライマリインスタンス - 新しい証明書の作成
ステップ2:プライマリインスタンス - 証明書のバックアップ
ステップ3:セカンダリインスタンス - セカンダリ証明書の作成
ステップ4:プライマリインスタンス - SQL TDE証明書のローテーション
Test_tdeデータベースの証明書有効期限を検証します。
ステップ5:AGヘルスチェックの検証
なお、古いバックアップを復元する可能性に備えて、期限切れとなったTDE証明書はしばらくの間保管しておいてください。新しい証明書が使用されるのは、キーのローテーション以降に取得したバックアップを復元する場合のみです。
まとめ
SQL ServerのTDE(透過的データ暗号化)は、物理ファイルを暗号化して顧客の機密情報を保護する強力な機能です。本記事では、AlwaysOn可用性グループのデータベースに対してTDEを構成するための、代表的な3つのシナリオを解説しました。
ご意見やご質問がございましたら、フィードバックタブよりお気軽にお寄せください。また、私たちとの対話も歓迎いたします。
-
RMANの増分バックアップで物理スタンバイデータベースをロールフォワードする方法
はじめに物理スタンバイデータベースでアーカイブREDOデータが欠落・破損したり、解消できないアーカイブギャップ(プライマリ側でのアーカイブログの取り込み漏れやアーカイブファイル自体の破損が原因)が発生したりすると、有効なバックアップが存在しない限り通常のリカバリは行えません。まずは、プライマリデータベースに対象のアーカイブログが残っているかを確認して問題を切り分けましょう。アーカイブログが破損していなければ、自動的にスタンバイへ転送されます。OSレベルでアーカイブログが破損しているもののバックアップが存在する場合は、そのバックアップからアーカイブログをリストアします。いずれの方法でも解決できな
-
Excelのフォーム機能を使ってデータベースを簡単に作成する方法【手順解説】
Excelでデータベースを作成したい場面は多くあります。従来のようにセルに一つずつ入力する代わりに、Excelにはデータ入力を効率化できる「フォーム」機能が用意されています。本記事では、フォームを使ってExcelでデータベースを作成する方法を、ステップバイステップでわかりやすく解説します。あわせて、フォーム操作に関する押さえておきたいポイントもご紹介します。 Excelのデータ入力フォームとは? 通常、Excelではセルに1件ずつデータを入力していきます。この方法では、特に大規模なデータベースを作成する際に入力作業が煩雑になりがちです。そんなときに活躍するのがデータ入力フォームです。フォームを