كيفية استخدام السمة بريماريجروبيد للبحث عن مجموعة أساسية لمستخدم

ملخص

توضح هذه المقالة طريقة فعالة للبحث عن المجموعة الأساسية للمستخدم.

مزيد من المعلومات

معلومات أساسية

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

بريماريجروبتوكين كائن المجموعة سمة تم تشكيلها. وهذا يعني أن السمة غير مخزنة في "Active Directory" ولكن بناء على العميل بموفر واجهة خدمات الدليل النشط (ADSI). لأنه يتم إنشاء السمة، لا يمكن استخدامه في معيار بحث في استعلام LDAP.

فمن الممكن لإنشاء معرف الأمان (SID) بريماريجروب بالأخذ في الاعتبار ما يلي:

  • معرف الأمان لمستخدم/مجموعة تتكون من المعرف المجال النسبي (RID) بالإضافة إلى ذلك RID المستخدم/المجموعة. على سبيل المثال إذا كان معرف الأمان للمستخدم S-1-111-222-333-efg، RID لهذا المستخدم هو "المجموعة" و RID الخاصة بالمجال هي S – 1-111-222-333.
  • تحتوي السمة بريماريجروبيد على كائن مستخدم/مجموعة RID المجموعة الأساسية.
  • يجب أن تكون المجموعة الأساسية للمستخدم مجموعة موجودة في المجال الرئيسي الخاص بالمستخدم.
  • يمكن بناء معرف الأمان الخاص بالمجموعة الأساسية بواسطة وصل المجال RID بسمة بريماريجروبيد كائن المستخدم. على سبيل المثال، يمكن أن يكون مجال RID S – 1-111-222-333 ويمكن أن تكون قيمة بريماريجروبيد abc. وعندئذ سيكون SID المجموعة الأساسية S-1-111-222-333-abc.
يوضح نموذج التعليمة البرمجية المتوفرة في هذه المقالة كيفية إنشاء معرف الأمان الخاص بالمجموعة الأساسية للمستخدم بإزالة RID المستخدم من معرف الأمان الخاص به واستبدال مع بريماريجروبيد (المجموعة الأساسية RID). يستفيد التعليمات البرمجية للكائن إيادسيد مطبقة في الملف ADsSecurity.dll. الملف ADsSecurity.dll جزء من واجهات خدمة الدليل النشط (ADSI) مجموعة تطوير البرامج (SDK) مقاس 2.5 بوصة. لتحميل 2.5 SDK واجهات خدمة الدليل النشط، قم بزيارة موقع Microsoft التالي على الويب:

توفير واجهة إيادسيد طريقة قابلة للبرمجة النصية لتحويل SID أولية إلى شكله لغة تعريف واصف الأمان (SDDL) باستخدام API كونفيرتسيدتوسترينجسيد. يتوفر هذا المعهد على Windows 2000 و Windows Server 2003 فقط.

ولهذا الأسلوب المستخدم في نظام التشغيل Windows NT 4.0، يجب تحويل معرف الأمان الأولية إلى نظيرتها سلسلة من خلال استخدام بعض الأنواع من برنامج تضمين COM DLL. يرد مثال لكيفية بناء نموذج SDDL معرف على الأرامل NT 4.0 في مقالة "قاعدة معارف Microsoft" التالية:

كيفية استخدام Microsoft Visual Basic لتحويل سلسلة معرف الأمان SID أولية 286182

خطوات لإنشاء معرف الأمان SID لمجموعة أساسية من المستخدم

  1. الربط بكائن المستخدم.
  2. استرداد الخاصية ObjectSID من كائن المستخدم.
  3. يتم استخدام كائن إيادسيد لتحويل معرف الأمان الخاص بالمستخدم من شكله الثنائية داخل النموذج SDDL.
  4. علامات إيقاف RID المستخدم من النموذج SDDL معرف الأمان.
  5. استرداد الخاصية بريماريجروبيد للمستخدم وتحويله إلى سلسلة طويلة غير موقعة.
  6. إلحاق تمثيل سلسلة بريماريجروبيد معرف أمان المستخدم تعديله.
  7. استخدام إيادسيد لتحويل النموذج SDDL معرف الأمان في نظام التشغيل Windows NT أو LDAP ADsPath.
  8. ربط إلى ADsPath لاسترداد أي معلومات حول المجموعة الأساسية التي تريدها.

