Nous avons un forum où user_auth_token_logs contient 61 millions de lignes (et ça continue d’augmenter).
Il n’y a que 25k user_auth_tokens.
Sur les 61 millions de lignes, 54 millions de lignes font référence à un user_auth_token qui n’existe plus (c’est-à-dire un problème d’intégrité de la base de données). Et sur les 61 millions de lignes, environ 58 millions ont plus de 2 mois (c’est-à-dire apparemment inutiles ?)
Questions :
Pourrions-nous simplement nettoyer cela sans risquer d’autres problèmes d’intégrité ?
Serait-il judicieux d’avoir un job pour nettoyer cela automatiquement ?
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
Oui, les user_auth_token_logs sont là uniquement à des fins de débogage. Toutes les lignes peuvent être vidées, la seule conséquence sera que vous n’aurez aucun journal pour déboguer.
Ah oui, bonne remarque. Il semble que les lignes 214 à 217 doivent également être corrigées.
Je serais à l’aise avec un nettoyage global après un certain délai. @osama (puisque vous êtes l’auteur du commit lié ci-dessus), pensez-vous que nous pouvons nettoyer tous ces journaux après un certain temps (et si oui, après combien de temps) ? Il semble que nous devions en conserver certains pour détecter des connexions suspectes.
Pourquoi doit-elle être corrigée ? Ce morceau de code concerne le nettoyage des UserAuthToken ayant tourné, pas les enregistrements de journal ?
Mise à jour : après avoir activé SiteSetting.verbose_auth_token_logging, déclenché le travail hebdomadaire et exécuté VACUUM FULL user_auth_token_logs, la table est passée de 16 Go à 687 Mo
Oui, je pense que nous pouvons nettoyer la plupart des journaux, mais certains doivent rester. Plus précisément, je pense que tous les enregistrements qui ont suspicious, generate ou rotate comme action devront être conservés car ils sont utilisés pour détecter et générer des rapports sur les connexions suspectes.
Je vois sur mon forum que ce bug n’a jamais été corrigé
Le rapport de connexions suspectes ne semble s’appliquer qu’aux membres du personnel, y a-t-il une raison pour que ces journaux soient conservés pour les non-administrateurs ?
Pour que le rapport fonctionne, a-t-il besoin de données depuis le début de l’historique du compte ? Le journal peut-il être raccourci à quelque chose comme les 6 derniers mois ?
Pour le moment, il n’y a aucun nettoyage, ce qui pose un problème de confidentialité.
Je ne comprends pas non plus la discussion ci-dessus.
Le bug est très simple : si le mode n’est pas verbeux, alors aucun nettoyage de UserAuthTokenLog n’est effectué, jamais. Le if doit disparaître.
L’implémentation d’origine ne journalisait que lorsque SiteSetting.verbose_auth_token_logging était vrai. Ce qui avait toujours le problème qu’après l’avoir désactivé, les journaux restants les plus récents resteraient, mais c’est une petite chose.
Mais ce changement a rendu la journalisation inconditionnelle (« Les journaux de jetons d’authentification generate, rotate et suspicious sont maintenant toujours enregistrés indépendamment du paramètre verbose_auth_token_logging »).
TLDR ; Ce changement a oublié de rendre la suppression inconditionnelle également.
Bien sûr, nous allons régler cela au cours des prochaines semaines. S’il y a urgence, n’hésitez pas à nous soumettre une pull request (testée et confirmant que cela fonctionne comme prévu).
En effet, cette PR est maintenant fusionnée grâce à @Osama. Elle traite la plupart des types de user_auth_token_logs, mais pas tous. Nous allons corriger les entrées generate sous peu. (Voir la discussion dans le lien PR ci-dessus pour plus de contexte).
Je vais garder ce sujet ouvert pendant que nous traitons le suivi.