Verificar uma tabela do razão para detectar adulteração

Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do AzureInstâ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

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

  1. Conecte-se ao banco de dados usando o SQL Server Management Studio ou o Azure Data Studio.

  2. 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.

  3. 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.

    Screenshot of running ledger verification by using Azure Data Studio.

  4. 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.

  5. 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.