Eseményvezérelt alkalmazások fejlesztése I 7. előadás. Adatbázis-kezelés elemi eszközökkel. Giachetta Roberto

Hasonló dokumentumok
Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés elemi eszközökkel. A MySQL adatbázis-kezelő

Elemi adatbázis kezelés

Adatbázis Rendszerek II. 1. SQL programozási felületek 39/1B IT MAN

Eseményvezérelt alkalmazások fejlesztése I 8. előadás. Adatbázis-kezelés modell/nézet architektúrában

Eseményvezérelt alkalmazások fejlesztése I 10. előadás. Adatbázis-kezelés modell/nézet architektúrában. Giachetta Roberto

Elemi alkalmazások fejlesztése IV.

MySql elindítása. Elemi alkalmazások fejlesztése IV. Feladat. Az alkalmazás adatbázisa

Java programozási nyelv 11. rész Adatbázis-programozás

Egyetemi könyvtári nyilvántartó rendszer

Egységes és objektumközpontú adatbázis-kezelés (2. rész)

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 4.ELŐADÁS. Adatbázis alapú alkalmazások készítése PHP-ben

JAVA PROGRAMOZÁS 8.ELŐADÁS

Adatbázisok elleni fenyegetések rendszerezése. Fleiner Rita BMF/NIK Robothadviselés 2009

Egyetemi könyvtári nyilvántartó rendszer

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

OO PDO. Tehát PDO használatával, könnyen átállhatunk egy másik adatbáziskezelőre, anélkül hogy a kódot teljes egészében újraírnánk.

Adatbázis-kezelés ODBC driverrel

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Elemi alkalmazások fejlesztése IV. Adatbáziskezelő alkalmazás készítése C++/Qt ben I.

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Adatbázisok webalkalmazásokban

Adatbáziskezelés M/V architektúrában

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Adatbázis rendszerek II. Adatbázis elérése C# kliens programból ADO.NET API-n keresztül

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

Webes alkalmazások fejlesztése 1. előadás. Webes alkalmazások és biztonságuk

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Excel ODBC-ADO API. Tevékenységpontok: - DBMS telepítés. - ODBC driver telepítése. - DSN létrehozatala. -Excel-ben ADO bevonása

Adatbázis rendszerek 7. előadás State of the art

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

Adatbáziskezelés php-ben MySQL adatbáziskezelı rendszert használva

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Adatbázis kezelés Delphiben. SQL lekérdezések

Adatbázis Rendszerek II. 8. Gyakorló környezet

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

LOGalyze Telepítési és Frissítési Dokumentáció Verzió 3.0

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Megtanuljuk, hogyan lehet egy web-alkalmazással adatbázishoz csatlakozni Pontosan megnézzük a PHP lehetőségeit o MySQL-hez o Oracle-höz

Elemi alkalmazások fejlesztése IV. Adatbáziskezel alkalmazás készítése QtDesignerben. Készítette: Szabóné Nacsa Rozália

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

Operációs rendszerek gyak.

A gyakorlat során MySQL adatbázis szerver és a böngészőben futó phpmyadmin használata javasolt. A gyakorlat során a következőket fogjuk gyakorolni:

PHP-MySQL. Adatbázisok gyakorlat

3. Beadandó feladat dokumentáció

MDAC - Microsoft Data Access Components

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Tartalomjegyzék 2. RENDSZER FELÉPÍTÉSE... 3

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

A MOODLE KERETRENDSZER TELEPÍTÉSE

Webes alkalmazások fejlesztése Bevezetés. Célkitűzés, tematika, követelmények. A.NET Core keretrendszer

Adatbányászat és Perszonalizáció architektúra

Választó lekérdezés létrehozása

Enterprise User Security

PRECÍZ Információs füzetek

Táblakezelés: Open SQL Internal table. Tarcsi Ádám: Az SAP programozása 1.

Adatbázis-kezelés ODBC-vel

Adatbázis Rendszerek II. 2. Gyakorló környezet

Microsoft SQL Server telepítése

Téradatbázisok használata QGIS-ből A DB kezelő modul 2.2 verzió

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

Database Systems II. ZH összefoglaló

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Adatbáziskezelés Delphi 5 alatt. Bese Antal

GEIAL Kovács László. GEIAL Kovács László GEIAL Kovács László

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

Az adatok a vállalat kulcsfontosságú erőforrásai. Az információs rendszer adatai kezelésének két alapvető változata:

