Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: 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. Дополнительные сведения см. в предыдущей строке. |