برنامج نصي Visual Basic لتحديد مجموعة أساسية ل ADsPath المحدد

'' The following VBS code illustrates how to determine the primary group
' given an ADsPath as a single argument. The script determines if the
' string passed is a WinNT or LDAP path and then uses the appropriate
' method for retrieving the Primary Group path.
'
' ADsSecurity Constants
'
const ADS_SID_RAW = 0
const ADS_SID_HEXSTRING = 1
const ADS_SID_SAM = 2
const ADS_SID_UPN = 3
const ADS_SID_SDDL = 4
const ADS_SID_WINNT_PATH = 5
const ADS_SID_ACTIVE_DIRECTORY_PATH = 6
const ADS_SID_SID_BINDING = 7
'-------------------------------------------------
' Function StrRID returns and unsigned long of
' the given RID value
'
' If the most significant bit is set in a VB Long
' then VB will interpret the value as a negative number
' and CStr will convert the unsigned long into a string with a leading
' "-" sign.
'
' This function checks to see if the most significant bit
' is set, then tricks the CStr function into outputting
' and unsigned long value by using a double float value
' to store the RID value, then uses the CStr function to get the
' string version.
'
function StrRID( inVal )
dim dLocal
if( (inVal and &H80000000) <> 0 ) then
dLocal = CDbl((inval and &H7FFFFFFF))
dLocal = dLocal + 2^31
StrRID = cstr(dLocal)
else
StrRID = Cstr(inVal)
end if
end function
'=================================================
' Main Script
'
' Assumes that the first argument is a WinNT or
' LDAP user path
'
set args = WScript.Arguments
WScript.Echo "Start: "& Now
set ADsSid = CreateObject("ADsSID")
'
' Determine if we are using the LDAP or WinNT providers
'
userAdsPath = args(0)
if( InStr(userAdsPath,"LDAP") <> 0 ) then
'
' LDAP ADS Path, need to work with the an Active Directory Path
'
ADS_SID_Constant = ADS_SID_ACTIVE_DIRECTORY_PATH
else
'
' WinNT Path, working with the WinNT provider
'
ADS_SID_Constant = ADS_SID_WINNT_PATH
end if
'
' Initialize the IADsSID object and retrieve
' the SDDL form of the SID
'
ADsSID.SetAs ADS_SID_Constant, CStr(userADsPath)
DomainSID = ADsSID.GetAs(ADS_SID_SDDL)
'
' We have the SDDL form of the user's SID.
' Remove the user's RID ( the last sub authority)
' up to the "-"
'
DomainSID = mid(DomainSID,1,(InStrREV(DomainSID,"-")))
'
' Bind to the user object to retrieve the PrimaryGroupID.
' Build the SID of the Primary group
' from the domainSID and the Primary Group RID in
' the PrimaryGroupID.
'
set obj = GetObject(userADsPath)
lngGroupID = obj.Get("primaryGroupID")
strGroupRID = StrRID( lngGroupID )
DomainSID = DomainSID & strGroupRID
'
' Use ADsSID to retrieve a WinNT path or
' a SID Bind string to locate the LDAP path
'
ADsSID.SetAs ADS_SID_SDDL, CStr(DomainSID)
if( ADS_SID_Constant = ADS_SID_ACTIVE_DIRECTORY_PATH ) then
'
' With the LDAP provider, build a SID bind string and
' retrieve the Group object via this bind string
'
SIDBindStr = ADsSID.GetAs(ADS_SID_HEXSTRING)
SIDBindStr = "LDAP://<SID=" & SIDBindStr & ">"
set oGrp = GetObject(SIDBindStr)
strPrimaryGroupADsPath = oGrp.Get("DistinguishedName")
set oGrp = Nothing
else
'
' Its a WinNT path, retrieve the ADsPath for the WinNT object
'
strPrimaryGroupADsPath = ADsSID.GetAs( ADS_SID_Constant )
end if
WScript.Echo "Primary group ADS Path for user : " & userADsPath
WScript.Echo "Is: " & strPrimaryGroupADsPath
WScript.Echo "Finished: " & Now

خصائص

رقم الموضوع: 297951 - آخر مراجعة: 18‏/01‏/2017 - المراجعة: 1

تعليقات