Differences

This shows you the differences between two versions of the page.

Link to this comparison view

saisp:labs:01:contents:03 [2014/01/24 18:56]
razvan.deaconescu [03. Căutare în baza de date LDAP]
saisp:labs:01:contents:03 [2014/02/18 11:43] (current)
razvan.deaconescu [03. [15p] Căutare în baza de date LDAP]
Line 1: Line 1:
 ==== 03. [15p] Căutare în baza de date LDAP ==== ==== 03. [15p] Căutare în baza de date LDAP ====
  
-  * (tutorialCăutare după anumiți parametri +Output-ul comenzii de interogare LDAP a serverului ''​swarm.cs.pub.ro''​ este consistent. De multe ori dorim să căutăm în baza de date LDAP și să extragem doar anumite intrări similar comenzii ''​select''​ din SQL. 
-  Căutare în continuare după anumiți parametri+ 
 +=== Informații din subarbori === 
 + 
 +Un prim mod de căutare este selectarea doar a intrării căutate ​(fără subarboresau doar a primului nivel din arbore, ca mai jos:<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -s base -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ 
 +dn: dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +objectClass:​ top 
 +objectClass:​ dcObject 
 +objectClass:​ organization 
 +o: University Politehnica of Bucharest 
 +dc: swarm 
 + 
 + 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -s one -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ 
 +dn: cn=admin,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +objectClass:​ simpleSecurityObject 
 +objectClass:​ organizationalRole 
 +cn: admin 
 +description:​ LDAP administrator 
 + 
 +dn: ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +ou: People 
 +objectClass:​ organizationalUnit 
 + 
 +dn: ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +ou: Group 
 +objectClass:​ organizationalUnit 
 +</​code>​ 
 + 
 +Prima comandă extrage doar intrarea de bază, identificată de //domain name//-ul (DN) ''​dc=swarm,​dc=cs,​dc=pub,​dc=ro''​. A doua extrage primul nivel din arborele/​directorul LDAP, adică intrarile indentificate de DN-urile ''​cn=admin,​dc=swarm,​dc=cs,​dc=pub,​dc=ro'',​ ''​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro'',​ ''​ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro''​. 
 + 
 +Un mod uzual de căutare ​este doar într-un subarbore al directorului LDAP. Astfel, dacă dorim să extragem doar intrările din grupuri, vom folosi comanda:<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ 
 +dn: ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +ou: Group 
 +objectClass:​ organizationalUnit 
 + 
 +dn: cn=rosedu,​ou=Group,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +cn: rosedu 
 +[...] 
 +</​code>​ 
 + 
 +=== Extragere de atribute === 
 + 
 +Așa cum comanda ''​select''​ din SQL extrage doar anumite coloane dintr-un tabel, putem selecta, folosind comanda ''​ldapsearch''​ anumite atribute ale intrărilor în baza de date LDAP. 
 + 
 +Spre exemplu, dacă vrem să afișăm doar uid-ul utilizatorilor din baza de date LDAP, vom folosi comanda<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ uid 
 +[...] 
 +dn: uid=ddvlad,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: ddvlad 
 + 
 +dn: uid=roxanam,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: roxanam 
 + 
 +dn: uid=razvan,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: razvan 
 +</​code>​ 
 + 
 +Folosirea atributului ''​uid''​ la sfârșitul comenzii de mai sus înseamnă selectarea doar a acelui câmp. 
 + 
 +<​note>​ 
 +Câmpul ''​dn''​ va fi întotdeauna selectat pentru că indică în mod unic intrarea în LDAP. 
 +</​note>​ 
 + 
 +Dacă dorim să selectăm uid-ul, adresa de e-mail și numele vom folosi comanda<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ uid mail cn 
 +[...] 
 +dn: uid=ddvlad,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: ddvlad 
 +cn: Vlad Dogaru 
 +mail: XXXXXXX 
 + 
 +dn: uid=roxanam,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: roxanam 
 +cn: Roxana Murarus 
 +mail: XXXXXXX 
 + 
 +dn: uid=razvan,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: razvan 
 +cn: Razvan Deaconescu 
 +mail: XXXXXXX 
 +</​code>​ 
 + 
 +Altfel spus, pentru a selecta mai multe atribute le transmitem ca argument comenzii ''​ldapsearch''​. 
 + 
 +=== Filtrare ​după atribute === 
 + 
 +În SQL, clauza ''​where''​ permite selectarea doar anumitor intrări. La fel permite și comanda ''​ldapsearch''​ folosirea de filtre de căutare. 
 + 
 +Astfel, pentru a selecta intrările de utilizator al căror prenume este ''​Silviu''​ vom folosi comanda<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ givenName=Silviu 
 +dn: uid=silviu,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: silviu 
 +cn: Silviu Grijincu 
 +[...] 
 +</​code>​ 
 + 
 +Dacă vrem să aflăm informații despre contul aferent lui Mihai Carabaș, șnu știm uid-ul său, vom folosi comanda<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ cn="​Mihai Carabas"​ 
 +dn: uid=mihaic,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: mihaic 
 +sn: Carabas 
 +[...] 
 +</​code>​ 
 + 
 +Dacă știam uid-ul căutam direct după uid:<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ uid=mihaic 
 +dn: uid=mihaic,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: mihaic 
 +sn: Carabas 
 +[...] 
 +</​code>​ 
 + 
 +Filtrele de căutare (//search filters//) sunt expresii care fac match pe anumite atribute din intrările LDAP și le afișează doar pe acelea. Filtrele pot conține și //​glob//​-uri pentru a permite match pe mai multe valori ale atributelor. Astfel, pentru a selecta toate persoanele al căror nume de familie începe cu șirul ''​An''​ folosim expresia:<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ sn="An*
 +dn: uid=aandrei,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +uid: aandrei 
 +cn: Alexandru Andrei 
 +sn: Andrei 
 +[...] 
 +</​code>​ 
 +Atributul ''​sn''​ înseamnă numele de familie (//​surname//​) iar //glob//-ul ''​An*''​ însemnă șirurile care încep cu ''​An''​. 
 + 
 +La fel cum comanda ''​select''​ este combinată cu ''​where'',​ vom putea selecta doar anumite atribute ale unor intrări. Dacă dorim să afișăm dar cn-ul și e-mail-ul rezultatelor comenzii de mai sus, vom folosi comanda<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ sn="​An*"​ cn mail 
 +dn: uid=aandrei,​ou=People,​dc=swarm,​dc=cs,​dc=pub,​dc=ro 
 +cn: Alexandru Andrei 
 +mail: XXXXXXX 
 +[...] 
 +</​code>​ 
 +În cazul acesta, după comanda de căutare ​am precizat filtrul de căutare (''​sn="​An*"''​) și apoi atributele care vor fi selectate (''​cn mail''​). 
 + 
 +=== Exerciții de căutare === 
 + 
 +Realizați următoarele căutări ​în baza de date LDAP de pe ''​swarm.cs.pub.ro'':​ 
 +  - Extrageți utilizatorii al căror nume de familie este ''​Popescu''​. 
 +  - Extrageți uid-ul și cn-ul utilizatorilor a căror adresă de e-mail conține șirul ''​@cti.pub.ro''​. 
 +  - Extrageți utilizatorii al căror nume de familie nu se termină în ''​escu''​. 
 +  - Extrageți utilizatorii al căror prenume este ''​Vlad''​ **sau** ''​Andrei''​. 
 +  - Extrageți uid-ul, e-mail-ul și numele de familie al utilizatorilor al căror prenume este ''​Vlad''​ sau ''​Andrei''​. 
 + 
 +<note important>​ 
 +Detalii legate de folosirea filtrelor de căutare găsiți la pagina http://​www.centos.org/​docs/​5/​html/​CDS/​ag/​8.0/​Finding_Directory_Entries-LDAP_Search_Filters.html. 
 + 
 +Este recomandat să puneți expresiile de filtrare între apostroafe sau ghilimele ca să preveniți interpretarea caracterelor speciale de shell. 
 +</​note>​ 
 + 
 +<​solution -hidden>​ 
 +Comenzile care realizează căutările cerute mai sus sunt:<​code bash> 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ sn="​Popescu"​ 
 + 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ mail="​*@cti.pub.ro*"​ 
 + 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ '​(!(sn=*escu))'​ 
 + 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ '​(|(givenName=Vlad)(givenName=Andrei))'​ 
 + 
 +root@ldap-client:​~#​ ldapsearch -x -LLL -H ldaps://​swarm.cs.pub.ro -b "​dc=swarm,​dc=cs,​dc=pub,​dc=ro"​ '​(|(givenName=Vlad)(givenName=Andrei))'​ uid mail sn 
 +</​code>​ 
 +</​solution>​
saisp/labs/01/contents/03.1390582589.txt.gz · Last modified: 2014/01/24 18:56 by razvan.deaconescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0