Verificar uma tabela do razão para detectar adulteração
Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure
Neste artigo, você verificará a integridade dos dados nas tabelas do razão. Se você tiver configurado a opção Habilitar armazenamento de resumo automático em seu banco de dados, siga a seção T-SQL usando o armazenamento de resumo automático. Caso contrário, siga a seção T-SQL usando um resumo gerado manualmente.
Pré-requisitos
- Tenha uma assinatura ativa do Azure se estiver usando o Banco de Dados SQL do Azure ou a Instância Gerenciada de SQL do Azure. Crie uma conta gratuita se ainda não tiver a sua.
- Crie e use tabelas do razão atualizáveis ou crie e use tabelas do razão somente de acréscimo.
- SQL Server Management Studio ou Azure Data Studio.
- Antes que você possa executar os procedimentos armazenados de verificação, é necessário habilitar a opção de banco de dados ALLOW_SNAPSHOT_ISOLATION no banco de dados.
Executar a verificação do razão para o banco de dados
Conecte-se ao banco de dados usando o SQL Server Management Studio ou o Azure Data Studio.
Crie uma nova consulta com a instrução T-SQL a seguir:
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
Observação
O script de verificação também pode ser encontrado no portal do Azure. Abra o portal do Azure e localize o banco de dados que você deseja verificar. Em Segurança, selecione a opção Razão. No painel Razão, selecione </> Verificar banco de dados.
Executar a consulta. Você verá que digest_locations retorna o local atual de onde os resumos do banco de dados são armazenados e quaisquer locais anteriores. Resultado retorna o êxito ou a falha da verificação do razão.
Abra o conjunto de resultados digest_locations para exibir os locais de seus resumos. O exemplo a seguir mostra dois locais de armazenamento de resumo para este banco de dados:
caminho indica o local dos resumos.
last_digest_block_id indica a ID do bloco do último resumo armazenado no local do caminho.
is_current indica se o local no caminho é o atual (verdadeiro) ou anterior (falso).
[ { "path": "https:\/\/digest1.blob.core.windows.net\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 10016, "is_current": true }, { "path": "https:\/\/jandersneweracl.confidential-ledger.azure.com\/sqldbledgerdigests\/janderstestportal2server\/jandersnewdb\/2021-05-20T04:39:47.6570000", "last_digest_block_id": 1704, "is_current": false } ]
Importante
Ao executar a verificação do razão, inspecione o local de digest_locations para garantir que os resumos usados na verificação sejam recuperados dos locais esperados. Você deseja verificar se um usuário privilegiado não alterou locais de armazenamento de resumo para um local de armazenamento desprotegido, como o Armazenamento do Azure, sem uma política de imutabilidade configurada e bloqueada.
A verificação retorna a seguinte mensagem na janela Resultados.
Se não houver nenhuma adulteração no banco de dados, a mensagem será:
Ledger verification successful
Se houve adulteração no banco de dados, o erro a seguir aparece na janela Mensagens:
Failed to execute query. Error: The hash of block xxxx in the database ledger doesn't match the hash provided in the digest for this block.