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

كيفية استخدام Visual Basic ADsSecurity.dll لترتيب ACEs بشكل صحيح في ACL

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

اضغط هنا لرابط المقالة باللغة الانجليزية269159
إخلاء مسؤولية من محتوى قديم في قاعدة المعارف
عن تقديم الدعم التقني لهاو لذلك تظهر هذه المقالة كما هي و لن يتم تحديثها Microsoft تمت كتابة هذه المقالة بخصوص منتجات توقفت
الموجز
يوضح هذا المقال كيفية استخدام ADsSecurity.dll الحصول على واصف أمان (SD) الملف أو كائن "Active Directory" أو مفتاح التسجيل. توضح هذه المقالة كيفية القيام بذلك، بمجرد الحصول واصف الأمان يحتوي على استرداد قائمة التحكم بالوصول المستقل (ACL) من تلك SD ثم إضافة إدخال التحكم بالوصول (ACE) في الموقع الصحيح. توفر المقالة خوارزمية بسيطة مع مثال رمز Microsoft Visual Basic لتوضيح كيفية ترتيب ACL بشكل صحيح ثم كتابة ACL SD.
معلومات أخرى
إضافة أسلوب IADsAccessControlList::AddAce ACE في أعلى قائمة التحكم بالوصول (ACL). في بعض الحالات، يتم إنشاء إضافة ACE في الأعلى أمان غير مرغوب الوصول. سيتم التخزين المؤقت للخاصية واجهات خدمة دليل Active Directory (ADSI) في نظام التشغيل Windows Server 2003 وفي Windows XP ترتيب DACL بشكل صحيح قبل الكتابة مرة أخرى إلى الكائن. إعادة ترتيب مطلوب فقط في Microsoft Windows 2000. ترتيب المناسبة ACEs في ACL كما يلي:
ACE رفض الوصول التي تنطبق على الكائن نفسه
ACE رفض الوصول التي تنطبق على تابع الكائن مثل مجموعة الخاصية أو الخصائص
ACE السماح بالوصول التي تنطبق على الكائن نفسه
ACE السماح بالوصول التي تنطبق على تابع الكائن مثل مجموعة الخاصية أو الخصائص
في المنتجات المسردة في هذه المقالة لا تعتمد واجهة IADsAccessControlList أسلوب الطلبيات ACL بشكل صحيح. يجب أن يتم فرز ACE إلى هذه المجموعات الخمس:
رفض الوصول على الكائن
رفض الوصول على التابعة أو خاصية
السماح بالوصول على الكائن
السماح بالوصول على التابعة أو خاصية
كافة توارث ACE
ترتيب ACEs الموروثة يجب أن يتم لا تبديل. كافة ACEs الموروثة يضيفها إلى نظام التشغيل و مرتبة بشكل مناسب. يمكن تحديد مبرمجاً يجب أن تتم وراثة ACE و Windows 2000 أو Windows NT سوف تستغرق تتولى نشر ACE على الكائنات التابعة.

يوجد استثناء قواعد نشر. إضافة إلى ACL الكائن الآس لن تلقائياً الحصول على تطبيق الكائنات الموجودة في شجرة وحدة التحكم. وهو مسؤولية للمبرمج تقود الشجرة ثم نشر ACE عن طريق إضافة ACE إلى كائنات موجودة. سوف يتم نشر ACE على كائنات جديدة في الشجرة الفرعية.

خوارزمية الفرز ACEs في ACL

  1. الحصول على ACL المستقل (DACL) من واصف الأمان.
  2. تحقق من IADsAccessControlEntry::AceFlags لمعرفة ما إذا كان تم ACE موروثة (التحقق من ADS_ACEFLAG_INHERITED_ACE بت).
  3. تحقق من IADsAccessControlEntry::AceType لمشاهدة ما هو نوع من ACE منح الوصول ما يتم منح حق الوصول إلى (الكائن نفسه أو خصائص الكائن). توضح القائمة التالية قيم نوع ACE "و" ماذا تعني:
    تمنح ADS_ACETYPE_ACCESS_ALLOWED - المسموح به الوصول إلى الكائن بأكمله
    يشير إلى ADS_ACETYPE_ACCESS_ALLOWED_OBJECT - يُسمح الوصول إلى خاصية أو مجموعة الخصائص
    ADS_ACETYPE_ACCESS_DENIED - يرفض الوصول إلى الكائن بأكمله
    ADS_ACETYPE_ACCESS_DENIED_OBJECT - يرفض الوصول إلى خاصية أو مجموعة الخصائص.
  4. ضع ACE في DACL المؤقتة المناسبة استناداً إلى قيمة IADsAccessControlListEntry::AceType.
  5. إعادة إنشاء ACL من ACLs منفصلة بالترتيب التالي:
    أنواع ADS_ACETYPE_ACCESS_DENIED ACE
    أنواع ADS_ACETYPE_ACCESS_DENIED_OBJECT ACE
    أنواع ADS_ACETYPE_ACCESS_ALLOWED ACE
    أنواع ADS_ACETYPE_ACCESS_ALLOWED_OBJECT ACE
    تعيين الآس علامة ADS_ACEFLAG_INHERITED_ACE في IADsAccessControlListEntry::AceFlags
  6. تعيين ACL الجديد إلى نفس ACL القديم مستوى المراجعة.
  7. استبدال ACL على واصف الأمان.

