元帳の概要

適用対象:yesSQL Server 2022 (16.x) プレビュー YesAzure SQL Database

データベース システムに格納されているデータの整合性に関する信頼を確立することは、財務、医療、その他の機密データを管理するすべての組織にとって長年の問題でした。 台帳機能では、データベースの改ざん防止機能が提供されます。 監査者や他のビジネス関係者などの他の関係者に対して、データが改ざんされていないことを暗号学的に証明できます。

台帳は、攻撃者や、データベース管理者 (DBA)、システム管理者、クラウド管理者などの高い特権を持つユーザーからデータを保護するのに役立ちます。 従来の台帳と同様に、この機能では履歴データが保持されます。 データベース内の行が更新されると、以前の値が履歴テーブルに維持および保護されます。 台帳には、時間の経過とともにデータベースに加えられたすべての変更の記録が表示されます。

台帳と履歴データは透過的に管理され、アプリケーションの変更を行わずに保護が提供されます。 この機能では、監査、フォレンジクス、その他の目的で SQL クエリをサポートするために、履歴データはリレーショナル形式で維持されます。 SQL データベースの機能、柔軟性、パフォーマンスを維持しつつ、暗号化データの整合性が保証されます。

Diagram of the ledger table architecture.

台帳のユース ケース

台帳を使用した場合のいくつかの利点を見てみましょう。

監査の合理化

運用システムの値は、システムで消費および生成されているデータを信頼できるかどうかに基づきます。 データベース内のデータが悪意のあるユーザーによって改ざんされた場合、そのデータに依存するビジネス プロセスに致命的な結果が生じる可能性があります。

データに対する信頼を維持するには、潜在的な攻撃を減らすための適切なセキュリティ制御の有効化、バックアップと復元の実践、および徹底的なディザスター リカバリー手順の組み合わせが必要です。 外部関係者の監査により、これらの行為が確実に実施されます。

監査プロセスは、非常に時間のかかる作業です。 監査には、監査ログの確認、認証の検査、アクセス制御の検査など、実装された行為のオンサイト検査が必要です。 これらの手動プロセスでは、セキュリティの潜在的なギャップが明らかになる可能性はありますが、データが悪意をもって変更されていないという立証可能な証拠を提供することはできません。

台帳では、データ整合性の暗号学的証拠が監査者に提供されます。 この証拠は、監査プロセスを効率化するのに役立ちます。 また、システム データの整合性に関する否認防止も提供されます。

マルチパーティー ビジネス プロセス

サプライチェーン管理システムなどの一部のシステムでは、複数の組織が互いにビジネス プロセスの状態を共有する必要があります。 これらのシステムでは、どのようにデータを共有して信頼するかという課題に取り組んでいます。 多くの組織は、マルチパーティー ビジネス プロセスをデジタル変換するために、Ethereum や Hyperledger Fabric などの従来のブロックチェーンに目を向けています。

ブロックチェーンは、ネットワークに参加しているパーティー間での信頼性が低いマルチパーティー ネットワークにとって優れたソリューションです。 これらのネットワークの多くは、信頼が重要となる、基本的に一元化されたソリューションですが、完全に分散されたインフラストラクチャは、高負荷なソリューションです。

台帳は、これらのネットワークに対するソリューションを提供します。 参加者は、ネットワーク コンセンサスがブロックチェーン ネットワークにもたらす複雑さとパフォーマンスへの影響なしに、一元管理されたデータの整合性を検証できます。

ブロックチェーン用の信頼できるオフチェーン ストレージ

マルチパーティー ビジネス プロセスにブロックチェーン ネットワークが必要な場合、パフォーマンスを犠牲にせずにブロックチェーン上のデータに対してクエリを実行できるかどうかが課題になります。

この問題を解決するための一般的なパターンでは、ブロックチェーンからデータベースなどのオフチェーン ストアにデータをレプリケートします。 ただし、ブロックチェーンからデータベースにデータがレプリケートされた後は、データ整合性によってブロックチェーンのオファーが消失することが保証されます。 台帳により、ブロックチェーン ネットワークのオフチェーン ストレージにデータ整合性が提供され、システム全体を通じて完全なデータ信頼性が確保されます。

しくみ

台帳テーブル内のトランザクションによって変更されたすべての行は、トランザクション内のすべての行を表すルート ハッシュを作成する Merkle ツリー データ構造を使用して、暗号的に SHA-256 ハッシュされます。 次に、データベースによって処理されたトランザクションも、Merkle ツリー データ構造を使用して一緒に SHA-256 ハッシュされます。 その結果、ブロックを形成するルート ハッシュが作成されます。 その後、ブロックは、ブロックのルート ハッシュと、ハッシュ関数への入力として以前のブロックのルート ハッシュを使用して SHA-256 ハッシュされます。 そのハッシュによってブロックチェーンが形成されます。

データベース台帳のルート ハッシュ (データベース ダイジェストとも呼ばれます) には、暗号としてハッシュされたトランザクションが含まれており、データベースの状態を表します。 これらは、不変ポリシーを使用して構成された Azure Blob StorageAzure Confidential Ledger、オンプレミスの Write Once Read Many (WORM) ストレージ デバイスなど、改ざん防止ストレージ内のデータベースの外部で定期的に生成および格納できます。 データベース ダイジェストを後で使用し、ダイジェスト内のハッシュの値をデータベース内の計算されたハッシュと比較することにより、データベースの整合性を検証します。

