Pular para o conteúdo

apps/security/audit-log

146 · Segurança & Auditoria · ≈ 6 min de estudo

Audit Log

Trilha de auditoria imutável: cada ação sensível grava quem fez, o quê, quando, de onde e o estado antes e depois, e cada registro carrega o hash do anterior. UPDATE e DELETE na tabela viram nada por RULE, e quem contornar a regra com acesso de dono quebra a cadeia — a verificação aponta o registro adulterado. Use em ações que o regulador ou uma investigação de fraude vão cobrar.

passos
6
arquivos
6
testes
0
tecnologias
4
Infraestrutura realTypeScriptBunPostgreSQLDocker
Baixar cartão

Cenário

Analistas de crédito alteram limites de clientes. Cada alteração é auditada com o analista nominal (analyst:maria.souza, nunca "sistema"), IP, canal, evento descritivo (credit_limit.increased) e limite antes e depois. Um UPDATE direto na trilha não altera nada. Um DBA que desativa a regra para esconder um aumento de limite deixa a cadeia quebrada, e a verificação aponta o seq exato.

Planta

Fluxo
9/9
Alteração de limitecommitauditAppendTrava audit_chain_headFOR UPDATEhash = SHA-256 dehash anterior,campos, timestamp#1 hash A#2 anterior A, hash B#3 anterior B, hash CauditVerifyrecalcula tudovalidbrokenAtSeqconferediverge
9

9 passos — reproduza para seguir o fluxo

Como funciona

6 passos

Registro imutável de quem fez o quê.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    creditLimitChange faz a alteração e dá commit; só depois auditAppend grava a entrada — rollback do negócio não deixa trilha falsa

  2. 02

    auditAppend trava a linha única de audit_chain_head com FOR UPDATE: appends concorrentes entram em fila, inclusive com a trilha vazia

  3. 03

    O hash é SHA-256 do hash anterior, de todos os campos e do timestamp; os dados vão com chaves ordenadas porque o JSONB reordena

  4. 04

    CREATE RULE ... DO INSTEAD NOTHING reescreve UPDATE e DELETE em nada — ao contrário de trigger, não cai com DISABLE TRIGGER

  5. 05

    auditVerify recalcula a cadeia em ordem de seq e devolve o primeiro registro cujo hash ou elo não confere

  6. 06

    Registro removido aparece como quebra no registro seguinte, cujo previous_hash aponta para o que sumiu

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Adulteração detectada e localizada pelo seq

  • RULE não se desliga por DISABLE TRIGGER

  • Estado antes e depois responde "quem mudou o quê"

  • Auditoria fora da transação não some no rollback

Custos

  • Appends são serializados pela trava da cabeça da cadeia

  • TRUNCATE ignora RULE: revogue o privilégio do papel da aplicação

  • Quem reescreve a cadeia inteira a partir de um ponto passa na verificação — ancore o último hash fora do banco

  • Falha entre o commit e o append deixa a alteração sem registro — exige reconciliação

apps/security/audit-log

6 arquivos

src/

  • audit_hash.tsHash da entrada e serialização canônica do JSON
  • audit_chain.tsAppend com trava na cabeça da cadeia e verificação completa
  • credit_limit.tsAlteração de limite e auditoria depois do commit
  • config_audit.tsConfiguração validada do ambiente
  • demo.tsdemoAlterações, UPDATE ignorado e adulteração detectada

sql/

  • 01_schema.sqlschemaLimites, trilha com RULEs e cabeça da cadeia

Executar · com Docker

  1. ./docker.sh up# sobe PostgreSQL
  2. cp .env.example .env# variáveis de ambiente
  3. bun install# dependências
  4. bun run demo# roda o cenário
  5. bun run test# integração contra o serviço real
Requisitos
BunDocker
Sobe junto
PostgreSQL

Por que se relacionam

Teste rápido

Qual destes combina com Audit Log Pattern?

Próximo projeto · Segurança & AuditoriaToken Auth
Esc

↑ ↓ navegarEnter abrir191 resultados