الخطوات لاستخدام التعليمات البرمجية لـ Visual Basic الذي يتم توفيره في هذه المقالة

  1. تسجيل ADsSecurity.dll.

    ADsSecurity.dll جزءاً من Active Directory دليل خدمة واجهات (ADSI) 2.5 Resource Kit. لتحميل مجموعة ADSI 2.5 الموارد قم بزيارة موقع Microsoft التالي على الويب: استخدام Regsvr32 لتسجيل ADsSecurity.dll. إذا لم تسجيل DLL هذه بشكل صحيح, يشير هذا السلوك إلى تثبيت ADSI. إذا كنت تقوم بتشغيل التعليمات البرمجية على جهاز كمبيوتر يعمل بنظام التشغيل Microsoft Windows NT أو على جهاز كمبيوتر يستند إلى نظام التشغيل Microsoft Windows 98 تثبيت "ملحق العميل" المناسب دليل Active Directory. لمزيد من المعلومات حول كيفية الحصول على هذه الأجهزة العميلة راجع قسم "المراجع".
  2. بدء تشغيل Visual Basic. ثم قم بإنشاء مشروع EXE قياسية.
  3. عرض مراجع المشروع. تأكد من تحديد اتبع:
    • مكتبة نوع DS النشط
    • مكتبة نوع ADsSecurity 2.5
  4. جعل زر أمر في النموذج.
  5. انقر نقراً مزدوجاً فوق زر الأمر. ثم قم بلصق التعليمة البرمجية التالية في معالج الأمر Command1_Click.

نموذج التعليمة البرمجية Visual Basic يوضح كيفية تنفيذ خوارزمية الفرز

