Làm th? nào đ? s? d?ng các thành ph?n ADSI b?n x? đ? t?m các nhóm chính

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 321360 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t này gi?i thích cách s? d?ng b?n đ?a c?a các thành ph?n ho?t đ?ng thư m?c d?ch v? giao di?n (ADSI) đ? xác đ?nh các thành viên nhóm chính c?a ngư?i dùng.

THÔNG TIN THÊM

Làm th? nào các nhóm chính đư?c lưu tr? trên m?t đ?i tư?ng ngư?i dùng Active Directory

M?i đ?i tư?ng b?i c?nh an ninh (ví d? như ngư?i dùng và các nhóm b?o m?t) trong Active Directory có m?t đ?nh danh (SID) b?o m?t thu?c tính liên k?t v?i nó. SID có m?t s? thành ph?n, như đư?c di?n t? trong tài li?u "SID thành ph?n" bao g?m trong ph?n "Tham kh?o" c?a bài vi?t này. Hai trong s? các thành ph?n vào SID là tên mi?n tương đ?i m? đ?nh danh (RID) và c? th? RID đ?i tư?ng trong tên mi?n.

Các nhóm chính c?a ngư?i dùng đư?c lưu tr? (như nhóm c?a thoát trong vùng c?a ngư?i dùng) trên các PrimaryGroupID thu?c tính c?a m?t đ?i tư?ng ngư?i dùng. Nhóm chính c?a ngư?i dùng ch? có th? là m?t nhóm mà t?n t?i trong cùng m?t tên mi?n như là ngư?i dùng, và nhóm này đ? là m?t nhóm ngư?i dùng là thành viên c?a. Ngoài ra, đi?u này Nhóm đ?i tư?ng Active Directory có m?t thu?c tính đư?c g?i là PrimaryGroupToken, mà các c?a hàng RID cho nhóm này trong tên mi?n.

Windows NT và Lightweight Directory Access Protocol (LDAP) mà nhà cung c?p cho phép l?p tr?nh đ? thay đ?i nhóm chính c?a ngư?i dùng b?ng cách thi?t l?p các PrimaryGroupID giá tr? thu?c tính đ? RID m?t nhóm ngư?i dùng là thành viên c?a. N?u ngư?i dùng không ph?i là thành viên c?a m?t nhóm, ngư?i s? d?ng PrimaryGroupID không th? đ?t đ? RID c?a nhóm.

Khi nó s? d?ng các nhà cung c?p Windows NT trong ADSI, các nhóm chính là bao g?m như là m?t m?c nh?p c?a ngư?i dùng IADsUser::Groups b? sưu t?p.

V?i nhà cung c?p LDAP, nhóm chính là không bao g?m như là m?t m?c nh?p trong các IADsUser::Groups b? sưu t?p, c?ng không ph?i là m?t ph?n c?a nhóm tên phân bi?t (DN) c?a các MemberOf thu?c tính c?a đ?i tư?ng ngư?i dùng trong thư m?c. Nhóm c?a thoát trong các PrimaryGroupID là nơi duy nh?t mà trong đó các nhóm chính cho m?t ngư?i s? d?ng đư?c tham chi?u trên đ?i tư?ng ngư?i dùng LDAP.

