원장 개요

적용 대상: SQL Server 2022(16.x) Azure SQL 데이터베이스

데이터베이스 시스템에 저장된 데이터의 무결성에 대한 신뢰를 얻는 일은 금융, 의료 및 기타 중요한 데이터를 관리하는 모든 조직에서 오랫동안 문제가 되었습니다. 원장 기능은 데이터베이스에서 변조 증거 기능을 제공합니다. 감사자 또는 다른 비즈니스 당사자와 같은 다른 당사자에게 데이터가 변조되지 않았음을 암호화된 방식으로 증명할 수 있습니다.

원장을 사용하면 DBA(데이터베이스 관리자), 시스템 관리자 및 클라우드 관리자를 비롯한 모든 공격자와 높은 권한의 사용자로부터 데이터를 보호할 수 있습니다. 기존 원장과 마찬가지로 이 기능은 기록 데이터를 유지합니다. 데이터베이스에서 행을 업데이트하면 행의 이전 값이 기록 테이블에서 유지되고 보호됩니다. 원장에는 시간별로 데이터베이스에 적용된 모든 변경 내용이 기록됩니다.

원장과 기록 데이터는 투명하게 관리되기 때문에 애플리케이션을 변경하지 않고도 보호할 수 있습니다. 이 기능은 감사, 포렌식 및 기타 목적을 위한 SQL 쿼리를 지원하기 위해 관계형 형식으로 기록 데이터를 유지합니다. 또한 암호화 데이터 무결성을 보장하면서 SQL 데이터베이스의 기능, 유연성 및 성능은 그대로 유지할 수 있습니다.

원장 테이블 아키텍처의 다이어그램

원장 사용 사례

원장 사용의 몇 가지 이점을 살펴보겠습니다.

감사 간소화

모든 프로덕션 시스템의 값은 시스템에서 사용하고 생성하는 데이터의 신뢰성을 기반으로 합니다. 악의적인 사용자가 데이터베이스의 데이터를 변조한 경우, 해당 데이터를 사용하는 비즈니스 프로세스에서 심각한 결과가 발행할 수 있습니다.

데이터에 대한 신뢰를 유지하려면 잠재적 공격을 줄이는 적절한 보안 제어, 백업 및 복원 방법과 철저한 재해 복구 절차를 모두 사용해야 합니다. 외부 당사자의 감사는 이러한 절차가 시행되는지 확인해야 합니다.

감사 프로세스는 시간이 대단히 오래 걸리는 활동입니다. 감사에는 감사 로그 검토, 인증 검사 및 액세스 제어 검사 같이 구현된 절차에 대한 현장 검사가 필요합니다. 이러한 수동 프로세스는 보안의 잠재적 간극을 노출할 수 있지만 데이터가 악의적으로 변경되지 않았음을 증명하지는 못합니다.

원장에는 감사자에게 데이터 무결성에 대한 암호화 증명을 제공합니다. 이 증명은 감사 프로세스를 간소화하는 데 도움이 될 수 있습니다. 또한 시스템 데이터의 무결성에 대한 거부 방지(nonrepudiation)도 제공합니다.

다자간 비즈니스 프로세스

공급망 관리 시스템과 같은 일부 시스템에서는 여러 조직이 비즈니스 프로세스의 상태를 서로 공유해야 합니다. 이러한 시스템은 데이터를 공유하고 신뢰하는 방법에 대한 어려움을 겪고 있습니다. 여러 조직에서 다자간 비즈니스 프로세스를 디지털로 변환하고자 Ethereum이나 Hyperledger Fabric 같은 기존 블록체인으로 전환하고 있습니다.

블록체인은 네트워크에 참여하는 당사자 간의 신뢰 수준이 낮은 다자간 네트워크에 적합한 솔루션입니다. 이러한 네트워크의 대부분은 근본적으로 신뢰를 중시하는 중앙 집중식 솔루션인 반면, 완전히 분산된 인프라는 작업량이 많은 솔루션입니다.

원장은 이러한 네트워크에 대한 솔루션을 제공합니다. 참가자는 블록체인 네트워크에서 네트워크 합의를 도입하는 복잡하고 성능에 영향을 주는 작업 대신 중앙에서 보관하는 데이터의 무결성을 확인할 수 있습니다.

고객 성공

블록체인에 대해 신뢰할 수 있는 오프 체인 스토리지

