أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية استخدام مكونات ADSI الأصلي العثور على المجموعة الأساسية

انتهي دعم Windows Server 2003 في 14 يوليو 2015!

أنهت شركة Microsoft دعم نظام التشغيل Windows Server 2003 في 14 يوليو 2015. لقد أثر هذا التغيير على تحديثات البرامج لديك وخيارات الأمان الخاصة بك. تعرف على ما يعنيه ذلك فيما يتعلق بك وكيفية الحفاظ على حمايتك.

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

اضغط هنا لرابط المقالة باللغة الانجليزية321360
الموجز
يشرح هذا المقال كيفية استخدام مكونات واجهة خدمات الدليل Active Directory (ADSI) الأصلي لتحديد عضوية المجموعة الأساسية للمستخدم.
معلومات أخرى

كيف يتم تخزين المجموعة الرئيسية على كائن مستخدم في "Active Directory"

يحتوي كل سياق كائن الأمان (مثل مستخدمين ومجموعات الأمان) في "Active Directory" سمة معرف (SID) أمان المقترنة بها. يحتوي SID العديد من المكونات كما هو موضح في مرجع "SID مكونات" تضمين في القسم "مرجع" في هذه المقالة. طريقتان من هذه المكونات على SID هي معرف مجال النسبي (RID) و الخاصة RID إلى كائن ضمن المجال.

يتم تخزين المجموعة الأساسية للمستخدم (كـ RID المجموعة في مجال المستخدم) على سمة PrimaryGroupID لكائن المستخدم. المجموعة الأساسية للمستخدم فقط مجموعة موجودة في نفس المجال مثل المستخدم ويمكن هذه المجموعة يجب أن تكون مجموعة المستخدم عضو. كما يحتوي هذا الكائن المجموعة في "Active Directory" سمة تسمى PrimaryGroupToken ، الذي يقوم بتخزين RID هذه المجموعة ضمن المجال.

السماح موفري كل من Windows NT و بروتوكول الوصول لتغيير بيانات الدليل (LDAP) المبرمجين لتغيير المجموعة الأساسية للمستخدم بواسطة تعيين قيمة السمة PrimaryGroupID إلى RID مجموعة يكون المستخدم عضوًا. إذا لم يكن المستخدم عضواً في مجموعة لا يمكن تعيين المستخدم PrimaryGroupID RID المجموعة.

عندما يستخدم موفر Windows NT في ADSI ، يتم تضمين كإدخال في مجموعة IADsUser::Groups المستخدم المجموعة الأساسية.

مع موفر LDAP هي المجموعة الأساسية غير المتضمنة في مجموعة IADsUser::Groups كإدخال ولا يتم جزء الاسم المميز (DN) المجموعة من السمة MemberOf من كائن المستخدم في الدليل. المجموعة RID في PrimaryGroupID هو فقط الذي تتم الإشارة إلى المجموعة الأساسية للمستخدم على كائن المستخدم LDAP.

يعرّف أي موفر آلية تحديد اسم المجموعة الأساسية للمستخدم بشكل مباشر من كائنات المستخدم الخاصة بهم. يتم إجراء المشكلة حتى أكثر تعقيداً بواسطة حقيقة أن كل كائن المجموعة الموفرة من قبل كل موفر يعتمد مجموعة مختلفة من سمات ، كما يلي:
  • لا يعتمد الكائن المجموعة المتوفرة من قبل Windows NT السمة PrimaryGroupToken ولا موفر Windows NT يدعم بأية طريقة أخرى لاسترداد RID المجموعة باستخدام تعليمة برمجية أصلية ADSI.
  • سمة PrimaryGroupToken كائن المجموعة موفر LDAP سمة محسوبة. هذه السمة غير موجودة على كائن المجموعة في الدليل. في الحقيقة، يتم ، إنشاء السمة عند طلب العميل مع استدعاء أسلوب IADs::GetInfoEx. ليس من الممكن إجراء عمليات LDAP استناداً إلى سمات مكونة في "Active Directory". لذلك، لا يمكنك البحث باستخدام موفر LDAP لمجموعة استناداً إلى سمة PrimaryGroupToken يطابق السمة PrimaryGroupID على كائن المستخدم الخاص به المجموعة الأساسية التي تريد تحديد. هذا أيضاً قواعد خارج حل ADSI خالص غير تابعة كائن COM خارجي لمساعدتك على تحديد المجموعة الأساسية.

