This shows you the differences between two versions of the page.
saisp:labs:01:contents:03 [2014/02/02 18:07] razvan.deaconescu [03. [15p] 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 48: | Line 48: | ||
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. | 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 | + | 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 === | === Filtrare după atribute === | ||
- | TODO | + | Î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ș, și 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))' | ||
- | === Exercițiu de căutare === | + | 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))' |
- | TODO | + | 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> |