Verificação de banco de dados

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores Banco de Dados SQL do AzureInstância Gerenciada de SQL do Azure

O Ledger oferece uma forma de integridade de dados chamada integridade progressiva, que fornece evidências de adulteração de dados nas tabelas do ledger. 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 recalcula os hashes armazenados no livro-razão do banco de dados com base no estado atual das tabelas do livro-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.

Processo de verificação do banco de dados

O processo de verificação varre todas as tabelas de registro e de 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.

Como a verificação do livro-razão recalcula todos os hashes das transações no banco de dados, ela pode se tornar um processo que consome muitos recursos em bancos de dados com grandes volumes de dados. Para reduzir o custo da verificação, o recurso oferece opções para verificar tabelas contábeis individuais ou apenas um subconjunto dessas tabelas.

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.

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 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 compilados, pode alterar os locais de armazenamento ao longo do ciclo de vida das tabelas do razão. Por exemplo, se você começar usando o armazenamento imutável do Azure para armazenar os arquivos de resumo criptográfico, mas depois quiser passar a usar o razão confidencial do Azure, poderá fazer isso. Essa alteração de local é armazenada em sys.database_ledger_digest_locations.

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ê quer garantir que um usuário privilegiado não tenha alterado os locais de armazenamento do resumo 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 o armazenamento manual de resumo

Ao usar o armazenamento manual de resumos para gerar e armazenar os resumos do banco de dados, o procedimento armazenado sp_verify_database_ledger é usado para verificar o banco de dados de 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.

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

Recomendação

Idealmente, é interessante minimizar ou até mesmo eliminar a lacuna entre a hora em que o ataque ocorreu e a hora em que ele foi detectado. A Microsoft recomenda agendar regularmente a verificação do ledger para evitar a restauração do banco de dados para um estado de dias ou meses atrás depois que a adulteração for detectada. O intervalo da verificação deve ser definido pelo cliente, mas esteja ciente de que a verificação do livro-razão pode consumir muitos recursos. É recomendável executar essa verificação durante uma janela de manutenção ou fora do horário de pico.

O agendamento da verificação de banco de dados no Banco de Dados SQL do Azure pode ser feito com o Elastic Jobs ou o Automação do Azure. Para agendar a verificação de banco de dados na Instância Gerenciada de 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 as permissões relacionadas às tabelas do razão, confira Permissões.