원장 테이블을 확인하여 변조 탐지
적용 대상: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance
이 문서에서는 원장 테이블에 있는 데이터의 무결성을 확인합니다. 데이터베이스에서 자동 다이제스트 스토리지를 구성한 경우 자동 다이제스트 스토리지 섹션을 사용하여 T-SQL을 따릅니다. 그렇지 않으면 수동으로 생성된 다이제스트 섹션을 사용하여 T-SQL을 따릅니다.
필수 조건
- Azure SQL Database 또는 Azure SQL Managed Instance를 사용하는 경우 활성 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가 데이터베이스 다이제스트가 저장된 현재 위치와 모든 이전 위치를 반환합니다. 결과는 원장 확인의 성공 또는 실패를 반환합니다.
digest_locations 결과 집합을 열어 다이제스트의 위치를 확인합니다. 다음 예제에서는 이 데이터베이스에 대한 두 개의 다이제스트 스토리지 위치를 보여 줍니다.
경로 는 다이제스트의 위치를 나타냅니다.
last_digest_block_id 경로 위치에 저장된 마지막 다이제스트의 블록 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 } ]
Important
원장 확인을 실행할 때 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.
관련 콘텐츠
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기