원장 테이블을 확인하여 변조 탐지
적용 대상: SQL Server 2022(16.x) Azure SQL 데이터베이스 Azure 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를 사용하여 Azure SQL Database의 데이터베이스에 연결합니다.
다음 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.