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