원장 테이블을 확인하여 변조 감지
적용 대상: SQL Server 2022(16.x)
Azure SQL 데이터베이스
이 문서에서는 원장 테이블에 있는 데이터의 무결성을 확인합니다. 데이터베이스에서 자동 다이제스트 스토리지를 구성한 경우 자동 다이제스트 스토리지를 사용하여 T-SQL 섹션을 따릅니다. 그렇지 않으면 수동 생성 다이제스트를 사용하는 T-SQL 섹션을 따릅니다.
필수 구성 요소
- Azure SQL Database를 사용하는 경우 활성 Azure 구독을 갖습니다. 아직 없는 경우 체험 계정을 만들 수 있습니다.
- 업데이트 가능한 원장 테이블을 만들어 사용하거나, 추가 전용 원장 테이블을 만들어 사용합니다.
- SQL Server Management Studio 또는 Azure Data Studio.
- 자세한 저장 프로시저를 실행하려면 데이터베이스에서 ALLOW_SNAPSHOT_ISOLATION 데이터베이스 옵션을 사용하도록 설정해야 합니다.
데이터베이스를 대상으로 원장 확인 실행
SQL Server Management Studio 또는 Azure Data Studio를 사용하여 데이터베이스에 연결합니다.
다음 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을 열고 확인할 데이터베이스를 찾습니다. 보안에서 원장 옵션을 선택합니다. 원장 창에서 </> 데이터베이스 확인을 선택합니다.
쿼리 실행. digest_locations가 데이터베이스 다이제스트가 저장된 현재 위치와 모든 이전 위치를 반환합니다. Result는 원장 확인 성공 또는 실패를 반환합니다.
digest_locations 결과 집합을 열고 다이제스트 위치를 확인합니다. 다음 예제에서는 이 데이터베이스에 대한 두 개의 다이제스트 스토리지 위치를 보여 줍니다.
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)로 변경하지 않았는지 확인하고자 합니다.
확인하면 결과 창에 다음 메시지가 반환됩니다.
데이터베이스에 변조가 없으면 메시지는 다음과 같습니다.
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.