Gerenciamento de resumo e verificação de banco de dados

APLICA-SE A: Banco de Dados SQL do Azure

Observação

No momento, o razão do Banco de Dados SQL do Azure está em versão prévia pública e disponível no Oeste da Europa, no Sul do Brasil e no Centro-Oeste dos EUA.

O razão do Banco de Dados SQL do Azure fornece uma forma de integridade de dados chamada integridade de encaminhamento, que fornece evidências de adulteração dos dados nas tabelas razão. Por exemplo, se uma transação bancária ocorrer em uma tabela razão em que um saldo foi atualizado para o valor x, e um invasor modificar os dados posteriormente, alterando o saldo de x para y, essa verificação do banco de dados detectará essa atividade de adulteração.

O processo de verificação do banco de dados usa como entrada um ou mais dos resumos de banco de dados gerados anteriormente. Em seguida, ele computa novamente os hashes armazenados no razão do banco de dados com base no estado corrente das tabelas do razão. 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 detectadas.

Resumos de banco de dados

O hash do bloco mais recente no razão do banco de dados é chamado de resumo de banco de dados. Ele representa o estado de todas as tabelas razão no banco de dados quando o bloco foi gerado. A geração do resumo de banco de dados é eficiente, pois envolve apenas a computação somente dos hashes dos blocos que foram anexados recentemente.

Os resumos de banco de dados podem ser gerados automaticamente pelo sistema ou manualmente pelo usuário. Você pode usá-los posteriormente para verificar a integridade do banco de dados.

Os resumos de banco de dados são gerados na forma de um documento JSON que contém o hash do bloco mais recente, junto com os metadados relacionados à ID do bloco. Os metadados incluem a hora em que o resumo foi gerado e o carimbo de data/hora de confirmação da última transação neste bloco.

O processo de verificação e a integridade do banco de dados dependem da integridade dos resumos de entrada. Para essa finalidade, os resumos extraídos do banco de dados precisam ser armazenados de forma confiável que os usuários com privilégios elevados ou os invasores do servidor de Banco de Dados SQL do Azure não podem adulterar.

Geração e armazenamento automáticos de resumos de banco de dados

O razão do Banco de Dados SQL do Azure se integra ao recurso de armazenamento imutável do Armazenamento de Blobs do Azure e do Razão Confidencial do Azure. Essa integração fornece serviços de armazenamento seguros no Azure para ajudar a proteger os resumos do banco de dados contra possíveis adulterações. Essa integração fornece uma maneira simples e econômica para os usuários automatizarem o gerenciamento de resumos sem precisar se preocupar com sua disponibilidade e replicação geográfica.

Você pode configurar a geração e do armazenamento automáticos de resumos do banco de dados por meio do portal do Azure, do PowerShell ou da CLI do Azure. Quando você configura a geração e o armazenamento automáticos, resumos de banco de dados são gerados em um intervalo predefinido de 30 segundos e carregados no serviço de armazenamento selecionado. Caso não ocorra nenhuma transação no intervalo de 30 segundos, o resumo de banco de dados não será gerado e carregado. Esse mecanismo garante que os resumos de banco de dados sejam gerados somente quando os dados tiverem sido atualizados no banco de dados.

Captura de tela que mostra as seleções para habilitar o resumo de armazenamento.

Importante

Configure uma política de imutabilidade no contêiner para garantir que os resumos do banco de dados sejam protegidos contra adulterações.

Geração e armazenamento manuais de resumos de banco de dados

Você também pode usar o razão do Banco de Dados SQL do Azure para gerar um resumo de banco de dados sob demanda, para que você possa armazenar manualmente o resumo em qualquer serviço ou dispositivo que considere um destino de armazenamento confiável. Por exemplo, você pode escolher um dispositivo WORM (grava uma vez, lê muitas) local como destino. A geração manual de um resumo do banco de dados é feita executando do procedimento armazenado sys.sp_generate_database_ledger_digest no SQL Server Management Studio ou Azure Data Studio.

Importante

A geração de resumos de banco de dados requer a permissão GERAR RESUMO DO RAZÃO. Para saber mais sobre as permissões relacionadas às tabelas razão, consulte Permissões.

EXECUTE sp_generate_database_ledger_digest

O conjunto de resultados retornado é uma única linha de dados. Ele deve ser salvo no local de armazenamento confiável como um documento JSON da seguinte forma:

    {
        "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"
    }

Verificação de banco de dados

O processo de verificação examina todas as tabelas de razão e histórico. Ele computa novamente os hashes SHA-256 de suas linhas, comparando-os com os arquivos de resumo de banco de dados passados para o procedimento armazenado de verificação.

Para tabelas razão grandes, a verificação de banco de dados pode ser um processo que faça uso intensivo de recursos. Você deve usá-lo somente quando precisar verificar a integridade de um banco de dados.

O processo de verificação pode ser executado por hora ou diariamente para casos em que a integridade do banco de dados precisa ser monitorada com frequência. Ou pode ser executado somente quando a organização que hospeda os dados passar por uma auditoria e precisar fornecer evidências criptográficas sobre a integridade dos próprios dados. Para reduzir o custo de verificação, o razão expõe opções para verificar tabelas razão individuais ou apenas um subconjunto das tabelas razão.

A verificação do banco de dados é realizada por meio de dois procedimentos armazenados, o que depende de você usar o armazenamento automático de resumos ou gerenciar resumos manualmente.

Importante

A verificação de banco de dados requer a permissão Visualizar Conteúdo do Razão. Para obter detalhes sobre as permissões relacionadas às tabelas do razão, confira Permissões.

Verificação de banco de dados que usa o armazenamento automático de resumo

Ao usar o armazenamento automático de resumo para gerar e armazenar os resumos de banco de dados, o local de armazenamento dos resumos está na exibição do catálogo do sistema sys.database_ledger_digest_locations como objetos JSON. A execução da verificação de banco de dados consiste na execução do procedimento armazenado do sistema sp_verify_database_ledger_from_digest_storage. Especifique os objetos JSON da exibição sys.database_ledger_digest_locations do catálogo do sistema em que os resumos de banco de dados estão configurados para serem armazenados.

Quando você usa o armazenamento automático de resumo você pode alterar os locais de armazenamento durante o ciclo de vida das tabelas razão. Por exemplo, você pode começar usando o armazenamento Imutável do Azure para armazenar os arquivos de resumo, e posteriormente mudar para usar o Razão Confidencial do Azure. Essa alteração de local é armazenada em sys.database_ledger_digest_locations.

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 o armazenamento manual de resumo

Ao usar o armazenamento manual de resumo para gerar e armazenar os resumos de banco de dados, o procedimento armazenado a seguir é usado para verificar o banco de dados do razão. O conteúdo JSON do resumo é anexado no procedimento armazenado. Ao executar a verificação do banco de dados, você pode optar por verificar todas as tabelas ou verificar tabelas específicas no banco de dados.

Segue a sintaxe para o procedimento armazenado sp_verify_database_ledger:

sp_verify_database_ledger <JSON_document_containing_digests>, <table_name> 

O seguinte código é 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 (com falha).

Próximas etapas