다자간 업무 프로세스에 블록체인 네트워크가 필요한 경우 성능 저하 없이 블록체인에서 데이터를 쿼리하는 일은 쉽지 않습니다.

이 문제를 해결하는 일반적인 방법에는 블록체인의 데이터를 데이터베이스 같은 오프 체인 저장소로 복제하는 작업이 동반됩니다. 그러나 데이터가 블록체인에서 데이터베이스로 복제되면 블록체인이 제공하는 데이터 무결성은 사라집니다. 원장은 블록체인 네트워크의 오프체인 스토리지에 필요한 데이터 무결성을 제공하므로 전체 시스템에서의 완전한 데이터 신뢰를 보장하는 데 도움이 됩니다.

작동 방식

원장 테이블에서 트랜잭션에 의해 수정된 모든 행은 트랜잭션의 모든 행을 나타내는 루트 해시를 만드는 Merkle 트리 데이터 구조를 사용하여 암호로 SHA-256 해시됩니다. 그런 다음 데이터베이스에서 처리하는 트랜잭션도 Merkle 트리 데이터 구조를 바탕으로 SHA-256 해시됩니다. 결과는 블록을 형성하는 루트 해시입니다. 그런 다음, 블록의 루트 해시와 이전 블록의 루트 해시를 해시 함수에 대한 입력으로 사용하여 블록이 SHA-256 해시됩니다. 이 해시는 블록체인을 형성합니다.

데이터베이스 다이제스트라고도 하는 데이터베이스 원장의 루트 해시는 암호화된 해시 트랜잭션을 포함하고 데이터베이스의 상태를 나타냅니다. 이들은 불변성 정책과 함께 구성된 Azure Blob Storage, Azure Confidential Ledger 또는 온-프레미스 WORM(Write Once Read Many) 스토리지 디바이스와 같이 변조 방지 스토리지에서 데이터베이스 외부에 주기적으로 생성되고 저장될 수 있습니다. 데이터베이스 다이제스트는 나중에 다이제스트의 해시 값을 데이터베이스에 있는 계산된 해시와 비교하여 데이터베이스의 무결성을 확인하는 데 사용합니다.

원장 기능은 다음 두 가지 형식으로 테이블에 도입됩니다.

업데이트 가능한 원장 테이블과 추가 전용 원장 테이블 모두 변조 증거 및 디지털 포렌식 기능을 제공합니다.

업데이트 가능한 원장 테이블

업데이트 가능한 원장 테이블은 데이터베이스에 있는 테이블에 대한 업데이트와 삭제를 실행하는 애플리케이션 패턴(예: SOR(System of Record) 애플리케이션)에 적합합니다. 애플리케이션의 기존 데이터 패턴을 변경하지 않아도 원장 기능을 사용하도록 설정할 수 있습니다.

업데이트 가능한 원장 테이블은 업데이트 또는 삭제를 수행하는 트랜잭션이 발생하는 경우 데이터베이스의 모든 행에 대한 변경 기록을 추적합니다. 업데이트 가능한 원장 테이블은 미러된 스키마를 사용하는 다른 테이블에 대한 참조를 포함하는 시스템 버전 관리 테이블입니다.

다른 테이블을 기록 테이블이라고 합니다. 시스템에서는 이 테이블을 사용하여 원장 테이블의 행이 업데이트되거나 삭제될 때마다 이전 버전의 행을 자동으로 저장합니다. 기록 테이블은 업데이트 가능한 원장 테이블을 만들 때 자동으로 생성됩니다.

업데이트 가능한 원장 테이블 및 해당하는 기록 테이블의 값을 살펴보면 시간에 따른 데이터베이스 값 기록을 확인할 수 있습니다. 업데이트 가능한 원장 테이블과 기록 테이블에 시스템에서 생성한 원장 보기가 조인되어 이러한 데이터베이스 기록을 쉽게 쿼리할 수 있습니다.

업데이트 가능한 원장 테이블에 대한 자세한 방법은 업데이트 가능한 원장 테이블 만들기 및 사용을 참조하세요.

추가 전용 원장 테이블

추가 전용 원장 테이블은 SIEM(보안 정보 및 이벤트 관리) 애플리케이션 같은 삽입 전용 애플리케이션 패턴에 적합합니다. 추가 전용 원장 테이블은 API 수준에서 업데이트 및 삭제를 차단합니다. 이 차단은 시스템 관리자 및 DBA와 같은 권한 있는 사용자로부터 더 많은 변조 보호를 제공합니다.