Dim sec As New ADsSecurityDim sd As IADsSecurityDescriptorDim dacl As IADsAccessControlListDim ace As IADsAccessControlEntryDim newAce As New AccessControlEntry'' Declare temporary ACLs for sorting the original' ACL'Dim newdacl As New AccessControlListDim ImpDenyDacl As New AccessControlListDim ImpDenyObjectDacl As New AccessControlListDim InheritedDacl As New AccessControlListDim ImpAllowDacl As New AccessControlListDim impAllowObjectDacl As New AccessControlListPrivate Sub Command1_Click()'' Be sure to register ADsSecurity.Dll using RegSvr32 and' adding the ADsSecurity2.5 Type Library to you references for' the project.'' Using the ADsSecurity object, retrieve a SD for an object.  Just' Replace the LDAP:// path with the path of an object that contains a' SD.  For additional details on valid path strings, review' the information stored in the Platform SDK ADSI samples starting with' "<Platform SDK Root>\Samples\NetDs\ADSI\rtk.htm"'Set sec = CreateObject("ADsSecurity")<BR/>' TODO :  replace the servername and DN of the object you want to modify.Set sd = sec.GetSecurityDescriptor("LDAP://MyDCname/cn=MyUser,cn=Users,dc=MyDom,dc=com")'Displaying the ACE in the DACL --- it's the same way you display ACEs for File, File Share, Registry, Exchange, and Active Directory's ACL.Set dacl = sd.DiscretionaryAclDebug.Print Date & Time & "Initial Values of DACL"For Each ace In dacl   Debug.Print ace.Trustee   Debug.Print Hex(ace.AccessMask)   Debug.Print Hex(ace.AceType)   Debug.Print Hex(ace.AceFlags)   Debug.Print Hex(ace.Flags)NextDebug.Print dacl.AceCount'' Initialize all of the new ACLs'' If you are doing this in VBSscript you will need to use' The following methods of creating the ACL bins instead of' using the Dim As New statements above. ''Set newAce = CreateObject("AccessControlEntry")'Set newdacl = CreateObject("AccessControlList")'Set InheritedDacl = CreateObject("AccessControlList")'Set ImpAllowDacl = CreateObject("AccessControlList")'Set InhAllowDacl = CreateObject("AccessControlList")'Set ImpDenyObjectDacl = CreateObject("AccessControlList")'Set ImpAllowObjectDacl = CreateObject("AccessControlList")''' Create a new ace, this one' sets an extended right on the user object that allows the' trustee to read and write the userAccountControl property of an' user object.'' TODO : Replace the trustee with an appropriate trustee on the domain' in question.'newAce.Trustee = "MyDomain\Myuser"newAce.Flags = ADS_FLAG_OBJECT_TYPE_PRESENTnewAce.ObjectType = "{BF967A68-0DE6-11D0-A285-00AA003049E2}"newAce.AccessMask = ADS_RIGHT_DS_READ_PROP Or ADS_RIGHT_DS_WRITE_PROPnewAce.AceType = ADS_ACETYPE_ACCESS_ALLOWED_OBJECTnewAce.AceFlags = ADS_ACEFLAG_INHERIT_ACE'' Place the new ace in the DACL'dacl.AddAce newAce'' Sift the DACL into 5 bins:' Inherited Aces' Implicit Deny Aces' Implicit Deny Object Aces' Implicit Allow Aces' Implicit Allow object aces'For Each ace In dacl  '  ' Sort the original ACEs into their appropriate  ' ACLs  '  Debug.Print ace.Trustee  If ((ace.AceFlags And ADS_ACEFLAG_INHERITED_ACE) = ADS_ACEFLAG_INHERITED_ACE) Then     '     ' Do not really care about the order of inherited aces. Since we are     ' adding them to the top of a new list, when they are added back     ' to the Dacl for the object, they will be in the same order as     ' they were originally. Just a positive side effect of adding items     ' of a LIFO (Last In First Out) type list.     '     InheritedDacl.AddAce ace  Else     '     ' We have an Implicit ACE, let's put it the proper pool     '     Select Case ace.AceType     Case ADS_ACETYPE_ACCESS_ALLOWED        '        ' We have an implicit allow ace        '        ImpAllowDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_DENIED        '        ' We have an implicit Deny ACE        '        ImpDenyDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_ALLOWED_OBJECT        '        ' We have an object allowed ace        ' Does it apply to a property? or an Object?        '        impAllowObjectDacl.AddAce ace     Case ADS_ACETYPE_ACCESS_DENIED_OBJECT        '        ' We have an object Deny ace        '        ImpDenyObjectDacl.AddAce ace     Case Else        '        ' Missed a bin?        '        Debug.Print "Bad ace...." & Hex(ace.AceType)     End Select  End IfNext'' Combine the ACEs in the proper order' Implicit Deny' Implicit Deny Object' Implicit Allow' Implicit Allow Object' Inherited aces'' Implicit Deny'For Each ace In ImpDenyDacl  newdacl.AddAce aceNext'' Implicit Deny Object'For Each ace In ImpDenyObjectDacl  newdacl.AddAce aceNext'' Implicit Allow'For Each ace In ImpAllowDacl  newdacl.AddAce aceNext'' Implicit Allow Object'For Each ace In impAllowObjectDacl  newdacl.AddAce aceNext'' Inherited Aces'For Each ace In InheritedDacl  newdacl.AddAce aceNextsd.DiscretionaryAcl = newdaclDebug.Print DateFor Each ace In newdacl   Debug.Print ace.Trustee   Debug.Print "Ace Mask: " & Hex(ace.AccessMask)   Debug.Print "Ace Type: " & Hex(ace.AceType)   Debug.Print "Ace Flags: " & Hex(ace.AceFlags)   Debug.Print "Object Type value: " & Hex(ace.Flags)   Debug.Print "Object Guid : " & ace.ObjectTypeNext'' Set the appropriate revision level' for the DACL'newdacl.AclRevision = dacl.AclRevision'' Replace the Security Descriptor'sec.SetSecurityDescriptor sd' If this generates the error -214023559 or 80070539 check your TODO' strings.  This error is most likely a problem with DNS name resolution.				
مراجع
للحصول على معلومات إضافية، انقر فوق أرقام المقالات التالية لعرضها في "قاعدة المعارف لـ Microsoft:
269175كيفية استخدام Visual C++ لترتيب ACEs بشكل صحيح في ACL
279682كيفية استخدام ADsSecurity.dll لإضافة إدخال تحكم وصول إلى مجلد NTFS
للحصول على معلومات إضافية حول كيفية تثبيت "ملحق العميل دليل Active Directory" انقر فوق رقم المقالة التالي لعرضها في "قاعدة المعارف لـ Microsoft:
288358كيفية تثبيت "ملحق خدمة Active Directory على العميل"

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

خصائص

رقم الموضوع: 269159 - آخر مراجعة: 01/15/2007 09:08:14 - المراجعة: 7.1

Microsoft Active Directory Service Interfaces 2.5, Microsoft Active Directory Service Interfaces 2.5, Microsoft Windows Scripting Host 2.5

  • kbmt kbdswadsi2003swept kbhowto KB269159 KbMtar
تعليقات
/html>=">cript> =4050&did=1&t=">