Verificação da base de dados
se aplica a: SQL Server 2022 (16.x) Banco de Dados SQL do AzureInstância Gerenciada SQL do Azure
O Ledger fornece uma forma de integridade de dados chamada de integridade de encaminhamento, que fornece evidências de adulteração de dados em suas tabelas contábeis. O processo de verificação do banco de dados toma como entrada um ou mais resumos de banco de dados gerados anteriormente. Em seguida, ele recalcula os hashes armazenados no livro-razão do banco de dados com base no estado atual das tabelas contábeis. Se os hashes computados não corresponderem aos resumos de entrada, a verificação falhará. A falha indica que os dados foram adulterados. O processo de verificação relata todas as inconsistências detetadas.
Processo de verificação da base de dados
O processo de verificação verifica todas as tabelas de contabilidade e histórico. Ele recalcula os hashes SHA-256 das linhas e os compara com os ficheiros de resumo da base de dados passados ao procedimento armazenado de verificação.
Como a verificação contábil recalcula todos os hashes para transações no banco de dados, pode ser um processo que consome muitos recursos para bancos de dados com grandes quantidades de dados. Para reduzir o custo da verificação, o recurso expõe opções para verificar tabelas contábeis individuais ou apenas um subconjunto das tabelas contábeis.
Você realiza a verificação do banco de dados por meio de dois procedimentos armazenados, dependendo se usar de armazenamento de resumo automático ou se gerenciar manualmente os resumos.
Observação
A opção de banco de dados ALLOW_SNAPSHOT_ISOLATION deve ser habilitada no banco de dados antes que você possa executar os procedimentos armazenados de verificação.
Verificação de base de dados que usa armazenamento digest automático
Quando você estiver usando o armazenamento de resumo automático para gerar e armazenar resumos de banco de dados, o local do armazenamento de resumo estará na exibição de catálogo do sistema sys.database_ledger_digest_locations como objetos JSON. A execução da verificação do banco de dados consiste na execução do procedimento armazenado do sistema sp_verify_database_ledger_from_digest_storage. Especifique os objetos JSON na exibição de catálogo do sistema sys.database_ledger_digest_locations onde os resumos do banco de dados são configurados para serem armazenados.
Ao usar o armazenamento resumido automático, você pode alterar os locais de armazenamento ao longo do ciclo de vida das tabelas contábeis. Por exemplo, se começar por usar o armazenamento inalterável do Azure para guardar os seus arquivos de resumo, mas mais tarde quiser usar o Azure Confidential Ledger, poderá fazê-lo. Essa alteração no local é armazenada em sys.database_ledger_digest_locations.
Ao executar a verificação contábil, inspecione a localização do digest_locations para garantir que os resumos usados na verificação sejam recuperados dos locais esperados. Você quer garantir que um utilizador privilegiado não tenha alterado o local do armazenamento de resumos para um local de armazenamento desprotegido, como o Armazenamento do Azure, sem uma política de imutabilidade configurada e bloqueada.
Para simplificar a execução da verificação quando você usa vários locais de armazenamento de resumo, o script a seguir buscará os locais dos resumos e executará a verificação usando esses locais.
DECLARE @digest_locations NVARCHAR(MAX) = (SELECT * FROM sys.database_ledger_digest_locations FOR JSON AUTO, INCLUDE_NULL_VALUES);
SELECT @digest_locations as digest_locations;
BEGIN TRY
EXEC sys.sp_verify_database_ledger_from_digest_storage @digest_locations;
SELECT 'Ledger verification succeeded.' AS Result;
END TRY
BEGIN CATCH
THROW;
END CATCH
Verificação de banco de dados que usa armazenamento de resumo manual
Quando você estiver usando o armazenamento de resumo manual para gerar e armazenar resumos de banco de dados, o sp_verify_database_ledger de procedimento armazenado é usado para verificar o banco de dados do livro-razão. O conteúdo JSON do resumo é anexado no procedimento armazenado. Ao executar a verificação de banco de dados, você pode optar por verificar todas as tabelas no banco de dados ou verificar tabelas específicas.
O código a seguir é um exemplo de execução do procedimento armazenado sp_verify_database_ledger passando dois resumos para verificação:
EXECUTE sp_verify_database_ledger N'
[
{
"database_name": "ledgerdb",
"block_id": 0,
"hash": "0xDC160697D823C51377F97020796486A59047EBDBF77C3E8F94EEE0FFF7B38A6A",
"last_transaction_commit_time": "2020-11-12T18:01:56.6200000",
"digest_time": "2020-11-12T18:39:27.7385724"
},
{
"database_name": "ledgerdb",
"block_id": 1,
"hash": "0xE5BE97FDFFA4A16ADF7301C8B2BEBC4BAE5895CD76785D699B815ED2653D9EF8",
"last_transaction_commit_time": "2020-11-12T18:39:35.6633333",
"digest_time": "2020-11-12T18:43:30.4701575"
}
]';
Os códigos de retorno para sp_verify_database_ledger
e sp_verify_database_ledger_from_digest_storage
são 0
(sucesso) ou 1
(falha).
Recomendação
O ideal é minimizar ou mesmo eliminar a lacuna entre o momento em que o ataque ocorreu e o momento em que foi detetado. A Microsoft recomenda agendar a verificação do livro-razão regularmente para evitar uma restauração do banco de dados de dias ou meses atrás depois que adulteração foi detetada. O intervalo da verificação deve ser decidido pelo cliente, mas esteja ciente de que a verificação contábil pode consumir recursos. Recomendamos executá-lo durante uma janela de manutenção ou fora do horário de pico.
O agendamento da verificação do banco de dados no Banco de Dados SQL do Azure pode ser feito com Trabalhos Elásticos ou Automação do Azure. Para agendar a verificação do banco de dados na Instância Gerenciada do SQL do Azure e no SQL Server, você pode usar o SQL Server Agent.
Permissões
A verificação do banco de dados requer a permissão VIEW LEDGER CONTENT
. Para obter detalhes sobre permissões relacionadas a tabelas contábeis, consulte Permissions.