Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: SQL Server 2022 (16.x) e versões
posteriores Azure SQL Database
Azure 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.
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. |