Í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