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




active-directory (2)

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

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

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

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

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

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


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

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

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

        EventLog myLog = new EventLog("Security");

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

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





active-directory