2010-07-13 11 views
5

का उपयोग कर एक सक्रिय निर्देशिका सुरक्षा समूह को उपयोगकर्ता जानकारी पुनर्प्राप्त करने के लिए कैसे करें जैसा कि आप नीचे देख सकते हैं मुझे सुरक्षा समूह में एलडीएपी खोज करते समय मुझे कोई उपयोगकर्ता जानकारी नहीं मिल रही है। मैं यह जांचने के लिए $_SERVER[remote_user] का उपयोग करना चाहता हूं कि उपयोगकर्ता इस समूह का सदस्य है या नहीं। मैं इस उपयोगकर्ता की जानकारी को पुनः प्राप्त करना चाहता हूं और इसके साथ SQL डेटाबेस अपडेट करना चाहता हूं। क्या यह संभव है?एलडीएपी और PHP

$dn = "CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local"; 
$filter = "(member=*)"; 

$ad = ldap_connect("IP") or die("Couldn't connect to AD!"); 
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3); 
$bd = ldap_bind($ad, "[email protected]", "password") or die("Can't bind to server."); 
$sr = ldap_search($ad,$dn,$filter); 
$entries = ldap_get_entries($ad, $sr); 

print_r($entries);

रिटर्न इस:

Array 
(
    [count] => 1 
    [0] => Array 
     (
      [objectclass] => Array 
       (
        [count] => 2 
        [0] => top 
        [1] => group 
       ) 

      [0] => objectclass 
      [cn] => Array 
       (
        [count] => 1 
        [0] => Intra 
       ) 

      [1] => cn 
      [description] => Array 
       (
        [count] => 1 
        [0] => Group for (LDAP) INTRANET server access 
       ) 

      [2] => description 
      [member] => Array 
       (
        [count] => 4 
        [0] => CN=Fname1 Lname1,OU=Mail enabled users,OU=Aberdeen,DC=mydomain,DC=local 
        [1] => CN=Fname2 Lname2,OU=Mail enabled users,OU=Forres,DC=mydomain,DC=local 
        [2] => CN=Fname3 Lname3,OU=Houston,DC=mydomain,DC=local 
        [3] => CN=Fname4 Lname4,OU=Mail enabled users,OU=Bergen,DC=mydomain,DC=local 
       ) 

      [3] => member 
      [distinguishedname] => Array 
       (
        [count] => 1 
        [0] => CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local 
       ) 

      [4] => distinguishedname 
      [instancetype] => Array 
       (
        [count] => 1 
        [0] => 4 
       ) 

      [5] => instancetype 
      [whencreated] => Array 
       (
        [count] => 1 
        [0] => 20100711172407.0Z 
       ) 

      [6] => whencreated 
      [whenchanged] => Array 
       (
        [count] => 1 
        [0] => 20100712063949.0Z 
       ) 

      [7] => whenchanged 
      [usncreated] => Array 
       (
        [count] => 1 
        [0] => 17491499 
       ) 

      [8] => usncreated 
      [usnchanged] => Array 
       (
        [count] => 1 
        [0] => 17498823 
       ) 

      [9] => usnchanged 
      [name] => Array 
       (
        [count] => 1 
        [0] => Intra 
       ) 

      [10] => name 
      [objectguid] => Array 
       (
        [count] => 1 
        [0] => 
       ) 

      [11] => objectguid 
      [objectsid] => Array 
       (
        [count] => 1 
        [0] => 
       ) 

      [12] => objectsid 
      [samaccountname] => Array 
       (
        [count] => 1 
        [0] => Intra 
       ) 

      [13] => samaccountname 
      [samaccounttype] => Array 
       (
        [count] => 1 
        [0] => 268435456 
       ) 

      [14] => samaccounttype 
      [grouptype] => Array 
       (
        [count] => 1 
        [0] => -2147483646 
       ) 

      [15] => grouptype 
      [objectcategory] => Array 
       (
        [count] => 1 
        [0] => CN=Group,CN=Schema,CN=Configuration,DC=mydomain,DC=local 
       ) 

      [16] => objectcategory 
      [count] => 17 
      [dn] => CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local 
     ) 

) 

सब कुछ ठीक काम किया जब मैं सामान्य डीएन प्रयोग किया है:

$dn = "OU=Mail enabled users,OU=Bergen,DC=mydomain,DC=local"; 

लेकिन एक ई विशेषज्ञ ने मुझे बताया यह एक बड़ा नहीं था -नो और मुझे इसके बजाय सुरक्षा समूह का उपयोग करना चाहिए: \

