لدينا منتدى حيث يحتوي user_auth_token_logs على 61 مليون صف (ويتزايد).\n\nهناك 25 ألف user_auth_tokens فقط.\n\nمن بين 61 مليون صف، يشير 54 مليون صف إلى user_auth_token لم يعد موجودًا (أي مشكلة في سلامة قاعدة البيانات). ومن بين 61 مليون صف، حوالي 58 مليون صف أقدم من شهرين (أي عديمة الفائدة على ما يبدو؟)\n\nأسئلة:\n- هل يمكننا تنظيف هذا دون المخاطرة بمشاكل سلامة إضافية؟\n- هل ستكون فكرة جيدة أن يكون هناك مهمة لتنظيف هذا تلقائيًا؟\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
نعم، user_auth_token_logs موجودة لأغراض التصحيح فقط. يمكن مسح جميع الصفوف، وسيكون العاقبة الوحيدة هي عدم وجود سجلات لتصحيحها.
يجب أن يغطي هذا:
https://github.com/discourse/discourse/blob/main/app/jobs/scheduled/weekly.rb#L13
شكراً لك على ذلك، لم أكن أدرك أن ذلك موجود.
إذًا… فإن تنظيف التشغيل فقط يحدث عندما يكون verbose_auth_token_logging مضبوطًا على true (وهو ما لا ينطبق على هذه النسخة)
لكن التسجيل غير المفصل يحدث دائمًا بغض النظر عن الإعداد ![]()
وفقًا لـ 8fb823c
نقل هذا إلى Bug ![]()
أجل، أحسنت. يبدو أن الأسطر 214 إلى 217 تحتاج إلى إصلاح أيضًا.
سأكون مرتاحًا للتنظيف الشامل بعد فترة زمنية معينة. @osama (بما أنك مؤلف الالتزام المرتبط أعلاه)، هل تعتقد أنه يمكننا تنظيف كل هذه السجلات بعد فترة زمنية معينة (وإذا كان الأمر كذلك، بعد كم من الوقت)؟ يبدو أننا بحاجة إلى الاحتفاظ ببعضها للكشف عن عمليات تسجيل الدخول المشبوهة.
لماذا تحتاج إلى إصلاح؟
هذا الجزء من الكود يتعلق بتنظيف UserAuthTokens التي تم تدويرها، وليس بسجلات السجل؟
تحديث: بعد تمكين SiteSetting.verbose_auth_token_logging، وتشغيل المهمة الأسبوعية وتشغيل VACUUM FULL user_auth_token_logs، انخفض الجدول من 16 جيجابايت إلى 687 ميجابايت ![]()
وفرت بعض الأشجار اليوم ![]()
نعم، أعتقد أنه يمكننا تنظيف معظم السجلات، ولكن يجب الاحتفاظ ببعضها. على وجه التحديد، أعتقد أن أي سجلات تحتوي على suspicious أو generate أو rotate للإجراء ستحتاج إلى الاحتفاظ بها لأنها تستخدم للكشف عن عمليات تسجيل الدخول المشبوهة وإنشاء تقارير لها.
أرى في منتداي أن هذه المشكلة لم يتم إصلاحها قط ![]()
يبدو أن تقرير تسجيلات الدخول المشبوهة ينطبق فقط على أعضاء هيئة التدريس، هل هناك سبب للاحتفاظ بسجلات لغير المسؤولين؟
لكي يعمل التقرير، هل يحتاج إلى بيانات من بداية تاريخ الحساب؟ هل يمكن تقصير السجل إلى الأشهر الستة الماضية؟
في الوقت الحالي، لا يوجد أي تنظيف على الإطلاق، وهذا يمثل مصدر قلق للخصوصية.
أنا لا أفهم المناقشة أعلاه أيضًا.
الخلل بسيط جدًا: إذا لم يكن الوضع مفصلاً، فلن يتم إجراء أي تنظيف لـ UserAuthTokenLog على الإطلاق، أبدًا. يجب إزالة الشرط if.
التنفيذ الأصلي سجل فقط عندما يكون
SiteSetting.verbose_auth_token_logging صحيحًا. والذي لا يزال يمثل مشكلة أنه بعد تعطيله، ستبقى السجلات المتبقية الأحدث، ولكن هذا أمر بسيط.
لكن هذا التغيير جعل التسجيل غير مشروط (“يتم الآن تسجيل سجلات رموز المصادقة generate و rotate و suspicious دائمًا بغض النظر عن إعداد verbose_auth_token_logging”).
باختصار؛ هذا التغيير نسي جعل الإزالة غير مشروطة أيضًا.
بالتأكيد، سنقوم بحل الأمر خلال الأسابيع القليلة القادمة، إذا كان هناك استعجال فلا تتردد في إرسال طلب سحب (PR) (يتم اختباره ويؤكد أن هذا يعمل كما هو متوقع)
لقد قمت بإنشاء طلب سحب https://github.com/discourse/discourse/pull/34288، سيكون من الرائع لو تم تضمين هذا في الإصدار 3.5
ويبدو أنني سبقت إلى ذلك ![]()
بالفعل، تم دمج طلب السحب هذا الآن بفضل @Osama. إنه يعالج معظم أنواع user_auth_token_logs، ولكن ليس كلها، وسنتابع بإصلاح لإدخالات generate قريبًا. (انظر المناقشة في رابط طلب السحب أعلاه لمزيد من السياق).
سأبقي هذا الموضوع مفتوحًا أثناء معالجتنا للمتابعة.
