台帳テーブルを検証して改ざんを検出する

適用対象: SQL Server 2022 (16.x) Azure SQL データベース Azure SQL Managed Instance

この記事では、台帳テーブル内のデータの整合性を検証します。 お使いのデータベースで [自動ダイジェスト ストレージの有効化] 設定を有効にしている場合、「自動ダイジェスト ストレージを使用している T-SQL」セクションに従ってください。 有効にしていない場合、「手動生成されたダイジェストを使用している T-SQL」セクションに従ってください。

前提条件

データベースに対して台帳の検証を実行する

  1. SQL Server Management Studio または Azure Data Studio を使用して、データベースに接続します。

  2. 次の T-SQL ステートメントを使用して、新しいクエリを作成します。

    DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);SELECT @digest_locations as digest_locations;
    BEGIN TRY
        EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
        SELECT 'Ledger verification succeeded.' AS Result;
    END TRY
    BEGIN CATCH
        THROW;
    END CATCH
    

    Note

    検証スクリプトは Azure portal にもあります。 Azure portal を開き、検証するデータベースを見つけます。 [セキュリティ] で、[台帳] オプションを選択します。 [台帳] ウィンドウで、[</> データベースの確認] を選択します。

  3. クエリを実行します。 digest_locations によって、データベースのダイジェストが格納されている現在の場所と以前の場所が返されます。 [結果] に台帳検証の成功または失敗が返されます。

    Azure Data Studio を使用した台帳検証の実行のスクリーンショット。

  4. digest_locations 結果セットを開き、ダイジェストの場所を表示します。 次の例は、このデータベースの 2 つのダイジェスト ストレージの場所を示しています。

    • path は、ダイジェストの場所を示しています。

    • last_digest_block_id は、path の場所に格納されている最新のダイジェストのブロック ID を示します。

    • is_current は、path の場所が現在のもの (true) か以前のもの (false) であるかを示します。

      [
       {
           "path": "https:\/\/digest1.blob.core.windows.net\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000",
           "last_digest_block_id": 10016,
           "is_current": true
       },
       {
           "path": "https:\/\/jandersneweracl.confidential-ledger.azure.com\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000",
           "last_digest_block_id": 1704,
           "is_current": false
       }
      ]
      

    重要

    台帳検証を実行するときに、digest_locations の場所を調べて、検証に使用されるダイジェストが予期した場所から取得されるようにします。 権限のあるユーザーによって、構成済みでロックされている不変ポリシーを使用せずに、Azure Storage などの保護されていないストレージの場所にダイジェスト ストレージの場所が変更されていないことを確認する必要があります。

  5. 検証によって、[結果] ウィンドウに次のメッセージが返されます。

    • データベースに改ざんがない場合、メッセージは次のようになります。

      Ledger verification successful
      
    • データベースに改ざんがあった場合、[メッセージ] ウィンドウに次のエラーが表示されます。

      Failed to execute query. Error: The hash of block xxxx in the database ledger doesn't match the hash provided in the digest for this block.