Partilhar via


Verificar uma tabela contábil para detetar adulteração

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

Neste artigo, você verificará a integridade dos dados em suas tabelas contábeis. Se você configurou o armazenamento de resumo automático em seu banco de dados, siga a seção T-SQL usando armazenamento de resumo automático . Caso contrário, siga o T-SQL usando uma seção digest gerada manualmente .

Pré-requisitos

Executar a verificação do livro-razão para o banco de dados

  1. Conecte-se ao seu banco de dados usando o SQL Server Management Studio.

  2. Crie uma nova consulta com a seguinte instrução T-SQL:

    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 Livro Razão. No painel Contabilidade , selecione </> Verificar banco de dados.

  3. Executa a consulta. Você verá que digest_locations retorna o local atual de onde os resumos do banco de dados estão armazenados e todos os locais anteriores. O resultado retorna o sucesso ou a falha da verificação contábil.

    Captura de ecrã da execução da verificação do livro-razão utilizando o Azure Data Studio.

  4. Abra o conjunto de resultados digest_locations para visualizar os locais dos seus resumos. O exemplo a seguir mostra dois locais de armazenamento resumido para esse banco de dados:

    • indica a localização dos resumos.

    • last_digest_block_id indica o 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 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.

  5. A verificação retorna a seguinte mensagem na janela Resultados .

    • Se não houve adulteração em seu banco de dados, a mensagem é:

      Ledger verification successful
      
    • Se houve adulteração no banco de dados, o seguinte erro aparecerá 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.