Pular para conteúdo

ADR 0004 — Auditoria feita pela aplicação

Status: Aceita · Data: 09/11/2026

Contexto

Em documentação de rede e provisionamento, é essencial saber quem alterou o quê e quando: quem mudou a porta de um cliente, quem autorizou uma ONU, quem excluiu uma CTO. Isso vale também para alterações feitas por rotinas automáticas.

Decisão

  • Qualquer modelo que herda de ModeloAuditado é auditado automaticamente: criar, alterar (com antes, depois e campos alterados) e excluir.
  • O usuário e o IP vêm da requisição; rotinas em segundo plano aparecem como "sistema".
  • Login, logout e tentativas de login com falha também são registrados.
  • Senhas nunca são gravadas; cada modelo pode ocultar campos extras (campos_ocultos_auditoria).
  • Um "salvar" que não muda nada não gera registro.
  • A auditoria é somente leitura no admin, inclusive para administradores.

Alternativas consideradas

  • Triggers no banco: pegam até alterações feitas direto por SQL, mas a identificação do usuário depende de cada conexão configurar a sessão corretamente, e a lógica fica escondida no banco.
  • Biblioteca pronta (django-simple-history, django-auditlog): viável, mas cria uma tabela de histórico por modelo ou traz recursos que não usamos.

Consequências

  • Alterações feitas direto no banco via SQL não são auditadas. A regra é não alterar dados fora da aplicação.
  • Operações em massa (update(), bulk_create) não disparam sinais. Quando forem necessárias, a importação registra a operação explicitamente com registrar().