Nhà cung c?p không ph?i đ?nh ngh?a m?t cơ ch? đ? xác đ?nh tên c?a nhóm chính cho m?t ngư?i s? d?ng tr?c ti?p t? các đ?i tư?ng ngư?i dùng tương ?ng c?a h?. V?n đ? làm ph?c t?p hơn b?i th?c t? r?ng t?ng nhóm đ?i tư?ng đư?c cung c?p b?i nhà cung c?p m?i h? tr? m?t t?p khác nhau c?a thu?c tính, như sau:
  • Windows NT cung c?p nhóm đ?i tư?ng không h? tr? các PrimaryGroupToken thu?c tính, và c?ng không hi?n Windows NT nhà cung c?p h? tr? b?t k? cách nào khác đ? l?y các nhóm c?a thoát b?ng cách s? d?ng b?n đ?a ADSI m?.
  • Các PrimaryGroupToken thu?c tính c?a m?t đ?i tư?ng nhóm LDAP mà nhà cung c?p là m?t thu?c tính đư?c tính. Thu?c tính này không có trên đ?i tư?ng nhóm trong thư m?c. Các thu?c tính đư?c, trên th?c t?, t?o ra khi nó đư?c yêu c?u c?a khách hàng v?i m?t IADs::GetInfoEx phương pháp g?i. Nó là không th? th?c hi?n t?m ki?m LDAP d?a trên thu?c tính xây d?ng trong Active Directory. V? v?y, b?n không th? t?m ki?m b?ng cách s? d?ng các nhà cung c?p LDAP cho m?t nhóm d?a trên các PrimaryGroupToken thu?c tính phù h?p v?i các PrimaryGroupID thu?c tính vào đ?i tư?ng ngư?i dùng mà nhóm chính b?n mu?n xác đ?nh. Đi?u này c?ng quy t?c ra m?t gi?i pháp ADSI tinh khi?t mà không ph?i là ph? thu?c vào m?t đ?i tư?ng COM bên ngoài đ? giúp b?n xác đ?nh các nhóm chính.

Cách đ? xác đ?nh các nhóm chính c?a ngư?i dùng

