← All posts

Seu backup ressuscita em silêncio os usuários que você apagou

Authagonal·July 12, 2026
backupstoragesecurity

Todo backup incremental faz a mesma suposição silenciosa: para copiar o que mudou, encontre as linhas que mudaram. Num armazenamento chave-valor como o Azure Table Storage ou o DynamoDB, "o que mudou" significa "linhas cujo timestamp de última modificação é mais recente que minha última marca d'água". Percorra a tabela, pegue tudo que é mais novo, grave. Rápido, barato, correto.

Correto para gravações. Agora apague uma linha.

A linha não recebe uma flag de "apagada". Não recebe um timestamp mais novo. Não vai para uma lixeira. Ela simplesmente deixa de existir. Esses armazenamentos não têm marcadores de exclusão nem change feed para exclusões, então uma linha apagada não deixa exatamente nada para trás. Seu backup incremental, que encontra mudanças varrendo timestamps mais recentes, passa direto pelo espaço vazio onde a linha estava e não encontra nada. Não há nada para encontrar. A exclusão é invisível.

O que significa que seu backup ainda contém a linha. E é aqui que uma história de perda de dados vira uma história de segurança.

Pense no que uma exclusão costuma significar num sistema de autenticação. Você não apagou aquele usuário por diversão. Você desligou um funcionário. Removeu uma conta cuja senha apareceu num vazamento. Revogou um grant OAuth depois que um token vazou. Cortou o acesso de um admin no dia em que ele saiu. Cada uma dessas é uma decisão de segurança, e nenhuma delas sobrevive a um backup que não enxerga exclusões.

Então você restaura. Talvez por causa de um desastre real, talvez só para um clone de staging. O backup faz exatamente o que você pediu: recoloca todas as linhas que conhece. O funcionário desligado é usuário de novo. A senha vazada é válida de novo. O grant revogado funciona de novo. O admin removido tem admin de novo. Sua restauração não perdeu dados. Ela reverteu suas decisões de segurança, em silêncio, e te entregou um sistema que parece saudável e está silenciosamente comprometido. Um backup que esquece uma exclusão é pior do que nenhum backup, porque você confia nele.

A correção é parar de tratar uma exclusão como a ausência de uma linha e começar a tratá-la como um evento. Exclusões são dados.

Por isso damos às exclusões uma tabela própria. Toda exclusão no sistema passa por um ITombstoneWriter injetado que registra um tombstone: a chave e a hora em que morreu. Não existe caminho de código que apague uma linha sem deixar um tombstone, porque a exclusão e o tombstone são uma única operação. Um backup incremental passa então a ter duas partes capturadas numa única marca d'água: os upserts (linhas com timestamp mais novo) e os tombstones (exclusões desde a última marca d'água). A restauração reproduz os dois em ordem cronológica, então uma exclusão se aplica igual a uma gravação, e uma chave que foi apagada e depois recriada resolve para o que aconteceu por último. O espaço vazio finalmente tem um registro associado a ele.

Esse é o truque inteiro, e ele é pequeno. O motivo pelo qual ele importa não é.

O padrão aqui vai além do Table Storage e do DynamoDB. Qualquer sistema que modele uma exclusão como "a linha sumiu" não consegue fazer backup, replicar nem sincronizar exclusões, porque não há nada para transportar. Isso aparece em replays de eventos ingênuos que só reproduzem criações e atualizações. Aparece em caches que expiram mas nunca invalidam. Aparece em réplicas de leitura que divergem porque a exclusão nunca se propagou. E é mais perigoso exatamente onde exclusões são a forma de impor segurança, o que num sistema de identidade é em todo lugar: revogação, offboarding, rotação, bloqueio. Se a sua história de durabilidade só rastreia as coisas que existem, ela vai preservar fielmente as coisas que você se esforçou para fazer deixar de existir.

Então audite seus próprios backups com uma pergunta: se eu apagar um usuário agora, fizer um backup e restaurá-lo, esse usuário some? Se a resposta honesta for "não tenho certeza", seu backup é uma máquina do tempo apontada para o lado errado. Ele não protege você dos seus erros. Ele os ressuscita: a senha que você rotacionou, o funcionário que você desligou, o token que você revogou.

Exclusões são dados. Faça backup delas como tal.

Se você prefere que seus backups respeitem uma exclusão sem você ter que provar que respeitam, é para isso que serve uma plataforma. O Authagonal registra um tombstone para cada exclusão, então uma restauração nunca traz de volta uma credencial revogada.