다이제스트 관리

적용 대상: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

데이터베이스 다이제스트

데이터베이스 원장의 최신 블록 해시를 데이터베이스 다이제스트라고 합니다. 블록이 생성되었을 때 데이터베이스에 있는 모든 원장 테이블의 상태를 나타냅니다. 데이터베이스 다이제스트 생성은 최근에 추가된 블록의 해시만 계산하기 때문에 효율적입니다.

데이터베이스 다이제스트는 시스템에서 자동으로 생성하거나 사용자가 수동으로 생성할 수 있습니다. 나중에 이를 사용하여 데이터베이스의 무결성을 확인할 수 있습니다.

데이터베이스 다이제스트는 블록 ID에 대한 메타데이터와 함께 최신 블록의 해시를 포함하는 JSON 문서의 형태로 생성됩니다. 메타데이터에는 다이제스트가 생성된 시간과 이 블록에서 이루어진 마지막 트랜잭션의 커밋 타임스탬프가 포함됩니다.

데이터베이스의 확인 프로세스와 무결성은 입력 다이제스트의 무결성에 따라 달라집니다. 이를 위해 데이터베이스에서 추출된 데이터베이스 다이제스트는 데이터베이스의 권한이 높은 사용자 또는 공격자가 변조할 수 없는 신뢰할 수 있는 스토리지에 저장되어야 합니다.

데이터베이스 다이제스트의 자동 생성 및 스토리지

참고 항목

SQL Server에서 데이터베이스 다이제스트의 자동 생성 및 스토리지는 Azure Storage 계정만 지원합니다.

원장은 Azure Blob Storage의 변경할 수 없는 스토리지 기능Azure Confidential Ledger와 통합됩니다. 이 통합은 Azure에서 보안 스토리지 서비스를 제공하여 잠재적인 변조로부터 데이터베이스 다이제스트를 보호합니다. 이 통합은 사용자가 가용성 및 지리적 복제본(replica) 걱정 없이 다이제스트 관리를 자동화할 수 있는 간단하고 비용 효율적인 방법을 제공합니다. Azure Confidential Ledger는 권한 있는 관리자가 다이제스트에 액세스하는 것을 염려하는 고객을 위해 더 강력한 무결성을 보장합니다. 이 표에서는 Azure Blob Storage의 변경이 불가능한 스토리지 기능을 Azure Confidential Ledger와 비교합니다.

Azure Portal, PowerShell 또는 Azure CLI를 통해 데이터베이스 다이제스트의 자동 생성 및 스토리지를 구성할 수 있습니다. 자세한 내용은 자동 다이제스트 스토리지 사용을 참조하세요. 자동 생성 및 스토리지를 구성하면 데이터베이스 다이제스트가 30초의 미리 정의된 간격으로 생성되고 선택한 스토리지 서비스에 업로드됩니다. 시스템에서 30초 간격으로 트랜잭션이 발생하지 않으면 데이터베이스 다이제스트가 생성 및 업로드되지 않습니다. 이 메커니즘을 통해 데이터베이스에서 데이터가 업데이트된 경우에만 데이터베이스 다이제스트가 생성됩니다. 엔드포인트가 Azure Blob Storage인 경우 Azure SQL Database 또는 Azure SQL Managed Instance의 논리 서버는 sqldbledgerdigests라는 새 컨테이너를 만들고 다음과 같은 ServerName/DatabaseName/CreationTime명명 패턴을 사용합니다. 이름이 같은 데이터베이스를 삭제하고 다시 만들거나 복원하여 동일한 이름으로 데이터베이스의 다른 화신 을 수행할 수 있으므로 생성 시간이 필요합니다. 자세한 내용은 다이제스트 관리 고려 사항을 참조 하세요.

참고 항목

SQL Server의 경우 사용자가 컨테이너를 수동으로 만들어야 합니다.

Azure Storage 계정 불변성 정책

