Verificação de banco de dados

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

O razão oferece uma forma de integridade de dados chamada integridade de encaminhamento, que fornece evidências de adulteração dos dados nas tabelas do razã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.

Processo de verificação do 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.

Como a verificação do razão computa novamente todos os hashes das transações no banco de dados, ela pode se tornar um processo de uso intensivo de recursos para bancos de dado com grandes quantidades de dados. Para reduzir o custo de verificação, o recurso expõe opções para verificação de tabelas do razão individuais ou de apenas um subconjunto do 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.

Observação

A opção de banco de dados ALLOW_SNAPSHOT_ISOLATION precisa 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 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.

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.

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 código hash para gerar e armazenar os hashes de banco de dados, o procedimento armazenado sp_verify_database_ledger é 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.

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 a verificação do razão regularmente para evitar uma restauração do banco de dados dias ou meses após a adulteração ter sido detectada. O intervalo da verificação deve ser decidido pelo cliente, mas lembre-se de que a verificação do razão pode consumir 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 do banco de dados no Banco de Dados SQL do Azure pode ser feito com trabalhos do Banco de Dados Elástico ou da 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.