PHP la fonction ldap_search taille limite dépassée
Je suis assez nouveau à l'interrogation Active Directory de Microsoft et fait face à certaines difficultés:
L'ANNONCE a une limite de taille de 1000 éléments par demande. Je ne peux pas changer la taille limite. PHP ne semble pas à l'appui de la pagination (j'utilise la version 5.2 et il n'y a aucun moyen de mettre à jour le serveur de production.)
J'ai rencontrés jusqu'à présent deux solutions possibles:
- Trier les entrées par objectSid et utiliser des filtres pour obtenir tous les objets. Exemple De Code
Je n'aime pas pour plusieurs raisons:- Il semble imprévisible au mess avec le objectSid, comme vous venez de le démonter, de le convertir en décimal, de la convertir ...
- Je ne vois pas comment vous pouvez comparer ces id.
(J'ai essayé: "&((objectClass=user)(objectSid>=0))')
- Filtre après les premières lettres des noms d'objet (comme l'a suggéré ici):
Ce n'est pas une solution optimale comme la plupart des utilisateurs/groupes dans notre système sont préfixés avec même quelques lettres.
Donc ma question:
Ce que la meilleure approche utilisée ici?
Si c'est le premier qui, comment puis-je être sûr à gérer la objectSid correctement?
D'autres possibilités?
Ai-je raté quelque chose d'évident?
Mise à jour:
- Cette liés à la question fournit des informations au sujet de pourquoi le Simple Paginé Résultats de l'extension ne fonctionne pas.
- Le serveur web est en cours d'exécution sur un serveur Linux, de sorte que les objets COM/adoDB ne sont pas une option.
OriginalL'auteur Envyrus | 2011-12-26
Vous devez vous connecter pour publier un commentaire.
Jamais de faire des hypothèses sur les serveurs ou la configuration du serveur, ce qui conduit à une fragilité code et inattendu, parfois spectaculaires échecs. Juste parce que c'est l'ANNONCE d'aujourd'hui ne signifie pas que ce sera demain, ou que Microsoft ne changera pas la limite par défaut dans le serveur. J'ai récemment traité avec une situation où le client le code a été écrit avec les connaissances tribales que la limite de taille est de 2000, et lorsque les administrateurs, pour des raisons qui leur sont propres, changé la taille limite, le client code échec horrible.
Êtes-vous sûr que PHP n'a pas l'appui de la demande de contrôle (le simple résultat paginé extension est une demande de contrôle)? J'ai écrit un article sur "LDAP: Simple Paginé Résultats", et si l'article un exemple de code Java, les concepts sont importants, pas la langue. Voir aussi "LDAP: Pratiques de Programmation".
Vos liens sont partis.
OriginalL'auteur Terry Gardner
Comme je n'en ai pas trouvé des solutions propres, j'ai décidé d'aller avec la première approche: le Filtrage Par l'Objet-les Peid.
Cette solution a ses limites:
L'idée est-elle d'abord à lire tous les objets possibles et choisir celui avec la plus petite par rapport à SID. La relative SID est le dernier morceau dans le SID:
S-1-5-21-3188256696-111411151-3922474875-1158
Imaginons que c'est le plus bas par rapport SID dans une recherche qui n'a retourné "Partielle les Résultats de la Recherche'.
Nous allons en outre assumer la taille limite est de 1000.
Ensuite, le programme effectue les opérations suivantes:
Il recherche tous les Objets avec le Sid entre
S-1-5-21-3188256696-111411151-3922474875-1158
S-1-5-21-3188256696-111411151-3922474875-0159
puis tous entre
S-1-5-21-3188256696-111411151-3922474875-1158
S-1-5-21-3188256696-111411151-3922474875-2157
et ainsi de suite jusqu'à ce que la recherche renvoie zéro des objets.
Il y a plusieurs problèmes avec cette approche, mais c'est suffisant pour mes besoins.
Le Code:
$AdConn->méthode de recherche ressemble à ceci:
OriginalL'auteur Envyrus
Le script précédent erreur peut se produire lorsque la distance entre le plus proche de chez Sid 999 plus.
Exemple:
S-1-5-21-3188256696-111411151-3922474875-1158
S-1-5-21-3188256696-111411151-3922474875-3359
3359-1158 > 999
afin d'éviter cela, vous devez utiliser des structures rigides
Exemple:
Dans cet exemple, nous sommes obligés de vérifier 999 * 30 * 2 = 59940 valeurs.
OriginalL'auteur Андрей Иванов
J'ai été en mesure de contourner la limitation de la taille à l'aide de ldap_control_paged_result
ldap_control_paged_result est utilisé pour Activer LDAP pagination par l'envoi de la pagination de contrôle. Ci-dessous la fonction a parfaitement fonctionné dans mon cas. Ce serait le travail (PHP 5 >= 5.4.0, PHP 7)
Si vous avez mis à jour votre serveur en maintenant, alors la fonction ci-dessus peuvent obtenir toutes les entrées. Je suis à l'aide de cette fonction pour obtenir tous les utilisateurs de notre ANNONCE.
OriginalL'auteur Fokwa Best