台帳機能は、次の 2 つの形式のテーブルに導入されます。

更新可能な台帳テーブルと追加専用の台帳テーブルの両方で、改ざん防止機能とデジタル フォレンジクス機能が提供されます。

更新可能な台帳テーブル

更新可能な台帳テーブルは、System of Record (SOR) アプリケーションなど、データベース内のテーブルに更新や削除を実行することが予期されているアプリケーション パターンに最適です。 台帳機能を有効にするために、アプリケーションの既存のデータ パターンを変更する必要はありません。

更新可能な台帳テーブルでは、更新または削除を実行するトランザクションが発生したときに、データベース内の行に対する変更の履歴が追跡されます。 更新可能な台帳テーブルは、システムによってバージョン管理されたテーブルであり、ミラー化されたスキーマを持つ別のテーブルへの参照が含まれています。

もう 1 つのテーブルは、"履歴テーブル" と呼ばれます。 システムでは、このテーブルを使用して、台帳テーブルの行が更新または削除されるたびに、その行の以前のバージョンを自動的に格納します。 履歴テーブルは、更新可能な台帳テーブルが作成されると自動的に作成されます。

更新可能な台帳テーブルとそれに対応する履歴テーブル内の値によって、時間の経過に伴うデータベースの値の記録が提供されます。 システムによって生成された台帳ビューでは、更新可能な台帳テーブルと履歴テーブルが結合されているため、データベースのこの記録を簡単に照会できます。

更新可能な台帳テーブルの詳細については、「更新可能な台帳テーブルを作成して使用する」を参照してください。

追加専用の台帳テーブル

追加専用の台帳テーブルは、セキュリティ情報イベント管理 (SIEM) アプリケーションなど、挿入専用のアプリケーション パターンに最適です。 追加専用の台帳テーブルでは、API レベルで更新と削除がブロックされます。 このブロックにより、システム管理者や DBA などの特権ユーザーからの改ざん防止が強化されます。

システムに対して許可されるのは挿入のみなので、キャプチャする履歴がないため、追加専用の台帳テーブルには対応する履歴テーブルはありません。 更新可能な台帳テーブルと同様に、台帳ビューには、追加専用テーブルに行を挿入したトランザクションと、挿入を実行したユーザーに関する分析情報が提供されます。

追加専用台帳テーブルの詳細については、「追加専用台帳テーブルを作成して使用する」を参照してください。

台帳データベース

台帳データベースは、データベースの有効期間全体にわたってすべてのデータの整合性を保護する必要があるアプリケーションに使いやすいソリューションを提供します。 台帳データベースには、台帳テーブルのみを含めることができます。 (台帳テーブルではない) 標準テーブルの作成はサポートされていません。 各テーブルは、既定では、既定の設定で更新可能な台帳テーブルとして作成されるため、このようなテーブルの作成は非常に簡単です。 データベースは作成時に台帳データベースとして構成します。 一度作成すると、台帳データベースを通常のデータベースに変換することはできません。 詳細については、台帳データベースの構成に関するページを参照してください。

データベース ダイジェスト

データベース台帳内の最新ブロックのハッシュは、データベース ダイジェストと呼ばれます。 これは、ブロックが生成された時点のデータベース内のすべての台帳テーブルの状態を表します。

ブロックが形成されると、それに関連付けられているデータベース ダイジェストが公開され、データベース外部の改ざん防止ストレージに格納されます。 データベース ダイジェストは、生成された時点のデータベースの状態を表しているため、ダイジェストを改ざんから保護することが最も重要です。 ダイジェストを変更するアクセス権を持つ攻撃者は、次のことを実行できます。

  1. データベース内のデータを改ざんする。
  2. これらの変更を含むデータベースを表すハッシュを生成する。
  3. ブロック内のトランザクションの更新されたハッシュを表すダイジェストを変更する。

台帳を使用すると、データベース ダイジェストを自動的に生成して、不変ストレージAzure Confidential Ledger に格納し、改ざんを防ぐことができます。 また、ユーザーが手動でデータベース ダイジェストを生成し、自分の選択した場所に格納することもできます。 データベース ダイジェストは、台帳テーブルに格納されているデータが改ざんされていないことを確認するために、後で使用されます。

注意

ダイジェストの自動管理は、Azure SQL Database でのみサポートされます。 ダイジェストの手動管理は、Azure SQL Database と SQL Server の両方でサポートされています。

台帳の検証

台帳機能では、台帳システム ビュー、追加専用テーブル、履歴テーブルの内容を変更することはできません。 しかし、コンピューターを制御している攻撃者やシステム管理者は、すべてのシステム チェックをバイパスし、データを直接改ざんすることができます。 たとえば、攻撃者またはシステム管理者は、ストレージ内のデータベース ファイルを編集できます。 台帳は、このような攻撃を防ぐことはできませんが、台帳データを検証すると、改ざんが検出されることは保証されています。

台帳検証プロセスは、以前に生成された 1 つ以上のデータベース ダイジェストを入力として受け取り、現在の台帳テーブルの状態に基づいて、データベース台帳に格納されているハッシュを再度計算します。 計算されたハッシュが入力されたダイジェストと一致しない場合、検証は失敗し、データが改ざんされていることを示します。 その後、台帳では、検出されたすべての不整合が報告されます。

次の手順