طرق لتحديد المجموعة الأساسية للمستخدم

فيما يلي ثلاثة أساليب المعروفة لتحديد اسم المجموعة الأساسية للمستخدم:
  • إنشاء SID سلسلة ربط كائن مجموعة في "Active Directory" من مكون RID المجال المستخدم SID و RID المجموعة تخزين على سمة PrimaryGroupID على كائن المستخدم.

    هذه هي الطريقة الموضحة في المقالة Microsoft قد تحتوي هذه المقالة على ارتباطات Q297951 (المضمنة في القسم "مرجع" في هذه المقالة). تكون المشكلة رئيسي مع هذا الأسلوب أن لإنشاء SID سلسلة الربط يجب أن تعتمد للمبرمج على كائن ADsSID تحويل واصف الأمان الثنائية من كائن المجال في نموذج SDDL الخاص به. كائن ADsSID تتم استضافتها من قبل ملف ADsSecurity.dll الذي يجب أن يتم نسخها إلى وتسجيله على العميل قبل أن يمكن تشغيل التعليمات البرمجية بنجاح.
  • استخدام استعلام LDAP البحث عن كافة مجموعات في مجال وإرجاع السمة PrimaryGroupToken الخاصة بهم.

    هذا الأسلوب حل LDAP خالص. ومع ذلك، الحل فتحها باستخدام البرامج النصية غير فعال جداً لأن هذا البحث بإرجاع كل مجموعة في المجال حتى تلك المستخدم ليس عضواً; و لأنه يتم إنشاء سمة PrimaryGroupToken على العميل كما traversed مجموعة سجلات ، هذا البحث بطيئة تماماً. يمكن أن يكون هذا الأسلوب بشكل خاص مضيعة للوقت إذا كان هناك عدد كبير من المجموعات في المجال. أمثلة على كيفية إنشاء استعلامات ADO تعريف LDAP abound ثم لذلك، لا يتم تضمينها في هذه المقالة.
  • الاستفادة من الميزات الموجودة في كل موفر إنشاء حل مختلط.

    هذا الحل تستفيد من ميزات موفري مختلفة لتحديد المجموعة الأساسية للمستخدم. للقيام بذلك، اتبع الخطوات التالية:
    1. ربط كائن المستخدم مع موفر Windows NT.

      يوفر كائن مستخدم Windows NT مجموعة مجموعة تم التطبيق، فيضمن أن تحتوي المجموعة الأساسية للمستخدم. أيضاً، يتم تخزين PrimaryGroupID لكائن المستخدم بعيداً في موقع مؤقت للاستخدام لاحقًا في هذه الخوارزمية.
    2. تعداد مجموعة IADsUser::Groups.
    3. استخراج الخاصية SamAccountName من ADsPath لكل مجموعة في هذه المجموعة ومن ثم إنشاء سلسلة استعلام تعريف LDAP للبحث عن كافة المجموعات مع الخاصية SamAccountName المذكورة في هذه المجموعة إرجاع قيمها السمة PrimaryGroupToken و DistinguishedName.
    4. تشغيل بحث ADSI ADO ومن ثم يتكرر خلال مجموعة سجلات مقارنة كل مجموعة PrimaryGroupToken مع قيمة السمة PrimaryGroupID المخزنة مؤقتاً في إصدار سابق.
    5. في حالة العثور على تطابق إيقاف وعرض الاسم المميز لهذه المجموعة كمجموعة أساسية لهذا المستخدم.
    6. إذا لم تعثر على تطابق متابعة تنفيذ الحلقات خلال نتيجة البحث.
    فوائد هذا الأسلوب واضحة فوراً. كافة الكائنات المستخدمة الأصلي ADSI ويتم لا تتطلب مكونات إضافية. بالإضافة إلى ذلك، يتضمن التعداد المجموعات التي قد تكون المجموعة الأساسية فقط.

    مع ذلك، لاحظ عيوب التالية: عندما يتم تعداد مجموعة IADsUser::Groups كائن تم إرجاعه واجهة IADs إلى العضو في المجموعة. إذا لسبب المستخدم تنفيذ التعداد ليس لديه الأذونات اللازمة لفتح كائن معين, يتوقف التعداد دون يشير إلى خطأ. توضح التعليمة البرمجية التالية كيف يمكنك تنفيذ خوارزمية السابق:
    dim oUsr dim oGrp '' ToDo: Change the following variables to specific values for your domain.' DomainName = "myDomain"UserLoginName = "myUserLoginName"'' Bind to the user object with the Windows NT provider.' set oUsr = GetObject("WinNT://" & DomainName & "/" & UserLoginName & ",user") set grp = oUsr.Groups GrpID = oUsr.PrimaryGroupID GrpName = "" '' Building Query Filter for the search for all the groups that the user is a member of.'QueryFilter = "(|"for each Item in Grp    NT4Name = replace(Item.ADsPath,"WinNT://","")    tempArray = split(nt4Name,"/")    NT4Name = tempArray(1)   QueryFilter = QueryFilter & "(samAccountName=" & NT4Name & ")"nextQueryFilter = QueryFilter & ")"'' Building LDAP dialect Query String.'QueryString = "<LDAP://" & DomainName & ">;" & QueryFilter & ";PrimaryGroupToken,distinguishedName;subtree"'' Performing Query against the Active Directory for all the groups that ' the user belongs to and retrieving the RID of the group object off' the PrimaryGroupToken attribute on the user.'Dim oConnection, oCommand, oRecordsetSet oConnection = CreateObject("ADODB.Connection")Set oCommand = CreateObject("ADODB.Command")oConnection.Provider = "ADsDSOObject"oConnection.Open "Active Directory Provider"Set oCommand.ActiveConnection = oConnectionoCommand.CommandText = QueryStringoCommand.Properties("Page Size") = 900Set oRecordset = oCommand.Execute'' Looping through all the records in the search result to determine whether' any of these group's PrimaryGroupToken attribute value match the ' PrimaryGroupID attribute value stored on the user object.'While ((NOT oRecordset.EOF) and (Not bGroupFound))  if (GrpID = oRecordset.Fields("PrimaryGroupToken").value) then    GrpName = oRecordset.Fields("DistinguishedName").Value    bGroupFound = True   End If  oRecordset.moveNextWendSet oRecordset = NothingSet oCommand = NothingSet oConnection = Nothing'' Displaying Results of the search.' if( bGroupFound ) then    WScript.Echo "Primary Group for " & oUsr.AdsPath    WScript.Echo "Is: " & GrpName else    WScript.Echo "Primary Group Not Found" end if					
مراجع
لمزيد من المعلومات، انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
297951كيفية استخدام سمة PrimaryGroupID العثور على المجموعة الأساسية للمستخدم

تحذير: تمت ترجمة هذه المقالة تلقائيًا

خصائص

رقم الموضوع: 321360 - آخر مراجعة: 03/03/2008 17:30:05 - المراجعة: 5.0

Microsoft Windows Server 2003, Standard Edition (32-bit x86), Microsoft Windows 2000 Server, Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Client Extension

  • kbmt kbdswadsi2003swept kbinfo KB321360 KbMtar
تعليقات
/html>t> html>