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

적용 대상: SQL Server 2022(16.x) Azure SQL Database

이 문서에서는 원장 테이블에 있는 데이터의 무결성을 확인합니다. Azure SQL Database에서 자동 다이제스트 스토리지 사용 설정을 사용하도록 설정한 경우 자동 다이제스트 스토리지를 사용하는 T-SQL 섹션을 따릅니다. 그렇지 않으면 수동 생성 다이제스트를 사용하는 T-SQL 섹션을 따릅니다.

필수 구성 요소

데이터베이스를 대상으로 원장 확인 실행

참고

자동 다이제스트 스토리지는 Azure SQL Database에만 적용됩니다. SQL Server를 사용하는 경우 수동 생성 다이제스트를 사용하는 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가 데이터베이스 다이제스트가 저장된 현재 위치와 모든 이전 위치를 반환합니다. Result는 원장 확인 성공 또는 실패를 반환합니다.

    Azure Data Studio를 사용하여 원장 확인을 실행하는 스크린샷

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

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

    • last_digest_block_idpath 위치에 저장된 마지막 다이제스트의 블록 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
       }
      ]
      

    중요

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

다음 단계