추가 전용 원장 테이블

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

추가 전용 원장 테이블은 테이블 INSERT 작업만을 허용하여 데이터베이스 관리자와 같은 권한 있는 사용자가 기존 데이터 조작 언어를 통해 데이터를 변조할 수 없도록 합니다. 추가 전용 원장 테이블은 데이터를 블록체인에서 데이터베이스로 복제본(replica) 필요한 보안 정보 이벤트 및 관리 시스템 또는 블록체인 시스템과 같이 레코드를 업데이트하거나 삭제하지 않는 시스템에 적합합니다. 추가 전용 테이블에는 작업이 없거나 UPDATEDELETE 작업이 없으므로 업데이트 가능한 원장 테이블이 있으므로 해당 기록 테이블필요하지 않습니다.

Diagram that shows architecture of ledger tables.

CREATE TABLE(Transact-SQL) 문에서 인수를 LEDGER = ON 지정하고 옵션을 지정하여 추가 전용 원장 테이블을 만들 수 있습니다APPEND_ONLY = ON.

Important

원장 테이블로 테이블을 만든 후에는 원장 기능이 없는 테이블에 되돌리기 수 없습니다. 결과적으로 공격자가 일시적으로 원장 기능을 제거하고 테이블을 변경한 다음, 원장 기능을 다시 사용하도록 설정하지 못하게 됩니다.

추가 전용 원장 테이블 스키마

추가 전용 테이블에는 테이블을 변경한 트랜잭션과 트랜잭션에 의해 행이 업데이트된 작업의 순서를 알려주는 메타데이터가 포함된 GENERATED ALWAYS 열이 있어야 합니다. 추가 전용 원장 테이블을 만들면 원장 테이블에 GENERATED ALWAYS 열이 만들어집니다. 이 데이터는 시간이 지남에 따라 데이터가 삽입되는 방식을 이해하는 포렌식 용도에 유용합니다.

CREATE TABLE 문에서 열의 GENERATED ALWAYS 정의를 지정하지 않으면 시스템은 다음 기본 이름을 사용하여 열을 자동으로 추가합니다.

기본 열 이름 데이터 형식 설명
ledger_start_transaction_id bigint 행 버전을 만든 트랜잭션의 ID입니다.
ledger_start_sequence_number bigint 행 버전을 만든 트랜잭션 내 작업의 시퀀스 번호

원장 보기

모든 추가 전용 원장 테이블에 대해 시스템은 원장 보기라는 뷰를 자동으로 생성합니다. 원장 보기는 테이블에서 발생한 모든 행 삽입을 보고합니다. 원장 보기는 추가 전용 원장 테이블에는 기능이나 DELETE 기능이 없 UPDATE 으므로 추가 전용 원장 테이블이 아닌 업트래팅 가능한 원장 테이블에 주로 유용합니다. 추가 전용 원장 테이블의 원장 보기는 업데이트 가능한 원장 테이블과 추가 전용 원장 테이블 간의 일관성을 위해 사용할 수 있습니다.

원장 보기 스키마

참고 항목

CREATE TABLE(Transact-SQL) 문과 함께 매개 변수를 사용하여 <ledger_view_option> 테이블을 만들 때 원장 보기 열 이름을 사용자 지정할 수 있습니다. 자세한 내용은 원장 보기 옵션 및 CREATE TABLE(Transact-SQL)해당 예제를 참조하세요.

기본 열 이름 데이터 형식 설명
ledger_transaction_id bigint 행 버전을 만들거나 삭제한 트랜잭션의 ID입니다.
ledger_sequence_number bigint 테이블의 트랜잭션 내에서 행 수준 작업의 시퀀스 번호입니다.
ledger_operation_type tinyint 1 포함(INSERT) 또는 2 (DELETE). 원장 테이블에 행을 삽입하면 이 열에 포함된 원장 보기에 새 행이 생성됩니다 1 . 원장 테이블에서 행을 삭제하면 이 열에 포함된 원장 보기에 새 행이 생성됩니다 2 . 원장 테이블에서 행을 업데이트하면 원장 보기에 2개의 새 행이 생성됩니다. 이 열에서 한 행에는 2(DELETE)이 포함되고 다른 행에는 1(INSERT)이 포함됩니다. 추가 전용 원장 테이블에서 DELETE가 발생하지 않아야 합니다.
ledger_operation_type_desc nvarchar(128) INSERT 또는 DELETE를 포함합니다. 자세한 내용은 이전 행을 참조하세요.