Adatbázisok MSc szint 4.. témak t makör Hierarchikus adatmodell és az LDAP Dr. Kovács László ME 2009 Adatbázis adatmodellek típusai A piaci DBMS rendszerek adatmodellje - gépközeli - teljes (műveleti, struktúra, integritási rész) - egzakt - igazodik a fizikai megvalósítási lehetőségekhez SPARQL ER EER ODMG UML XQuery 1960 1970 1980 1990 2000 idő HDM NDM RDM ORDM MDDM XML-DB LDB OWL 1
Adatmodell alapfogalmak Adatmodell: matematikai formalizmus az adatok tárolására és kezelésére vonatkozólag Adatmodell komponensei: - struktúra leíró - művelet leíró - integritás leíró Séma: az adatrendszer szerkezetének a modellel történő leírása Előfordulás: a sémára illeszkedő konkrét, megvalósuló adatrendszer meta séma séma előfordulás nyelvi elemek szerkezet, típus érték, változó Hierarchikus adatmodell A hierarchikus adatmodell fő jellemzői: - hierarchikus kapcsolati viszonyok támogatása - hatékony kapcsolat tartás a hierarchia mentén - nehézkes adatkezelés a hierarchiára nem illeszkedő kapcsolatoknál - szalagos tárolási mechanizmushoz való illeszkedés - merev struktúra - rekord orientált műveleti rész - összetett algoritmusok szükségesek a lekérdezésekhez - egyszerű integritási elemek A hierarchikus adatmodell célja az egyszerű fizikai implementáció biztosítása 2
Hierarchikus adatmodell Az adatmodell elemei - MEZŐ - REKORD - PCR (VPCR) - HIERARCHIA - ADATBÁZIS rekord mezo dolgozó -projekt dolgozó - hierarchia Hierarchikus adatmodell Az adatmodell elemei - MEZŐ: elemi adat, egy érték a DBMS szemszögéből jellemzői: név, adattípus, kulcs-e pl.: név CHAR, kód INTEGER KEY - REKORD: egybetartozó mezők együttese jellemzői: név, szerkezet pl.: DOLGOZO (kod INT KEY, nev CHAR) - PCR (VPCR): 1:N kapcsolat két rekord között jellemzői: kapcsolt rekordok azonosítói pl.: UZEM : DOLGOZO - HIERARCHIA: kapcsolódó rekordok rendszere (fa struktúra) - ADATBÁZIS: a rendszerben tárolt hierarchiák együttese 3
Hierarchikus adatmodell ER modell konverziója hierarchikus modellre Elemi tulajdonság Mező Kulcs tulajdonság Kulcs mező Egyed Rekord Összetett tulajdonság Több mező (a részekből) Többértékű tulajdonság PCR + részletező rekord 1:1 kapcsolat PCR 1:N kapcsolat PCR N:M kapcsolat? A többértékű tulajdonságnál külön relációt hozunk létre az ismétlődő értékek tárolására, amely 1:N kapcsolatban áll a szülő rekorddal Az N:M kapcsolat nem illik bele a hierarchikus modell világába Hierarchikus adatmodell többértékű tulajdonság megvalósítása A T R S A S1 S2 R S1 S2 T Bizonyos információk (S szerepe) elvesznek a konverzióban 4
Hierarchikus adatmodell N:M kapcsolat megvalósítása A rekord B rekord A B B A Redundáns tárolási mód: mindkét rekord elemei duplán tárolódnak Redundancia hátránya: hely pazarlás + költségesebb módosítás + ellentmondás veszély Hierarchikus adatmodell Adatelemek fizikai tárolási mechanizmusa A rekordelőfordulások sorosan tárolódnak a hierarchiának megfelelően A fa linearizálásán (pl. egy left-down bejárás) alapszik A gyerek rekord a szülő után tárolódik A gyerek előfordulások a rekordtípus szerint rendezettek könyvtár KT1 KT2 könyv olvasó K1 K2 O1 O2 K3 O3 példány P1 P2 P3 P4 KT1 K1 P1 K2 P2 P3 O1 O2 KT2 K3 P4 O3 5
LDAP adatkezelő Lightweight Directory Access Protocol Az X.500 szabványon alapul (1992) Directory service (RFC1777) (nem DBMS) Hierarchikus adatmodell Egyszerű adatszerkezet Olvasás centrikus Nincs tranzakció kezelés Kliens szerver struktúra Elosztott katalógus kezelés Szabványos védelmi mechanizmus LDAP adatkezelő LDAP keretrendszer struktúrája virtuális directory kliens LDAP API LDAP Szerver A v séma ACL fizikai directory fizikai directory DBMS LDAP Szerver B LDAP Szerver C A DBMS fölé épít ki egy API réteget 6
LDAP adatkezelő Replikációs struktúra Célja: rendelkezésre állás növelése lekérdezési hatékonyság növelése adatvesztés elleni védelem LDAP szerver processz Replikációs Szerver processz LDAP adatkezelő LDAP protokoll A kapcsolat üzenetváltás alapú Minden üzenetnek egyedi azonosítója van Egy üzenet egy elemre vonatkozik, ezért egy kéréshez több válaszüzenet tartozhat A kliens párhuzamosan több üzenetet küldhet kliens LDAP Szerver A Üzenet API típusai: DCL: connect, bind, unbind, abandon DML: add, delete, modify DQL: search, compare 7
LDAP adatkezelő Séma elemei Virtuális gyökér Elem (entry) Azonosító (DN) Osztály-típus Attributumok Nincs megkötés a hierarchiára Rugalmas fa felépítés DN: mutatja az elérési útvonalat (figyelem: a gyökérelem a lista végén) dn: dc=iit,dc=uni-miskolc,dc=hu dn: o=ab,dc=iit,dc=uni-miskolc,dc=hu LDAP adatkezelő Elemek megadása LDIF : elemek szöveges leíró formátuma dn: uid=bjensen, ou=people, dc=example, dc=com objectclass: top objectclass: person cn: Barbara Jensen givenname: Barbara sn: Jensen uid: bjensen mail: bjensen@example.com description: Manager, Switching Products Division Lefoglalt nevek: o: szervezet; ou:szervezeti egység; c: ország; l: hely; cn: megnevezés 8
LDAP adatkezelő Attributumtípus specifikáció: - OID - név - alaptípus - egyértékű vagy többértékű - érték megkötés (intervallum) attributetype ( 2.5.4.6 NAME ( 'c' 'countryname' ) DESC 'RFC2256: ISO-3166 country 2-letter code' SUP name SINGLE-VALUE ) attributetype ( 2.5.4.16 NAME 'postaladdress' DESC 'RFC2256: postal address' EQUALITY caseignorelistmatch SUBSTR caseignorelistsubstringsmatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.41 ) LDAP adatkezelő Osztály specifikáció: - név - OID - alaptípus (öröklés) - jelleg (strukturális, absztrakt,..) - kötelező attributumok listája - opcionális attributumok listája objectclass ( 2.5.6.2 NAME 'country' DESC 'RFC2256: a country' SUP top STRUCTURAL MUST c MAY ( searchguide $ description ) ) A TOP jelöli a gyökér, az általános alaposztályt 9
LDAP adatkezelő Séma összefoglalás Directory Information Base 1 N Entry Elem N 1 N 1 N Attribute Value Tulajdonság 1 N érték N M ObjectClass osztály 1 N N M 1 AttributeType tulajdonság domain LDAP adatkezelő Hozzáférés ellenőrzés Az LDAP rendszer egyik fontos feladata az adatok hozzáférés védelmének biztosítása: - távoli elérések - heterogén adatok együttese Védelmi modell az ACL elven alapszik műveletek felhasználók ACL objektumok egyed, mező Szabályok megadása: konfigurációs állomány LDAP adatbázis 10
LDAP adatkezelő Hozzáférés ellenőrzés A konfigurációs bejegyzés alakja: TO objektum BY felhasználó művelet A megadott műveletet engedélyezi a megadott objektumra a megadott felhasználó számára Objektum megadása: * dn.base=dn dn.one=dn dn.subtree=dn d.regex = DN filter=kif attrs=tul.lista Felhasználó megadása: * self anonymous users dn.regex = DN Művelet megadása: none auth search read write LDAP adatkezelő Hozzáférés ellenőrzés Minta LDAP fa: 0: o=suffix 1: cn=manager,o=suffix 2: ou=people,o=suffix 3: uid=kdz,ou=people,o=suffix 4: cn=addresses,uid=kdz,ou=people,o=suffix 5: uid=hyc,ou=people,o=suffix Objektum kijelölés: dn.base="ou=people,o=suffix" 2 dn.one="ou=people,o=suffix" 3,5 dn.subtree="ou=people,o=suffix" 2,3,4,5 base: aktuális csomópont, elem one: egy szinttel alatta lévő elemek subtree: kiinduló részfa 11
LDAP adatkezelő Hozzáférés ellenőrzés to dn.one="ou=people,o=suffix" filter=(objectclass=person) to * by self write by anonymous auth by * read to dn.subtree="dc=example,dc=com" attr=homephone by self write by dn.children=dc=example,dc=com" search Konfigurációs bejegyzés: access to dn.base="" by * read access to dn.base="cn=subschema" by * read access to * by self write by users read by anonymous auth LDAP adatkezelő Hozzáférés ellenőrzés Felhasználók megadása Rendszergazda: minden tevékenységet végezhet Konfigurációs állományban: rootdn DN rootpw PWD Normál felhasználó: Az LDAP fa elemeihez társul, az elemnek van userpassword mezője A felhasználók leírása tehát az adatbázisban történik. A felhasználó azonosító neve a kapcsolt elem DN értéke. 12
LDAP adatkezelő Hozzáférés ellenőrzés minta dc=iit 1. connect / anonymous csak a gyökeret látja sn=kol o=ab sn=kol userpassword 2. connect / bind:kol mindent lát, kivéve a jelszót azt csak az sn=kol-ban csak az sn=kol alatt módosíthat, hozhat létre új elemet Bejelentkezés: dn: sn=kol,o=ab,dc=iit pwd: KOL LDAP adatkezelő Hozzáférés ellenőrzés OpenLDAP-ban Az ellenőrzésnél fontos a szabályok pozíciója A LDAP szerver az első illeszkedő szabályt használja fel access to dn.one="o=ab,dc=iit" attrs=userpassword by self write by anonymous auth by dn.base="dc=iit" write by * none access to dn.subtree="sn=kol,o=ab,dc=iit" by dn.base="sn=kol,o=ab,dc=iit" write access to dn.subtree="sn=brj,o=ab,dc=iit" by dn.base="sn=brj,o=ab,dc=iit" write access to * by self write by users read by anonymous auth 13
LDAP adatkezelő LDAP elem felvitel: add(dn,attvallist) DN: elem DN Attvallist: attributum értékek listája LDAP elem keresés: search(base-dn,scope, attlist, filter, limits) base-dn: a keresési fa gyökere scope: keresési szint (base, onelevel, sub) attlist: lekérdezett attributumok listája filter: keresési paraméter limits: idő és méret korlátozás Speciális szűrők: =, ~=,!, &, sn=smith* cn~=smit (&(mail=*)(!(telephonenumber=*))) OpenLDAP parancsfile: LDAP adatkezelő ldapadd h ldap.example.com D "cn=directory manager" w secret -f updates.ldif dn: o=abcs,dc=iit,dc=uni-miskolc,dc=hu objectclass: dcobject objectclass: organization o: abcs dc: iit ldapsearch -h ldap.example.com -s base -b "uid=bjensen,ou=people,dc=example,dc=com" "(objectclass=*)" 14
LDAP adatkezelő Készítse el az alábbi ER modellhez az LDAP adatmodellt db lakcim ar M N N 1 ugyfel konyv kiado adoszam nev isbn cim nev varos LDAP adatkezelő Adja meg az LDAP adatmodellhez az alábbi lekérdezésekhez tartozó műveleteket: 1. A teljes adathalmaz 2. Az x városbeli kiadók nevei 3. Az x nevű ügyfél rendelt könyveinek címei? 4. Ügyfélnevek a rendelt könyvek darabszámával együtt? 15
OpenLDAP adatkezelő Ingyenes LDAP szerver OpenLDAP: ldapadd ldapdelete ldapmodify ldapsearch ldapwhoami slapd slapdpasswd slapd.conf data schema doc LDAP szerver szolgáltatás OpenLDAP adatkezelő SLAPD.CONF konfigurációs állomány moduleload moduleload back_bdb.la back_ldap.la access to * by self write by users read by anonymous auth database bdb suffix "dc=iit,dc=uni-miskolc,dc=hu" rootdn "dc=iit,dc=uni-miskolc,dc=hu" rootpw secret directory./datakl index objectclass eq 16
OpenLDAP adatkezelő Új adatbázis létrehozása (slapd.conf): database suffix rootdn directory bdb "dc=iit" "dc=iit"./dataiit LDAP szolgáltatás indítása OS>net start OpenLDAP Directory Service Ellenőrző lekérdezés: OS>ldapsearch x b s base (objectclass=*) namingcontexts OpenLDAP adatkezelő Saját séma létrehozása Új LDIF formátumú séma állomány létrehozása (schema katalógus) Típusok: Name OID Description boolean 1.3.6.1.4.1.1466.115.121.1.7 boolean value directorystring 1.3.6.1.4.1.1466.115.121.1.15 Unicode string distinguishedname 1.3.6.1.4.1.1466.115.121.1.12 LDAP DN integer 1.3.6.1.4.1.1466.115.121.1.27 integer numericstring 1.3.6.1.4.1.1466.115.121.1.36 numeric string OID 1.3.6.1.4.1.1466.115.121.1.38 object identifier octetstring 1.3.6.1.4.1.1466.115.121.1.40 arbitary octets A séma bevonása (slapd.conf): include./schema/iit.schema 17
OpenLDAP adatkezelő attributetype ( 12.12.12.1 NAME 'nev' DESC 'azonosito nev' SUP name) attributetype ( 12.12.12.2 NAME 'varos' DESC 'varos neve' SUP name) attributetype ( 12.12.12.3 NAME 'adoszam' DESC 'adoszam' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27{128} ) attributetype ( 12.12.12.4 NAME 'isbn' DESC 'konyv isbn kod' EQUALITY caseignorematch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) attributetype ( 12.12.12.5 NAME 'cim' DESC 'konyvcim' EQUALITY caseignorematch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) attributetype ( 12.12.12.6 NAME 'ar' DESC 'konyv ara' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27{128} ) attributetype ( 12.12.12.7 NAME 'db' DESC 'darabszam' SYNTAX 1.3.6.1.4.1.1466.115.121.1.27{128} ) attributetype ( 12.12.12.8 NAME 'lakcim' DESC 'lakcim' EQUALITY caseignorematch SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{128} ) ## objectclass ( 12.12.13.1 NAME 'kiado' DESC 'kiado' SUP top STRUCTURAL MUST ( adoszam $ nev) MAY ( varos )) objectclass ( 12.12.13.2 NAME 'konyv' DESC 'konyv' SUP top STRUCTURAL MUST ( iksbn $ cim) MAY ( ar )) objectclass ( 12.12.13.3 NAME 'ugyfel' DESC 'vevo ugyfel' SUP top STRUCTURAL MUST ( nev $ lakcim $ db) 18
OpenLDAP adatkezelő Elemek, rekordok felvitele ldapadd x D dc=iit w secret f p1.lc dn: dc=iit objectclass: dcobject objectclass: organization dc: iit o: geial dn: dc=k1,dc=iit objectclass: kiado objectclass: dcobject dc: k1 adoszam: au nev: Kossuth varos: Budapest dn: dc=k2,dc=iit objectclass: kiado objectclass: dcobject dc: k2 adoszam: au2 nev: Elvira varos: Miskolc dn: dc=ko2,dc=k1,dc=iit objectclass: konyv objectclass: dcobject dc: ko2 isbn: ib12 cim: Viragok harca ar: 321 Elemek, rekordok felvitele OpenLDAP adatkezelő dn: dc=u1,dc=ko1,dc=k1,dc=iit objectclass: ugyfel objectclass: dcobject dc: u1 nev: Peter kodb: 675 lakcim: Eger 19
OpenLDAP adatkezelő Elemek, rekordok lekérdezése Teljes adatsor: ldapsearch -x b dc=iit (objectclass=*) Miskolci kiadok nevei: ldapsearch -x b dc=iit (varos=miskolc) nev OpenLDAP adatkezelő Mintafeladat (határidő:2009.03.03) 1. A 193.6.5.72 alatti LDAP szerverben, hozzon létre egy részfát 2 kiadó, 4 könyv, 6 ugyfel bejegyzéssel a kiado könyv ugyfel hierarchiaban. 2. Indulo nevek: BRJ, 2+1 betű (ez az induló jelszó is) mindenki változtassa meg a jelszavát 3. séma: objectclass ( 2.5.6.24 NAME 'kiado' DESC 'kiado' SUP top STRUCTURAL MUST ( adoszam $ nev) MAY ( varos )) objectclass ( 2.5.6.25 NAME 'konyv' DESC 'konyv' SUP top STRUCTURAL MUST ( isbn $ cim) MAY ( ar )) objectclass ( 2.5.6.26 NAME 'ugyfel' DESC 'vevo ugyfel' SUP top STRUCTURAL MUST ( nev $ lakcim $ kodb)) 20