Az SQL*Plus használata

Az ErdaGIS térinformatikai keretrendszer

ÜZLETI I TELLIGE CIA - VIZUALIZÁCIÓ

LBRA6i integrált rendszer

API tervezése mobil környezetbe. gyakorlat


Az Evolut Főkönyv program telepítési és beállítási útmutatója v2.0

Adatok speciális megjelenítése

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Adatbázis-kezelés Access XP-vel. Tanmenet

ORACLE. SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

Tájékoztató. Használható segédeszköz: -

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Adatkezelés speciális eszközökkel. Giachetta Roberto

Bevezetés: az SQL-be

Elemi alkalmazások fejlesztése IV.

LINUX LDAP címtár. Mi a címtár?

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

Gyakorlati vizsgatevékenység A

A WORDPRESS TELEPÍTÉSÉNEK LÉPÉSEI

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Készítette: Szabóné Nacsa Rozália

Java és web programozás

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése I 7. előadás Adatbázis-kezelés elemi eszközökkel Giachetta Roberto A jegyzet az ELTE Informatikai Karának 2014. évi Jegyzetpályázatának támogatásával készült

A MySQL adatbázis-kezelő Elérhetősége A MySQL az egyik legnépszerűbb SQL alapú relációs adatbázis-kezelő motor, jelenleg az Oracle tulajdonában van letölthető a www.mysql.com honlapról elérhető ingyenes és kereskedelmi változata is több platformon elérhető, legfrissebb változata az 5.5 grafikus kezelőfelülete a MySQL Workbench több programozási nyelvhez is ad elérési felületet a MySql Connector segítségével (pl. C++, Java,.NET) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:2

A MySQL adatbázis-kezelő Használata A MySQL beépített felhasználó-kezeléssel rendelkezik a rendszergazda felhasználó a root, a többi felhasználónak tetszőlegesen szabályozható a jogosultsága felhasználót létrehozni a create user utasítással, jogosultságot felvenni a grant privileges utasítással lehet, pl.: CREATE USER 'tanulo'@'localhost' IDENTIFIED BY 'asd123'; GRANT ALL PRIVILEGES ON *.* TO 'tanulo'@'localhost' WITH GRANT OPTION; a felhasználó megadásával léphetünk be a konzol felületre: mysql u tanulo -p ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:3

A MySQL adatbázis-kezelő Használata Általános MySQL utasítások: status: adatbázisszerver állapotának lekérdezése show databases: adatbázisok listázása use <adatbázis>: adatbázis használatba vétele show tables: aktuális adatbázis tábláinak listázása desc <táblanév>: tábla oszlopainak listázása show table status like '<táblanév>': tábla aktuális státuszának lekérdezése set password = '<jelszó>': jelszóváltás ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:4

A MySQL adatbázis-kezelő Felépítése Az adatbázisok metainformációi az information_schema adatbázisban találhatóak ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:5

A Qt adatbázis-kezelő modul A QtSQL modul biztosítja az SQL alapú adatbázisok kezelésének osztályait, amelyeket három csoportba sorolunk a modell osztályok biztosítják a logikai adatbázist, és az interfészt a felületi réteg számára: QSqlQueryModel, QSqlTableModel, QSqlRelationalModel az alkalmazásprogramozói (API) osztályok biztosítják az SQL elemek kezelését: QSqlDataBase, QSqlQuery, QSqlError, QSqlField, QSqlIndex, QSqlRecord a meghajtó osztályok biztosítják az adatbázis elérését és a kommunikációt: QSqlDriver, QSqlDriverCreator<T>, QSqlDriverCreatorBase, QSqlDriverPlugin, QSqlResult ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:6

A Qt adatbázis-kezelő modul QSqlTableModel QSqlIndex QSqlRecord QSqlDatabase QSqlQuery QSqlResult QSqlDriver adatbázis ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:7

A Qt adatbázis-kezelő modul A modul osztályainak használatához a megfelelő osztályt kell meghivatkozni az aktuális fájlban, illetve lehetőség van a teljes modul betöltésére is: #include <QtSql> A modul alapból nem érhető el egy alap Qt alkalmazásban, használatát a projektfájlban jeleznünk kell a QT += sql utasítással a betöltendő modulok egy sorban is lehetnek, pl. QT += core gui widgets sql amennyiben konzol felületen szerkesztünk, a projektfájl létrehozásakor is hozzáadhatjuk a modult: qmake -project "QT += sql" ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:8

