Pular para o conteúdo
Todos os conceitos

Log de auditoria do banco

Registra cada consulta ao banco; serve para medir quanto dado alguém leu, sem contar duas vezes.

Um banco de dados pode guardar um log de auditoria: uma linha por consulta, com a hora, o usuário, de onde veio, a consulta em si e, muitas vezes, quantas linhas ela devolveu. Depois de um incidente, esse log responde a pergunta mais importante do relatório: quanto dado o atacante leu.

Ler esse log tem três cuidados.

  1. Separe quem é quem. A aplicação do site costuma aparecer com um usuário próprio (por exemplo loja_app), vindo do servidor web, fazendo muitas consultas pequenas o dia todo (um produto, um cliente por vez). O atacante aparece diferente: outro usuário, de outro lugar (às vezes a própria máquina, 127.0.0.1), e no horário do ataque.
  2. Olhe a tabela certa. Só contam as consultas à tabela que tem o dado da pergunta. A tabela clientes tem os clientes; pedidos tem os pedidos; são coisas diferentes. E SELECT count(*) devolve o número de registros, não registros de pessoas.
  3. Não some linhas cegamente. O atacante costuma ler a mesma tabela mais de uma vez: inteira (SELECT * FROM clientes) e de novo em páginas (LIMIT/OFFSET). Somar as linhas conta as mesmas pessoas duas vezes. O que importa é o número de registros distintos, que é o tamanho da tabela.

Exemplo. Se o log mostra SELECT * FROM clientes com 3609 linhas e, logo depois, três páginas de 1500, 1500 e 609 linhas da mesma tabela, a soma dá 7218, mas são as mesmas 3609 pessoas lidas duas vezes. O SELECT count(*) FROM clientes confirma: 3609. A resposta é 3609.

consultas do atacante linhas devolvidas SELECT * FROM clientes a tabela inteira 3609 LIMIT 1500 OFFSET … de novo, em 3 páginas 1500 1500 609 somar as linhas 3609 + 1500 + 1500 + 609 = 7218 conta as mesmas pessoas duas vezes registros distintos count(*) confirma 3609 pessoas
O atacante leu a tabela clientes inteira e de novo em três páginas: as linhas somam 7218, mas cobrem os mesmos 3609 registros, que é o número de pessoas que vazou.

Isso importa porque o tamanho do vazamento decide quantas pessoas precisam ser avisadas. Contar linhas sem pensar exagera o número; medir registros distintos, por tabela, dá a conta certa que vai para o relatório e para a lei.

Aparece nestes desafios