مراقبة عضوية المجموعة في Active Directory بشكل أكثر كفاءة (C# .NET)

StackOverflow https://stackoverflow.com/questions/85724

  •  01-07-2019
  •  | 
  •  

سؤال

لدي أداة مزامنة Active Directory (.NET 2.0 / C#) مكتوبة كخدمة Windows أعمل عليها منذ فترة وتم تكليفي مؤخرًا بإضافة القدرة على قيادة الأحداث بناءً على التغييرات في عضوية المجموعة.السيناريو الأساسي هو أن تتم مزامنة المستخدمين مع قاعدة بيانات أمنية، وعندما تتغير عضوية المجموعة، يحتاج المستخدمون إلى تغيير حقوق الوصول الخاصة بهم (على سبيل المثال.إذا كنت الآن عضوًا في "موظفي تكنولوجيا المعلومات"، فيجب أن أتمكن تلقائيًا من الوصول إلى غرفة الخادم، وإذا تمت إزالتي من تلك المجموعة، فسوف أفقد الوصول تلقائيًا إلى غرفة الخادم).

تكمن المشكلة في أنه عند إجراء DirectorySynchronization ضد المجموعات، فإنك تستعيد المجموعة التي تمت إضافة/إزالة عضو فيها، ومن هناك عندما تحصل على قائمة الأعضاء، فإنك تستعيد قائمة جميع الأعضاء في تلك المجموعة حاليًا وليس فقط الأعضاء الذين تمت إضافتها أو إزالتها.يقودني هذا إلى مشكلة كفاءة كبيرة - حيث أنه من أجل معرفة ما إذا كان المستخدم قد تمت إضافته أو إزالته، سيتعين علي الاحتفاظ بقائمة محلية لكل مجموعة وجميع الأعضاء ومقارنتها بالقائمة الحالية لمعرفة من تمت إضافته تمت إضافته (ليس في القائمة المحلية)، ومن تم حذفه (في القائمة المحلية، وليس في قائمة الأعضاء الحاليين).

أنا أناقش فقط تخزين تفاصيل عضوية المجموعة في DataSet في الذاكرة والكتابة على القرص في كل مرة أقوم فيها بمعالجة تغييرات العضوية الجديدة.وبهذه الطريقة، إذا توقفت/تعطلت الخدمة أو تمت إعادة تشغيل الجهاز، فلا يزال بإمكاني الوصول إلى الحالة الحالية لـ Active Directory ضمن قاعدة بيانات الأمان من خلال مقارنة آخر المعلومات الموجودة على القرص بتلك الموجودة في قائمة عضوية المجموعة الحالية.ومع ذلك، يبدو هذا غير فعال إلى حد كبير - إجراء فحص لكل عضو في المجموعة للمقارنة بما هو موجود في مجموعة البيانات ثم كتابة التغييرات على القرص في كل مرة يتم فيها إجراء تغييرات على القائمة.

هل تعامل أحد مع هذا السيناريو من قبل؟هل هناك طريقة لم أجدها لاسترداد دلتا من أعضاء المجموعة فقط؟ماذا ستفعل في هذه الحالة للتأكد من عدم تفويت أي تغييرات مطلقًا مع تحقيق أقل أداء ممكن؟

يحرر: قد يحتوي الإعلان على 500 مستخدم، وقد يحتوي على 200000 مستخدم - يعتمد ذلك على العميل، وفوق ذلك عدد المجموعات التي يكون المستخدم العادي عضوًا فيها

هل كانت مفيدة؟

المحلول

أود أن أقول أن ذلك يعتمد على عدد كائنات الدليل النشط التي تحتاج إلى تتبعها.إذا كان العدد صغيرًا (أقل من 1000 مستخدم)، فمن المحتمل أن تتمكن من إجراء تسلسل لبيانات الحالة الخاصة بك على القرص مع تحقيق أداء ملحوظ قليل.إذا كنت تتعامل مع عدد كبير جدًا من الكائنات، فقد يكون من الأفضل إنشاء مخطط استمراري بسيط في شيء مثل SQL Express واستخدامه.

نصائح أخرى

يمكنك إعداد التدقيق لنجاح تعديلات الحساب في محرر سياسة المجموعة

يمكنك بعد ذلك مراقبة سجل الأمان للإدخالات والتعامل مع إدخالات السجل عند تعديلات الحساب.

على سبيل المثال

        EventLog myLog = new EventLog("Security");

        // set event handler
        myLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
        myLog.EnableRaisingEvents = true;

تأكد من أن لديك امتيازات الوصول إلى سجل أحداث الأمانhttp://support.microsoft.com/kb/323076

هل تعلم أن هناك منتجات تساعدك في مزامنة الدليل وتوفير المستخدم (ابحث في جوجل عن تلك المصطلحات)؟لم يتم اختراعه هنا وكل ذلك، وقد يتعين عليك تبرير الاستثمار في المناخ الحالي، ولكن تطوير وصيانة التعليمات البرمجية التي يوجد لها بالفعل حل تجاري ليس دائمًا، دعنا نقول، الطريقة الأكثر فعالية من حيث التكلفة على المدى الطويل يجري.

لا تدعم كافة الأحداث/التزويد، ولكنها تدعم تتبع التغييرات وتوزيعها:ليس من المهم إنشاء حلول للمناسبات بالإضافة إلى تلك الإمكانات.

مايكروسوفت لديها خادم تكامل الهوية (MISS) والتي يتم إعادة تجميعها كجزء من مدير دورة حياة الهوية.تم بناؤه في الأصل على منتج أكثر عمومية لإدارة البيانات الوصفية/الرئيسية، ولكنه عملي.تمتلك شركة آي بي إم تيفولي دليل متكامل (لكنك تحتاج إلى مواكبة تغييرات الاسم كل سنتين!).أوراكل لديها مدير الهوية أوراكل, ، والشمس ان مدير الهوية.معظم هذه المنتجات هي منتجات رائدة تم شراؤها من قبل اللاعبين الرئيسيين لسد الفجوة في محافظهم الاستثمارية.

بالطبع، هذه منتجات على مستوى المؤسسات، مما يعني أنها كبيرة ومكلفة، ولكنها بشكل عام آمنة جدًا للمستقبل وقابلة للتوسيع.إذا لم تكن بحاجة إلى قوتها الكاملة (حتى الآن!)، فسوف تحتاج إلى النظر في تخزين نسخة لنفسك.في هذه الحالة، هل فكرت في تخزين النسخة المتماثلة الخاصة بك من آخر شجرة AD معروفة باستخدام إعلان LDS (سابقا م/ص)؟إنها ليست بالتنسيق الأمثل لمقارنة الاختلافات، ولكن قاعدة بيانات الدليل ستتناسب بشكل جيد، حتى النوع الخفيف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top