시스템으로의 삽입만 허용되기 때문에 캡처할 기록이 없어 추가 전용 원장 테이블에는 해당하는 기록 테이블이 없습니다. 업데이트 가능한 원장 테이블처럼 원장 보기는 행을 추가 전용 테이블에 삽입한 트랜잭션과 삽입을 수행한 사용자에 대한 인사이트를 제공합니다.

추가 전용 원장 테이블에 대한 자세한 내용은 추가 전용 원장 테이블 만들기 및 사용을 참조하세요.

원장 데이터베이스

원장 데이터베이스는 데이터베이스의 전체 수명 주기 동안 모든 데이터의 무결성을 보호해야 하는 애플리케이션을 위한 간편한 솔루션을 제공합니다. 원장 데이터베이스는 원장 테이블만 포함할 수 있습니다. 원장 테이블이 아닌 일반 테이블 만들기는 지원되지 않습니다. 각 테이블은 기본적으로 기본 설정을 사용하여 업데이트 가능한 원장 테이블로 만들어지기 때문에 이러한 테이블을 매우 쉽게 만들 수 있습니다. 데이터베이스를 만들 때 원장 데이터베이스로 구성합니다. 만든 후에는 원장 데이터베이스를 일반 데이터베이스로 변환할 수 없습니다. 자세한 내용은 원장 데이터베이스 구성을 참조하세요.

데이터베이스 다이제스트

데이터베이스 원장에서 최신 블록의 해시를 데이터베이스 다이제스트라고 합니다. 이것은 블록이 생성될 때 데이터베이스에 있는 모든 원장 테이블의 상태를 나타냅니다.

블록이 구성되면 블록과 연결된 데이터베이스 다이제스트가 데이터베이스 외부에 있는 변조 방지 스토리지에 게시되고 저장됩니다. 데이터베이스 다이제스트는 다이제스트가 생성된 시점의 데이터베이스 상태를 나타내므로 다이제스트의 변조 방지가 무엇보다도 중요합니다. 다이제스트를 수정할 수 있는 액세스 권한이 있는 공격자는 다음을 수행할 수 있습니다.

  1. 데이터베이스의 데이터를 변조합니다.
  2. 이러한 변경 내용이 있는 데이터베이스를 나타내는 해시를 생성합니다.
  3. 블록에 있는 트랜잭션의 업데이트된 해시를 나타내도록 다이제스트를 수정합니다.

원장을 이용하면 데이터베이스 다이제스트를 자동으로 생성하고 변경 불가능한 스토리지Azure Confidential Ledger에 저장하여 변조를 방지할 수 있습니다. 또한 사용자는 데이터베이스 다이제스트를 수동으로 생성한 다음, 원하는 위치에 저장할 수도 있습니다. 데이터베이스 다이제스트는 나중에 원장 테이블에 저장된 데이터가 변조되지 않았음을 확인하는 데 사용합니다.

참고

자동 다이제스트 관리는 Azure SQL Database 및 SQL Server 2022(16.x) 이상에서만 지원됩니다. 수동 다이제스트 관리는 Azure SQL Database 및 SQL Server 모두에서 지원됩니다.

원장 확인

원장 기능은 원장 시스템 뷰, 추가 전용 테이블 및 기록 테이블의 콘텐츠를 수정할 수 없습니다. 그러나 시스템을 제어하는 공격자 또는 시스템 관리자가 모든 시스템 검사를 우회하고 데이터를 직접 변조할 수 있습니다. 예를 들어 공격자 또는 시스템 관리자는 스토리지에 있는 데이터베이스 파일을 편집할 수 있습니다. 원장은 이러한 공격을 방지하지는 못하지만 원장 데이터를 확인할 때 변조를 감지할 수 있는 있습니다.

원장 확인 프로세스는 이전에 생성된 데이터베이스 다이제스트 하나 이상을 입력으로 사용하고, 데이터베이스 원장에 저장된 해시를 원장 테이블의 현재 상태를 기반으로 다시 계산합니다. 계산된 해시가 입력 다이제스트와 일치하지 않는 경우 확인에 실패하여 데이터가 변조되었음을 나타냅니다. 그런 다음, 원장이 검색한 모든 불일치를 보고합니다.

다음 단계

추가 정보