Partilhar via


Tabelas contábeis atualizáveis

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Azure SQL DatabaseAzure SQL Managed Instance

As tabelas de registo atualizáveis são tabelas versionadas pelo sistema nas quais os utilizadores podem realizar atualizações e eliminações, ao mesmo tempo que fornecem capacidade de detetar adulterações. Quando ocorrem atualizações ou eliminações, todas as versões anteriores de uma linha são preservadas numa tabela secundária, conhecida como tabela de histórico. A tabela de histórico reflete o esquema da tabela de registo atualizável. Quando uma linha é atualizada, a versão mais recente da linha permanece na tabela do livro-compo, enquanto a sua versão anterior é inserida na tabela de histórico pelo sistema, de forma transparente para a aplicação.

Tanto as tabelas de registo atualizáveis como as tabelas temporais são tabelas com versão do sistema, para as quais o mecanismo de base de dados captura versões históricas de linhas em tabelas secundárias de histórico. Qualquer uma das tecnologias oferece benefícios únicos. As tabelas de registo atualizáveis tornam evidente tanto a manipulação dos dados atuais como históricas. As tabelas temporais suportam consultar os dados armazenados em qualquer momento em vez de apenas os dados corretos no momento atual. Pode usar ambas as tecnologias em conjunto, criando tabelas que são tanto tabelas de registo atualizáveis como tabelas temporais.

Diagrama que mostra a arquitetura da tabela de registos.

Pode criar uma tabela de registos atualizável especificando o LEDGER = ON argumento na sua instrução CREATE DATABASE (Transact-SQL).

Sugestão

LEDGER = ON é opcional ao criar tabelas de registo atualizáveis numa base de dados de registo. Por defeito, cada tabela é uma tabela de registo atualizável numa base de dados de registo.

Para informações sobre as opções disponíveis quando especifica o argumento LEDGER na sua instrução T-SQL, veja CRIAR TABELA (Transact-SQL).

Importante

Depois de criada uma tabela de registo, não pode ser revertida para uma tabela que não seja uma tabela de registo. Como resultado, um atacante não pode remover temporariamente as capacidades do livro de registo numa tabela de registo, fazer alterações e depois reativar a funcionalidade do livro de registos.

Schema de tabela de registo atualizável

Uma tabela de ledger atualizável precisa ter as seguintes colunas GENERATED ALWAYS que contenham metadados indicando quais transações fizeram alterações à tabela e a ordem das operações pelas quais as linhas foram atualizadas. Estes dados são úteis para fins forenses para compreender como os dados foram inseridos ao longo do tempo.

Se não especificar as colunas necessárias GENERATED ALWAYS das tabelas de contas e do histórico de contas na instrução CREATE TABLE (Transact-SQL), o sistema adiciona automaticamente as colunas e utiliza os seguintes nomes como valores padrão. Para mais informações, veja exemplos em Criação de uma tabela de registos atualizável.

Nome padrão da coluna Tipo de dados Description
ledger_start_transaction_id bigint O ID da transação que criou a versão de linha
ID_de_transação_final_do_razão bigint O ID da transação que eliminou uma versão da linha
número_de_sequência_de_início_do_ledger bigint O número de sequência de uma operação numa transação que resulta numa versão de linha.
número_de_sequência_final_do_ledger bigint O número de sequência de uma operação dentro de uma transação que eliminou uma versão de linha

Tabela de histórico

A tabela de histórico é criada automaticamente quando é criada uma tabela de registo atualizável. A tabela de histórico regista os valores históricos das linhas alteradas por atualizações e eliminações de dados na tabela de razão atualizável. O esquema da tabela de histórico espelha o da tabela de registos atualizável à qual está associada.

Quando crias uma tabela de registo atualizável, podes especificar o nome do esquema para conter a tua tabela de histórico e o nome da tabela de histórico, ou fazer com que o sistema gere o nome da tabela de histórico e o adicione ao mesmo esquema da tabela de registo. Tabelas de história com nomes gerados pelo sistema são chamadas tabelas de história anónimas. A convenção de nomenclatura para uma tabela de história anónima é <schema>...<updatableledgertablename> MSSQL_LedgerHistoryFor_<GUID>.

Vista do livro-razão

Para cada tabela atualizável do livro-razão, o sistema gera automaticamente uma visualização, chamada visualização de livro-razão. A visualização do livro razão é uma junção da tabela de livro razão atualizável com a sua tabela de histórico associada. A visão do livro-razão reporta todas as modificações de linhas que ocorreram na tabela do livro-razão atualizável, combinando com os dados históricos na tabela de histórico. Esta perspetiva permite aos utilizadores, seus parceiros ou auditores analisar todas as operações históricas e detetar potenciais manipulações. Cada operação de linha é acompanhada pelo ID da transação ativa, bem como se a operação foi um DELETE ou um INSERT. Os utilizadores podem obter mais informações sobre o momento em que a transação foi executada e a identidade do utilizador que a executou, correlacionando-a com outras operações realizadas por esta transação.

Por exemplo, se quiser acompanhar o histórico de transações num cenário bancário, a visualização do livro razão fornece crónica das transações ao longo do tempo. Ao utilizar a visualização do livro-maior, não é necessário visualizar separadamente a tabela do registo atualizável e as tabelas de histórico, nem construir a sua própria visualização para o fazer.

Para um exemplo de utilização da vista do livro-razão, veja Criar e usar tabelas atualizáveis do livro-razão.

O esquema da vista do livro razão reflete as colunas definidas no livro razão atualizável e na tabela de histórico, mas as colunas GENERATED ALWAYS diferem das do livro razão atualizável e das tabelas de histórico.

Esquema de vista de registo

Observação

Os nomes das colunas da vista de ledger podem ser personalizados ao criar a tabela, usando o parâmetro <ledger_view_option> com a instrução CREATE TABLE (Transact-SQL). Para mais informações, consulte as opções de visualização do livro-razão e os exemplos relevantes em CREATE TABLE (Transact-SQL).

Nome padrão da coluna Tipo de dados Description
ledger_transaction_id bigint ID da transação que criou ou eliminou uma versão de linha.
número_de_sequência_do_livro-razão bigint O número de sequência de uma operação a nível de linha dentro da transação na tabela.
tipo_operacao_livro_razão tinyint Contém 1 (INSERIR) ou 2 (DELETE). Inserir uma linha na tabela do livro-razão produz uma nova linha na visualização do livro-razão que contém 1 nesta coluna. Ao eliminar uma linha da tabela do livro razão, é produzida uma nova linha na visualização do livro razão, que contém 2 nesta coluna. Atualizar uma linha na tabela do livro razão gera duas novas linhas na visualização do livro razão. Uma linha contém 2 (DELETE), e a outra linha contém 1 (INSERT) nesta coluna.
descrição_tipo_operacao_registo nvarchar (128) Contém INSERT ou DELETE. Para mais informações, consulte a linha anterior.