Írási műveletek
Miről lesz szó?
Átvesszük újra az írási műveleteket, meg hogyan lehet hatékonyabban is csinálni, közben felépítjük az idik táblát is :)
A következőket vesszük át
- Create Table - Alter Table
- Insert into
- Update
- SQL injection
Create TABLE
CREATE TABLE Invoice (
invoice_NO NUMERIC(24),
customer VARCHAR(60),
date_of_invoice DATE,
status VARCHAR(1),
PRIMARY KEY (invoice_NO)
);

És ha csak gyorsan egy copy táblát akarok?
CREATE TABLE copy_Mentesek SELECT * FROM Mentesek;


És ha csak néhány oszlop vagy sor kell?
CREATE TABLE idik SELECT m.pupID, m.idi, ms.erkezes, ms.gazdihoz_koltozes FROM Mentesek as m inner join mentes_stat as ms ON m.pupID=ms.pupID LIMIT 10;


tábla módosító utasítás
ALTER TABLE:
- ADD (új oszlop/kulcs/index hozzáadás)
- MODIFY (oszlop típus módosítás)
- DROP (oszlop/index törlése)
ALTER TABLE idik ADD szuletes_datum DATE;
ALTER TABLE idik ADD PRIMARY KEY pupID (pupID);
ALTER TABLE idik MODIFY idi VARCHAR(60);
ALTER TABLE idik DROP szuletes_datum;
ÚJ sor hozzáadása
Egy példán:
INSERT INTO idik (pupID,idi,erkezes,gazdihoz_koltozes) VALUES('210111-10','Roszkopf Noémi','2021-01-11','2021-02-21'),('210115-11','Guilherme Pinzegher','2021-01-15','2021-02-10');
INSERT (IGNORE) INTO tábla_név (oszlop1, oszlop2, oszlop3, ...)
VALUES (érték1, érték2, érték3, ...),(érték_21,érték_22,érték_23,...);
De mire jó az IGNORE
INSERT INTO idik (pupID,idi,erkezes,gazdihoz_koltozes) VALUES('210111-10','Roszkopf Noémi','2021-01-11','2021-02-21');
INSERT IGNORE INTO idik (pupID,idi,erkezes,gazdihoz_koltozes) VALUES('210111-10','Roszkopf Noémi','2021-01-11','2021-02-21');
VS.


És ha lusta vagyok kézzel össze szedni az értékeket, de meg van táblában?
INSERT IGNORE INTO idik
(pupID,idi,erkezes,gazdihoz_koltozes)
SELECT m.pupID, m.idi, ms.erkezes, ms.gazdihoz_koltozes FROM Mentesek as m inner join mentes_stat as ms ON m.pupID=ms.pupID;
UPDATE
UPDATE tábla_név
SET oszlop1 = érték1, oszlop2 = érték2, ...
WHERE logikai_feltétel;
Egy példa:
UPDATE idik
SET gazdihoz_koltozes='2023-03-26'
BEGIN;
WHERE pupID='230326-154';
COMMIT;
Na és akkor ha megint lusta vagyok, de vannak adatok, hogy updatelek?
(UPDATE és JOIN)
Feladat: egy új oszlopot adunk az idik táblának mentvény névvel, majd töltsük fel:
ALTER TABLE idik ADD mentveny_nev VARCHAR(60);
UPDATE idik AS i INNER JOIN Mentesek AS m ON i.pupID=m.pupID
SET i.mentveny_nev=m.mfoek_nev;
SQL Injection


SQL Injection
Azaz, hogyan lehet bemászni egy adatbázisba, majd onnan adatokat lopni, esetleg az egész server felett átvenni az irányítást
Példaként vegyünk egy egyszerű bejelentkező felületet
ami mögött egy ilyen SQL lehet
SELECT * FROM Users WHERE UserID = <ide jön a beírt userid>

SQL Injection
Az ügyes Hacker meg vesz az alkalmon és a következő IDt fogja megadni:
Tehát az SQL ami lefut így fog kinézni:
SELECT * FROM Users WHERE UserID = 231 OR 1=1;
Na vajon melyik User adatait fogjuk megkapni?
(logikailag az 1=1 mindig igaz)
Természetesen az összes ügyfel adatait visszakapjuk nem csak 231-t (aki nem is biztos, hogy bent van az adatbázisban)

SQL Injection
Példának jó volt, de azért normál Hacker nem csak egy sima összes eredményt kér le, bár elsőként azzal próbálkozik, és ha bejutott akkor kipróbálja, hogy tud-e a szerver fájlaiba kiíratni:
SELECT * FROM Users WHERE UserID = 231 OR 1=1; SELECT 'SHELL script hogy át vegye az irányítást' INTO OUTFILE 'im_in.sh'
és ha azt mondjuk egy folyamatosan futó fileba írta (mint a Windowson az csrss.exe) onnatól megnyitotta a saját kapuját és övé a szerver
Persze azért ez nem ilyen egyszerű de nagyjából hasonló lépések történnek, persze már nagyon hatékony védekezés van az SQL INJECTION ellen (egyrészt a kód alapján, más részt az SQL-t futtató usernek nem szokott joga lenni kiírni fájlba, főleg nem fontos fájlba, meg sok egyéb módszer :)
Vége
Házi Feladat:
- Készíts egy táblát, melybe töltsd be a kedvenc mentvényed adatait
(pupID,mfoek_nev,idi,koordi,gazdi(ha van),érkezés, gazdisodás dátuma, ivartalanítás)
ha kész van írj és megnézem :D
deck
By Gábor Opitzer
deck
- 34