Таблицы реестра только для добавления данных

Применимо к: SQL Server 2022 (16.x) и более поздние версии База данных SQL AzureУправляемый экземпляр SQL Azure

Таблицы реестра, поддерживающие только добавление записей, допускают только операции INSERT с вашими таблицами, что гарантирует, что привилегированные пользователи, такие как администраторы баз данных, не смогут изменять данные с помощью традиционных операций языка манипулирования данными. Таблицы реестра, доступные только для добавления, идеально подходят для систем, в которых записи не обновляются или не удаляются, таких как системы управления информационной безопасностью и событиями безопасности или блокчейн-системы, где данные необходимо реплицировать из блокчейна в базу данных. Так как в таблице только для добавления отсутствуют операции UPDATE и DELETE, нет необходимости использовать соответствующую таблицу журнала, как в случае с обновляемыми таблицами реестра.

Схема архитектуры таблиц реестра.

Вы можете создать таблицу реестра с добавлением без возможности изменения, указав аргумент LEDGER = ON в инструкции CREATE TABLE (Transact-SQL) и параметр APPEND_ONLY = ON.

Внимание

Таблицу, созданную в качестве таблицы реестра, нельзя обратить в таблицу, которая не выполняет функций реестра. В итоге злоумышленник не сможет временно удалять возможности реестра, вносить изменения в таблицу, а затем снова включать функцию реестра.

Схема реестровой таблицы с доступом только на добавление

Таблица только для добавления должна иметь следующие столбцы GENERATED ALWAYS, которые содержат метаданные, указывающие, какие транзакции внесли изменения в таблицу, и порядок операций в транзакции, которыми были обновлены строки. При создании таблицы реестра только для добавления в ней создаются столбцы GENERATED ALWAYS. Эти данные полезны для судебных целей, чтобы понять, как данные были вставлены с течением времени.

Если определения столбцов GENERATED ALWAYS в CREATE TABLE инструкции не указаны, система автоматически добавляет их с помощью следующих имен по умолчанию.

Имя столбца по умолчанию Тип данных Описание
ledger_start_transaction_id bigint Идентификатор транзакции, создавшей версию строки
реестр_начальный_номер_последовательности bigint Порядковый номер операции в транзакции, в которой создана версия строки

Представление реестра

Для каждой таблицы, которая доступна только для добавления, система автоматически создает представление, которое называется представлением "Книга учета". Представление реестра отображает все операции вставки строк, выполненные в таблице. Представление реестра в первую очередь полезно для обновляемых таблиц реестра, а не для таблиц реестра, поддерживающих только добавление, поскольку таблицы реестра, поддерживающие только добавление, не поддерживают UPDATE и DELETE. Представление реестра для ledger-таблиц только для добавления доступно для обеспечения согласованности как между обновляемыми ledger-таблицами, так и между ledger-таблицами только для добавления.

Схема представления реестра

Примечание.

Имена столбцов представления реестра можно настроить при создании таблицы с помощью параметра <ledger_view_option> в инструкции CREATE TABLE (Transact-SQL). Дополнительные сведения см. в параметрах представления реестра и соответствующих примерах в CREATE TABLE (Transact-SQL).

Имя столбца по умолчанию Тип данных Описание
ledger_transaction_id bigint Идентификатор транзакции, при выполнении которой была создана или удалена версия строки.
номер_последовательности_реестра bigint Порядковый номер операции на уровне строки в пределах транзакции в таблице.
ledger_operation_type tinyint Содержит 1 (INSERT) или 2 (DELETE). При вставке строки в таблицу реестра учета создается новая строка в представлении реестра, содержащая 1 в этом столбце. При удалении строки из таблицы реестра в представлении книги реестра создается новая строка, содержащая 2 в этом столбце. При обновлении строки в таблице реестра в представлении реестра появляются две новые строки. Одна строка содержит 2 (DELETE), а другая строка содержит 1 (INSERT) в этом столбце. DELETE не должно возникать в таблице реестра, допускающей только добавление.
Описание типа операции в реестре nvarchar(128) Содержит INSERT или DELETE. Дополнительные сведения см. в предыдущей строке.