Adatbázis meghajtók A QtSQL modul több beépített meghajtót is tartalmaz a különböző adatbázis-motorok kezelésére, valamint felületet biztosít további meghajtók készítésére, pl.: QMYSQL: MySQL QSQLITE2, QSQLITE: SQLite QOCI: Oracle Call Interface Driver QODBC: Open Database Connectivity (ODBC), Microsoft SQL Serverhez, valamint más ODBC adatforrásokhoz Nincs minden meghajtó előre telepítve, bizonyos esetekben további csomagként (pl. libqt5sql5-mysql) kell hozzáadnunk őket ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:9

Adatbázis kapcsolat Adatbázismotort betölteni, és kapcsolatot létesíteni a QSqlDatabase osztály segítségével tudunk, pl.: QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); db.sethostname("localhost"); // szerver db.setdatabasename("mydatabase"); // adatbázis db.setusername("root"); // felhasználónév db.setpassword("root"); // jelszó a betöltést az adddatabase() statikus metódussal végezzük a meghajtó megadásával, beállíthatjuk a szervert, az adatbázist, valamint a felhasználó adatait a rendelkezésre álló meghajtókat a drivers() metódussal kérhetjük le ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:10

Adatbázis kapcsolat Lehetőségünk van több kapcsolatot is kezelni a programban (statikus metódusokkal): a kapcsolatok elnevezéssel rendelkeznek, ezen keresztül érhetjük el őket: adddatabase(<meghajtó>, <név>) kapcsolatok listázhatóak (connectionnames()), lekérhetőek (database(<név>)), törölhetőek (removedatabase(<név>)) Kapcsolatot megnyitni az open(), bezárni a close() művelettel tudunk ha nem sikerül a megnyitás, hamissal tér vissza a program bezárása nem zárja be a nyitott kapcsolatokat ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:11

Parancskiadó objektumok SQL utasításokat QSqlQuery segítségével futtathatunk, pl.: QSqlQuery query; if (query.exec("select id, data from mytable")) // lekérdezés futtatása // eredmények kiírása else // sikertelen futtatás cout << query.lasterror().text(); a konstruktorban megadható paraméterként az adatbázis kapcsolat, ha nem adjuk meg, az alapértelmezettet használja az exec() művelettel tetszőleges utasítást végrehajthatunk, és igazzal tér vissza, amennyiben sikerült végrehajtania a lasterror() segítségével lekérdezhetjük a hiba okát ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:12

Lekérdezések olvasása Amennyiben lekérdezést hajtottunk végre, az eredményt soronként kezeljük, azaz egyszerre nem látjuk a teljes eredményt csak egy sorát lépegetni a first(), next(), previous(), last() utasításokkal adott sorra ugrani a seek(<sorszám>) metódussal, mindegyik igazat ad, ha tudott lépni alapból az eredmény első sora előtt állunk (tehát rögtön léptetni kell) amennyiben csak előre akarunk lépkedni, a setforwardonly() metódus optimalizálja a lekérdezést ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:13