उत्तर

3

क्वेरी इस तरह विज्ञापन:

$dn  = "DC=mydomain,DC=local"; 
$group_DN = "CN=Intra,OU=Common Security Groups,DC=mydomain,DC=local"; 
$filter = "(&(objectCategory=user)(memberOf=$group_DN))"; 
// ... 
$sr  = ldap_search($ad, $dn, $filter); 

अधिक जटिल फिल्टर पर जानकारी के लिए MSDN article about the LDAP search filter syntax पर एक नज़र डालें।

उस पृष्ठ पर विशेष वर्ण अनुभाग पर ध्यान देना सुनिश्चित करें। फ़िल्टर स्ट्रिंग में इसका उपयोग करने से पहले एक सही समाधान $group_DN को बचने के तंत्र से गुजरना होगा!

हमेशा फ़िल्टर को यथासंभव विशिष्ट बनाने का प्रयास करें। एलडीएपी सर्वर को उन रिकॉर्ड्स को सॉर्ट करने के लिए और अधिक कुशल है जो आप चाहते हैं कि तारों पर स्थानांतरित किए गए अधिक रिकॉर्ड्स की बजाय आपको क्लाइंट पर आधे से अधिक स्थानांतरित करने की आवश्यकता न हो।

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद! लेकिन जब मैं आपके फ़िल्टर का उपयोग करने की कोशिश करता हूं तो मुझे यह त्रुटि मिलती है: PHP चेतावनी: ldap_search() [function.ldap-search]: खोज: सी में ऑपरेशंस त्रुटि: \ inetpub \ wwwroot \ test \ test.php लाइन 33 पर PHP चेतावनी: ldap_get_entries(): आपूर्ति किया गया तर्क लाइन 35 – horgen

+0

पर C: \ inetpub \ wwwroot \ test \ test.php में वैध ldap परिणाम संसाधन नहीं है क्योंकि मुझे लगता है कि आप Windows पर हैं, यहां एक युक्ति है। Softerra LDAP ब्राउज़र 2.6 डाउनलोड करें (यह मुफ़्त है), इसे अपने एडी से कनेक्ट करें और टूल के साथ अपनी खोजों का परीक्षण करें। - सिद्धांत रूप में, डीसी = mydomain, डीसी = स्थानीय "के आधार डीएन, हालांकि काम करना चाहिए। – Tomalak

+0

धन्यवाद। अब मुझे नहीं पता कि क्या चल रहा है। मैंने डीएन की खोज की: "डीसी = मायडोमेन, डीसी = स्थानीय" फ़िल्टर: "(& (objectCategory = उपयोगकर्ता) (सदस्य ओएफ = सीएन = इंट्रा, ओयू = सामान्य सुरक्षा समूह, डीसी = mydomain, डीसी = स्थानीय))" में बिना किसी समस्या के एलडीएपी ब्राउज़र। लेकिन जब मैं PHP में एक ही चीज़ करने की कोशिश करता हूं तो मुझे यह त्रुटि मिलती है: "PHP चेतावनी: ldap_search() [function.ldap-search]: खोज: सी में ऑपरेशंस त्रुटि: \ inetpub \ wwwroot \ test \ test.php लाइन पर 17 ":(अगर मैं" ओयू = बर्गन, डीसी = मायडोमेन, डीसी = स्थानीय "का उपयोग करता हूं तो मुझे कोई त्रुटि नहीं मिलती है। लेकिन फिर मुझे प्रत्येक ओयू के लिए लूप बनाना होगा। – horgen

0

Tomalak

मुझे लगता है कि समस्या यह है कि नहीं सुरक्षा समूह में सभी उपयोगकर्ताओं को एक ही OU से आता है।

अगर मैं

$dn  = "DC=mydomain,DC=local"; 

$dn  = "OU=Bergen,DC=mydomain,DC=local"; 

करने के लिए फिल्टर काम करता है बदल जाते हैं। लेकिन मेरे पास उपयोगकर्ताओं के साथ 2 और ओयू भी है।

+0

प्रश्न के वास्तविक उत्तरों के लिए कृपया" उत्तर "अनुभाग का उपयोग करें (हाँ, आप अपने प्रश्नों का उत्तर दे सकते हैं)। केवल टिप्पणियों के लिए, कृपया टिप्पणी सुविधा का उपयोग करें। – Tomalak

संबंधित मुद्दे