데이터베이스 다이제스트의 스토리지에 Azure Storage 계정을 사용하는 경우 프로비전 후 컨테이너에서 불변성 정책을 구성하여 데이터베이스 다이제스트가 변조로부터 보호되도록 합니다. 불변성 정책에서 보호된 추가 쓰기가 Blob을 추가하도록 허용하고 정책이 잠겨 있는지 확인합니다.

Azure Storage 계정 권한

Azure SQL Database 또는 Azure SQL Managed Instance를 사용하는 경우 논리 서버 또는 관리되는 인스턴스(시스템 ID)에 스토리지 Blob 데이터 기여자 역할에 다이제스트를 추가하여 다이제스트를 작성할 수 있는 충분한 RBAC(역할 기반 액세스 제어) 권한이 있는지 확인합니다. 활성 지역 복제본(replica)tion 또는 자동 장애 조치(failover) 그룹을 사용하는 경우 보조 복제본(replica) Azure Storage 계정에 대해 동일한 RBAC 권한이 있는지 확인합니다.

SQL Server를 사용하는 경우 SQL Server가 Azure Storage 계정에 연결하고 인증할 수 있도록 다이제스트 컨테이너에 SAS(공유 액세스 서명)를 만들어야 합니다.

  • Azure Storage 계정에 sqldbledgerdigests라는 컨테이너를 만듭니다.
  • 읽기, 추가, 만들기, 쓰기목록 권한을 사용하여 컨테이너에 정책을 만들고 공유 액세스 서명 키를 생성합니다.
  • 다이제스트 파일 스토리지에 사용되는 sqldbledgerdigests 컨테이너의 경우 이름이 컨테이너 경로와 일치하는 SQL Server 자격 증명 을 만듭니다.

다음 예제에서는 Azure Storage 컨테이너, 정책 및 SAS 키가 생성되었다고 가정합니다. 컨테이너의 다이제스트 파일에 액세스하려면 SQL Server에서 필요합니다.

다음 코드 조각에서 SAS 키로 바꿉 <your SAS key> 니다. SAS 키는 다음과 같습니다 'sr=c&si=<MYPOLICYNAME>&sig=<THESHAREDACCESSSIGNATURE>'.