Lekérdezések olvasása értéket lekérdezni a kijelölt sorból a value(<oszlopszám>) metódussal tudunk az érték QVariant típusú, így az tovább konvertálható alkalmas formára a size() megadja a lekérdezett sorok számát Pl.: while (query.next()) { cout << query.value(0).tostring(); // az első oszlop egész számot tartalmaz cout << query.value(1).toint(); // a második oszlopot szövegesen kérjük le } ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:14

Példa Feladat: Készítsünk egyszerű konzol alkalmazást, amely alkalmas az apartman adatbázis (apartments) felhasználók (user) táblájának beolvasására, sorok törlésére, valamint új értékek bevitelére. a program csak megfelelő felhasználónév/jelszó megadásával engedi elvégezni a tevékenységeket a program lekérdezés segítségével azonosít, beolvassa a táblatartalmat (azonosító, név, jelszó, szint), kilistázza, lehetőséget ad azonosító alapján törlésre, és beszúrásra a programot vezéreljük menün keresztül, ehhez hozzunk létre egy menü osztályt ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:15

Példa Tervezés (adatbázis): ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:16

Példa Tervezés (alkalmazás): class UserManagerConsole Menu + Menu() + Run() :void - ShowAllUsers() :void - ShowCreateUser() :void - ShowRemoveUser() :void - validateuser() :bool ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:17

Példa Megvalósítás (main.cpp): int main(int argc, char *argv[]){ QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // kapcsolat létrehozása if (db.open()) { // kapcsolat megnyitása // sikeres kapcsolódás Menu m; m.run(); // menü futtatása db.close(); // kapcsolat bezárása } else { } // sikertelen kapcsolódás return 0; } ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:18

Példa Megvalósítás (menu.cpp): void Menu::ShowRemoveUser() { getline(cin, usernamestring); QSqlQuery removequery; // törlő utasítás removequery.exec("delete from user where user_name = '" + QString::fromStdString(userNameString) + "'"); // törlés végrehajtása } ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:19

SQL injekció Az adatbázisban tárolt adatokat meg kell óvni az idegenek elől, biztonságossá kell tenni az adatokhoz való hozzáférést a programok az adatbázis-szerveren SQL lekérdezéseket futtatnak, amelyeket a programkódban összeállítanak szövegként az összeállítás során törekedni kell arra, hogy ne lehessen manipulálni az utasítást úgy, hogy az illetéktelen felhasználók hozzáférhessenek a tárolt adatokhoz Az SQL parancsok manipulációját nevezzük SQL injekciónak (SQL injection) leggyakoribb webes környezetben ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:20

SQL injekció Pl.: // felhasználónév/jelszó bekérése QSqlQuery query; query.exec("select user_name from users where user_name = '" + username + "' and password = '" + password + "'"); // username = "", password = "' or '1' = '1" // esetén: query.exec("select user_name from users where user_name = '' and password = '' or '1' = '1'"); // a feltétel minden sorra igazat ad, az egész // táblát lekéri ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:21

SQL injekció Az SQL injekciók kivédésének több módja van: a felhasználótól kapott értékek ellenőrzése, módosítása, pl.: username = username.remove("'"); felhasználó által megadható adatok korlátozása, pl.: lineedit.setinputmask("aaaaaaaaaaaaaaa"); // csak alfabetikus karaktereket fogad el lineedit.setvalidator( QRegExpValidator("[A-Za-z0-9]{1,8}")); // 1-8 db alfanumerikus karaktert fogad el paraméteres utasítások használata az injekciót eleve kizáró megoldások használata (pl. modell-nézet architektúra) ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:22

Utasítások paraméterezése Az utasítás paraméterezhető, azaz előre legyárthatjuk az utasítást a prepare(<utasítás>) utasítással a paramétereket a bindvalue(<paraméter>, <érték>) metódussal helyettesíthetjük be tényleges értékekre pl.: QSqlQuery query; query.prepare("insert INTO mytable(id, data)" + "VALUES (:id, :data)"); query.bindvalue(":id", 1); // paraméter beírása query.bindvalue(":data", "something"); query.exec(); // végrehajtás a behelyettesítéskor átkódolja a kapott szöveget ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:23

Példa Feladat: Készítsünk egyszerű konzol alkalmazást, amely alkalmas az apartman adatbázis (apartments) felhasználók (user) táblájának beolvasására, sorok törlésére, valamint új értékek bevitelére. a program csak megfelelő felhasználónév/jelszó megadásával engedi elvégezni a tevékenységeket a program paraméteres utasításokat fog használni, kikerülve az SQL injekció lehetőségét azonosít, beolvassa a táblatartalmat (azonosító, név, jelszó, szint), kilistázza, lehetőséget ad azonosító alapján törlésre, és beszúrásra ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:24

Példa Tervezés: class SecureUserManagerConsole Menu - insertquery :QSqlQuery - removequery :QSqlQuery - selectquery :QSqlQuery - validatequery :QSqlQuery + Menu() + Run() :void - ShowAllUsers() :void - ShowCreateUser() :void - ShowRemoveUser() :void - validateuser()() :bool 4 QSqlDatabase QSqlQuery ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:25

Példa Megvalósítás (menu.cpp): bool Menu::validateUser(){ validatequery.bindvalue(":name", QString::fromStdString(userName)); validatequery.bindvalue(":password", QString::fromStdString(userPassword)); // paraméterek behelyettesítése validatequery.exec(); // lekérdezés futtatása } return validatequery.next(); // ha van eredmény, akkor sikeres a lekérdezés ELTE IK, Eseményvezérelt alkalmazások fejlesztése I 7:26