Sau đây là ba phương pháp đư?c bi?t đ?n đ? xác đ?nh tên c?a các nhóm chính c?a ngư?i dùng:
  • Xây d?ng m?t SID ràng bu?c dây cho đ?i tư?ng nhóm trong thư m?c ho?t đ?ng t? các thành ph?n tên mi?n thoát SID c?a ngư?i dùng và nhóm c?a thoát đư?c lưu tr? trên các PrimaryGroupID thu?c tính vào đ?i tư?ng ngư?i dùng.

    Đây là phương pháp đư?c di?n t? trong bài vi?t Microsoft KB Q297951 (bao g?m trong ph?n "Tham kh?o" c?a bài vi?t này). V?n đ? l?n v?i phương pháp này là đ? xây d?ng SID ràng bu?c dây, các l?p tr?nh viên ph?i d?a trên các ADsSID đ?i tư?ng đ? chuy?n đ?i mô t? b?o m?t nh? phân c?a đ?i tư?ng mi?n thành d?ng SDDL. Các ADsSID đ?i tư?ng đư?c t? ch?c b?i các t?p tin ADsSecurity.dll, mà ph?i đư?c sao chép vào và đăng k? trên các khách hàng trư?c khi m? có th? đư?c ch?y thành công.
  • S? d?ng m?t truy v?n LDAP đ? t?m ki?m t?t c? các nhóm trong m?t tên mi?n và l?i nhu?n c?a h? PrimaryGroupToken thu?c tính.

    Phương pháp này là m?t gi?i pháp LDAP tinh khi?t. Tuy nhiên, gi?i pháp script là không r?t hi?u qu?, v? này t?m ki?m tr? v? m?i nhóm trong ph?m vi, ngay c? nh?ng ngư?i s? d?ng không ph?i là m?t thành viên c?a; và b?i v? các PrimaryGroupToken thu?c tính đư?c xây d?ng trên máy khách khi thi?t l?p k? l?c ngang, t?m ki?m này là hơi ch?m. Phương pháp này có th? đ?c bi?t là th?i gian n?u có m?t s? l?n các nhóm trong tên mi?n. Ví d? v? làm th? nào đ? t?o ra phương ng? LDAP ADO truy v?n r?t nhi?u, và v? th?, h? không đư?c bao g?m trong bài vi?t này.
  • H?y t?n d?ng các tính năng c?a m?i nhà cung c?p đ? xây d?ng m?t gi?i pháp lai.

    Gi?i pháp này t?n d?ng các tính năng c?a các nhà cung c?p khác nhau đ? xác đ?nh các nhóm chính c?a ngư?i dùng. Để thực hiện việc này, hãy làm theo những bước sau:
    1. Ràng bu?c đ?i tư?ng ngư?i s? d?ng v?i các nhà cung c?p Windows NT.

      Đ?i tư?ng ngư?i dùng Windows NT cung c?p m?t b? sưu t?p nhóm đó b?o đ?m đ? ch?a nhóm chính c?a ngư?i dùng. Ngoài ra, các PrimaryGroupID c?a ngư?i s? d?ng đ?i tư?ng đư?c lưu tr? đi trong m?t v? trí t?m th?i đ? s? d?ng sau này trong thu?t toán này.
    2. Li?t kê các IADsUser::Groups b? sưu t?p.
    3. Gi?i nén các SamAccountName b?t đ?ng s?n t? ADsPath cho m?i nhóm trong b? sưu t?p, và sau đó xây d?ng m?t phương ng? LDAP chu?i truy v?n t?m ki?m cho t?t c? các nhóm v?i các SamAccountName b?t đ?ng s?n đư?c li?t kê trong b? sưu t?p, tr? v? c?a h? PrimaryGroupTokenDistinguishedName giá tr? thu?c tính.
    4. Ch?y t?m ki?m ADO ADSI, và sau đó l?p qua vi?c thi?t l?p k? l?c, so sánh m?i nhóm PrimaryGroupToken v?i các PrimaryGroupID giá tr? thu?c tính lưu tr? trư?c đó.
    5. N?u b?n t?m th?y m?t tr?n đ?u, d?ng và hi?n th? tên phân bi?t đ?i v?i nhóm này là nhóm ch? y?u cho ngư?i dùng này.
    6. N?u b?n không t?m th?y m?t tr?n đ?u, ti?p t?c vi?c l?p qua k?t qu? t?m ki?m.
    Nh?ng l?i th? c?a phương pháp này là hi?n nhiên ngay l?p t?c. T?t c? các đ?i tư?ng đư?c s? d?ng có ngu?n g?c t? ADSI và không yêu c?u các thành ph?n b? sung. Ngoài ra, đ?m bao g?m ch? các nhóm có th? là nhóm chính.

    Tuy nhiên, lưu ? nh?ng b?t l?i sau: khi các IADsUser::Groups b? sưu t?p đư?c li?t kê, các đ?i tư?ng quay tr? l?i là m?t IADs giao di?n cho thành viên trong nhóm. N?u v? m?t s? l? do, ngư?i s? d?ng th?c hi?n đ?m không có các quy?n c?n thi?t đ? m? m?t đ?i tư?ng c? th?, li?t kê đi?m d?ng mà không ch? ra m?t l?i. Các m? sau đây minh ho? làm th? nào b?n có th? th?c hi?n các thu?t toán trư?c:
    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 & ")"
    next
    QueryFilter = 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, oRecordset
    Set oConnection = CreateObject("ADODB.Connection")
    Set oCommand = CreateObject("ADODB.Command")
    
    oConnection.Provider = "ADsDSOObject"
    oConnection.Open "Active Directory Provider"
    
    Set oCommand.ActiveConnection = oConnection
    oCommand.CommandText = QueryString
    oCommand.Properties("Page Size") = 900
    
    Set 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.moveNext
    Wend
    
    Set oRecordset = Nothing
    Set oCommand = Nothing
    Set 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
    					

THAM KH?O

Đ? bi?t thêm thông tin, h?y b?m vào s? bài vi?t sau đ? xem bài vi?t trong Cơ s? Ki?n th?c Microsoft:
297951Làm th? nào đ? s? d?ng các thu?c tính PrimaryGroupID đ? t?m các nhóm chính cho m?t ngư?i s? d?ng

Thu?c tính

ID c?a bài: 321360 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows 2000 Server
T? khóa: 
kbdswadsi2003swept kbinfo kbmt KB321360 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:321360

Cung cấp Phản hồi

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com