Limpar os registros do user_auth_token_logs?

Temos um fórum onde user_auth_token_logs tem 61 milhões de linhas (e crescendo).

Existem apenas 25 mil user_auth_tokens.

Das 61 milhões de linhas, 54 milhões de linhas referem-se a um user_auth_token que não existe mais (ou seja, um problema de integridade do banco de dados). E das 61 milhões de linhas, cerca de 58 milhões são mais antigas que 2 meses (ou seja, aparentemente inúteis?)

Perguntas:

  • Poderíamos simplesmente limpar isso sem arriscar mais problemas de integridade?
  • Seria uma ideia ter um job para limpar isso automaticamente?
db=# select count(*) from user_auth_tokens;
 count
-------
 25648

db=# select count(*) from user_auth_token_logs;
  count
----------
 61415352

db=# select count(*) from user_auth_token_logs where user_auth_token_id not in (select id from user_auth_tokens);
  count
----------
 54558442

db=# select count(*) from user_auth_token_logs where created_at < '2024-07-13';
  count
----------
 58565943

4 curtidas

Sim, os user_auth_token_logs existem apenas para fins de depuração. Todas as linhas podem ser esvaziadas, a única consequência será que você não terá nenhum log para depurar.

Isso deve ser coberto por:

https://github.com/discourse/discourse/blob/main/app/jobs/scheduled/weekly.rb#L13

2 curtidas

Obrigado por isso, eu não percebi que estava lá.

Então… a limpeza só é executada quando verbose_auth_token_logging é true (o que não é o caso nesta instância)

mas o registro não verboso sempre acontece, independentemente da configuração :scream:

por 8fb823c

Movendo isso para Bug :slight_smile:

4 curtidas

Ah sim, boa observação. Parece que as linhas 214 a 217 também precisam ser corrigidas.

Eu estaria confortável com uma limpeza global após um certo período de tempo. @osama (já que você é o autor do commit vinculado acima), você acha que podemos limpar todos esses logs após algum tempo (e se sim, depois de quanto tempo)? Parece que precisamos manter alguns deles para detectar logins suspeitos.

4 curtidas

Por que precisa de correção? :thinking: Essa parte do código é sobre a limpeza de UserAuthTokens rotacionados, não sobre os registros de log?

Atualização: após habilitar SiteSetting.verbose_auth_token_logging, acionar o job semanal e executar VACUUM FULL user_auth_token_logs, a tabela passou de 16GB para 687MB :+1:

Salvamos algumas árvores hoje :deciduous_tree:

3 curtidas

Sim, acho que podemos limpar a maioria dos logs, mas alguns deles precisam permanecer. Especificamente, acho que quaisquer registros que tenham suspicious, generate ou rotate como ação precisarão ser mantidos, pois são usados para detectar e gerar relatórios de logins suspeitos.

3 curtidas

Estou vendo neste fórum que este bug nunca foi corrigido :eyes:
O relatório de logins suspeitos parece se aplicar apenas a membros da equipe, há alguma razão para que esses logs precisem ser mantidos para não administradores?
Para que o relatório funcione, ele precisa de dados desde o início do histórico da conta? O log pode ser reduzido para algo como os últimos 6 meses?
No momento, não há nenhuma limpeza, o que é uma preocupação de privacidade.

2 curtidas

Eu também não entendo a discussão acima.
O bug é muito simples: se o modo não for verboso, nenhuma limpeza de UserAuthTokenLog é realizada, nunca. O if deve ser removido.

A implementação original apenas registrava quando SiteSetting.verbose_auth_token_logging era verdadeiro. O que ainda tinha o problema de que, após desativá-lo, os logs restantes mais recentes permaneceriam, mas isso é uma coisa pequena.

Mas esta alteração tornou o registro incondicional (“Os logs de tokens de autenticação generate, rotate e suspicious agora são sempre registrados, independentemente da configuração verbose_auth_token_logging”).
Resumo; Essa alteração esqueceu de tornar a remoção incondicional também.

3 curtidas

Com certeza, resolveremos isso nas próximas semanas. Se houver urgência, sinta-se à vontade para enviar um PR (que esteja testado e confirme que isso funciona como esperado).

1 curtida

Eu fiz um PR Fix: cleanup UserAuthTokenLog unconditionally by communiteq · Pull Request #34288 · discourse/discourse · GitHub, seria legal se isso entrasse para a versão 3.5

E parece que fui superado :slight_smile:

2 curtidas

De fato, esse PR agora foi mesclado graças ao @Osama. Ele aborda a maioria dos tipos de user_auth_token_logs, mas não todos, e em breve forneceremos uma correção para as entradas de generate. (Veja a discussão no link do PR acima para mais contexto).

Manterei este tópico aberto enquanto abordamos o acompanhamento.

4 curtidas