CREATE CREDENTIAL [https://ledgerstorage.blob.core.windows.net/sqldbledgerdigests]  
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = '<your SAS key>'   

Azure 기밀 원장 권한

Azure SQL Database 또는 Azure SQL Managed Instance를 사용하는 경우 논리 서버 또는 관리되는 인스턴스(시스템 ID)에 기여자 역할에 추가하여 다이제스트를 작성할 수 있는 충분한 권한이 있는지 확인합니다. 이렇게 하려면 Azure Confidential Ledger 사용자 관리에 대한 단계를 수행합니다.

참고 항목

SQL Server에서 데이터베이스 다이제스트의 자동 생성 및 스토리지는 Azure Storage 계정만 지원합니다.

Azure Confidential Ledger에서 작동하도록 Azure SQL Managed Instance NSG 규칙 구성

Azure SQL Managed Instance를 사용하는 경우 Azure 기밀 원장과 통신하도록 Azure SQL Managed Instance의 가상 네트워크 규칙을 구성해야 합니다. 자세한 내용은 Azure Confidential Ledger에서 작동하도록 Azure SQL Managed Instance NSG 규칙 구성을 참조 하세요.

데이터베이스 다이제스트 수동 생성 및 스토리지

또한 주문형 데이터베이스 다이제스트를 생성하여 신뢰할 수 있는 스토리지 대상으로 간주되는 모든 서비스 또는 디바이스에 다이제스트를 수동으로 저장할 수 있습니다. 예를 들어 온-프레미스 쓰기를 한 번 선택하고 WORM(여러 디바이스)을 대상으로 읽을 수 있습니다. SQL Server Management Studio 또는 Azure Data Studio에서 sys.sp_generate_database_ledger_digest 저장 프로시저를 실행하여 데이터베이스 다이제스트를 수동으로 생성합니다.

EXECUTE sp_generate_database_ledger_digest;

반환된 결과 집합은 단일 데이터 행입니다. 이러한 결과 집합을 다음과 같이 신뢰할 수 있는 스토리지 위치에 JSON 문서로 저장해야 합니다.

    {
        "database_name":  "ledgerdb",
        "block_id":  0,
        "hash":  "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
        "last_transaction_commit_time":  "2020-11-12T18:01:56.6200000",
        "digest_time":  "2020-11-12T18:39:27.7385724"
    }

사용 권한

데이터베이스 다이제스트를 생성하려면 권한이 필요합니다 GENERATE LEDGER DIGEST . 원장 테이블과 관련된 권한에 대한 자세한 내용은 권한을 참조하세요.

다이제스트 관리 고려 사항

데이터베이스 복원

지정 시간 복원이라고도 하는 이전 시점으로 데이터베이스를 복원하는 작업은 오류가 발생하고 사용자가 데이터베이스의 상태를 이전 시점으로 신속하게 되돌려야 할 때 자주 사용됩니다. 생성된 다이제스트를 Azure Storage 또는 Azure Confidential Ledger 에 업로드할 때 이러한 다이제스트가 매핑되는 데이터베이스의 생성 시간이 캡처됩니다. 데이터베이스가 복원될 때마다 새 만들기 시간으로 태그가 지정되고 이 기술을 통해 데이터베이스의 다양한 "화신"에 다이제스트를 저장할 수 있습니다. SQL Server의 경우 다이제스트 업로드를 처음으로 사용하도록 설정한 현재 UTC 시간입니다 . 원장은 복원 작업이 발생한 시간에 대한 정보를 유지하므로 확인 프로세스에서 데이터베이스의 다양한 인카네이션에서 관련 다이제스트를 모두 사용할 수 있습니다. 또한 사용자는 다양한 생성 시간의 다이제스트를 모두 검사하여 데이터베이스가 복원된 시간 및 지정 시간을 식별할 수 있습니다. 이 데이터는 변경할 수 없는 스토리지에 기록되므로 이 정보도 보호됩니다.

참고 항목

Azure SQL Managed Instance에서 데이터베이스 백업의 네이티브 복원을 수행하는 경우 Azure Portal, PowerShell 또는 Azure CLI를 사용하여 다이제스트 경로를 수동으로 변경해야 합니다.

활성 지역 복제본(replica) 및 Always On 가용성 그룹

활성 지역 복제본(replica) 또는 자동 장애 조치(failover) 그룹은 Azure SQL Database 또는 Azure SQL Managed Instance에 대해 구성할 수 있습니다. 지리적 지역 간 복제는 성능상 이유로 비동기적이므로 보조 데이터베이스가 주 데이터베이스에 비해 약간 지연될 수 있습니다. 지리적 장애 조치(failover)가 발생하는 경우 아직 복제되지 않은 최신 데이터가 모두 손실됩니다. 원장은 지리적 보조 데이터베이스에 복제된 데이터에 대해서만 데이터베이스 다이제스트를 실행하여 다이제스트가 지리적 장애 조치(failover)에서 손실될 수 있는 데이터를 참조하지 않도록 합니다. 이는 데이터베이스 다이제스트의 자동 생성 및 저장에만 적용됩니다. 장애 조치(failover) 그룹에서 주 데이터베이스와 보조 데이터베이스는 모두 동일한 다이제스트 경로를 갖습니다. 장애 조치(failover)를 수행하는 경우에도 주 데이터베이스와 보조 데이터베이스 모두에 대해 다이제스트 경로가 변경되지 않습니다.

장애 조치(failover) 그룹이 삭제되거나 링크를 삭제하면 두 데이터베이스가 모두 주 데이터베이스로 작동합니다. 이때 이전 보조 데이터베이스의 다이제스트 경로가 변경되고 RemovedSecondaryReplica 폴더를 경로에 추가합니다.

데이터베이스가 SQL Server의 Always On 가용성 그룹 또는 Managed Instance 링크의 일부인 경우 활성 지역 복제본(replica)tion과 동일한 원칙이 사용됩니다. 다이제스트 업로드는 모든 트랜잭션이 보조 복제본(replica) 복제본(replica) 경우에만 수행됩니다.