원장 테이블을 확인하여 변조 탐지

적용 대상: SQL Server 2022 (16.x) Azure SQL DatabaseAzure 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
    

    참고 항목

    확인 스크립트는 Azure Portal에서도 찾을 수 있습니다. Azure Portal을 열고 확인할 데이터베이스를 찾습니다. 보안에서 옵션을 선택합니다. 원장 창에서 </> 데이터베이스 확인을 선택합니다.

  3. 쿼리를 실행합니다. digest_locations가 데이터베이스 다이제스트가 저장된 현재 위치와 모든 이전 위치를 반환합니다. 결과는 원장 확인의 성공 또는 실패를 반환합니다.

    Screenshot of running ledger verification by using Azure Data Studio.

  4. digest_locations 결과 집합을 열어 다이제스트의 위치를 확인합니다. 다음 예제에서는 이 데이터베이스에 대한 두 개의 다이제스트 스토리지 위치를 보여 줍니다.

    • 경로 는 다이제스트의 위치를 나타냅니다.

    • last_digest_block_id 경로 위치에 저장된 마지막 다이제스트의 블록 ID를 나타냅니다.

    • is_currentpath의 위치가 현재(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
       }
      ]
      

    Important

    원장 확인을 실행할 때 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.