Benutzer_auth_token_logs bereinigen?

Wir haben ein Forum, in dem user_auth_token_logs 61 Millionen Zeilen hat (und es werden mehr).\n\nEs gibt nur 25.000 user_auth_tokens.\n\nVon den 61 Millionen Zeilen beziehen sich 54 Millionen auf einen user_auth_token, der nicht mehr existiert (d. h. ein Datenbank-Integritätsproblem). Und von den 61 Millionen Zeilen sind etwa 58 Millionen älter als 2 Monate (d. h. scheinbar nutzlos?)\n\nFragen:\n- Könnten wir das einfach bereinigen, ohne weitere Integritätsprobleme zu riskieren?\n- Wäre es eine Idee, einen Job zu haben, der das automatisch bereinigt?\n\n\ndb=# select count(*) from user_auth_tokens;\n count \n-------\n 25648\n\ndb=# select count(*) from user_auth_token_logs;\n count \n----------\n 61415352\n\ndb=# select count(*) from user_auth_token_logs where user_auth_token_id not in (select id from user_auth_tokens);\n count \n----------\n 54558442\n\ndb=# select count(*) from user_auth_token_logs where created_at < '2024-07-13';\n count \n----------\n 58565943\n\n

4 „Gefällt mir“

Ja, user_auth_token_logs sind nur zu Debugging-Zwecken vorhanden. Alle Zeilen können geleert werden, die einzige Konsequenz ist, dass Sie keine Protokolle zum Debuggen mehr haben.

Dies sollte abgedeckt sein durch:

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

2 „Gefällt mir“

Vielen Dank dafür, ich wusste nicht, dass das da ist.

Also… die Bereinigung läuft nur, wenn verbose_auth_token_logging auf true gesetzt ist (was auf dieser Instanz nicht der Fall ist).

aber nicht-verbose Logging findet immer statt, unabhängig von der Einstellung :scream:

gemäß 8fb823c

Dies wird zu Bug verschoben :slight_smile:

4 „Gefällt mir“

Ah ja, gut bemerkt. Es sieht so aus, als müssten Zeilen 214 bis 217 ebenfalls behoben werden.

Ich wäre mit einer globalen Bereinigung nach einer bestimmten Zeitspanne einverstanden. @osama (da Sie der Autor des oben verlinkten Commits sind), glauben Sie, dass wir all diese Protokolle nach einiger Zeit bereinigen können (und wenn ja, nach wie langer Zeit)? Es scheint, dass wir einige davon zur Erkennung verdächtiger Anmeldungen aufbewahren müssen.

4 „Gefällt mir“

Warum muss das behoben werden? :thinking: Bei diesem Codeausschnitt geht es um die Bereinigung von rotierten UserAuthTokens, nicht um die Log-Einträge?

Update: Nachdem SiteSetting.verbose_auth_token_logging aktiviert, der wöchentliche Job ausgelöst und VACUUM FULL user_auth_token_logs ausgeführt wurde, schrumpfte die Tabelle von 16 GB auf 687 MB :+1:

Heute ein paar Bäume gerettet :deciduous_tree:

3 „Gefällt mir“

Ja, ich denke, wir können die meisten Protokolle bereinigen, aber einige müssen bleiben. Insbesondere denke ich, dass alle Einträge, die suspicious, generate oder rotate für die Aktion haben, aufbewahrt werden müssen, da sie zur Erkennung und Erstellung von Berichten für verdächtige Anmeldungen verwendet werden.

3 „Gefällt mir“

Ich sehe, dass dieser Fehler in meinem Forum nie behoben wurde :eyes:
Der Bericht über verdächtige Anmeldungen scheint nur für Mitarbeiter zu gelten. Gibt es einen Grund, warum diese Protokolle für Nicht-Administratoren aufbewahrt werden müssen?
Muss der Bericht, um zu funktionieren, Daten aus der gesamten Historie des Kontos enthalten? Kann das Protokoll auf beispielsweise die letzten 6 Monate gekürzt werden?
Derzeit gibt es keinerlei Bereinigung, was ein Datenschutzproblem darstellt.

2 „Gefällt mir“

Ich verstehe die obige Diskussion auch nicht.

Der Fehler ist sehr einfach: Wenn der Modus nicht ausführlich ist, wird UserAuthTokenLog überhaupt nicht bereinigt, niemals. Das if muss weg.

Die ursprüngliche Implementierung hat nur protokolliert, wenn SiteSetting.verbose_auth_token_logging wahr ist. Das hatte immer noch das Problem, dass nach dem Deaktivieren die zuletzt verbliebenen Protokolle erhalten blieben, aber das ist eine Kleinigkeit.

Aber diese Änderung hat die Protokollierung bedingungslos gemacht („Die Protokolle generate, rotate und suspicious für Authentifizierungstoken werden jetzt immer protokolliert, unabhängig von der Einstellung verbose_auth_token_logging“).

TLDR; Diese Änderung hat vergessen, auch die Entfernung bedingungslos zu machen.

3 „Gefällt mir“

Wir werden das in den nächsten Wochen in Ordnung bringen. Wenn es eilt, können Sie gerne einen PR (der getestet ist und bestätigt, dass er wie erwartet funktioniert) durchschicken.

1 „Gefällt mir“

Ich habe einen PR erstellt Fix: cleanup UserAuthTokenLog unconditionally by communiteq · Pull Request #34288 · discourse/discourse · GitHub, es wäre cool, wenn dieser es für 3.5 schaffen würde.

Und es scheint, ich war schneller :slight_smile:

2 „Gefällt mir“

In der Tat wurde dieser PR dank @Osama nun zusammengeführt. Er behebt die meisten Arten von user_auth_token_logs, aber nicht alle. Wir werden uns in Kürze um eine Korrektur für die generate-Einträge kümmern. (Weitere Informationen finden Sie in der Diskussion im obigen PR-Link).

Ich werde dieses Thema offen halten, während wir die Nachfolgearbeit erledigen.

4 „Gefällt mir“