ugrás a tartalomhoz

adatbázisok külön elérési útvonalakon, titkosítva

jeti · 2006. Aug. 18. (P), 20.19
Sziasztok!

Hogy lehet egy adatbázist egy különálló mappában tárolni, a többi adatbázistól független helyen (pl.: egy másik meghajtón)?

Milyen lehetőségek vannak az adatbázis titkosítására?
Magát az adatbázist szeretném titkosítani, nem php-ból kódolni / dekódolni az adatokat. Melyik (ingyenes, ha van) adatbázis vagy tábla típusban lehet ezt megvalósítani? MySQL?

Előre is köszönöm a segítséget.
 
1

pontosítva?

breakline · 2006. Aug. 18. (P), 23.16
Szia

Nem értem mire gondolsz pontosan. Az adatbázis ugyanúgy file-okból áll, mint bármi más a számítógépen, ami maradandó adat, a különbség, csak az adatok elérésében látható. A mysql is titkosítja az adatokat, amiket tárol, így ott ezzel nem kell foglalkozni, hiszen az adatbázis eléréshez részletes jogosultság kiosztás van. Ha prmitívebb, de jobban kézbentartható és független adatbázist akarsz használni, a php tele van hasonló lehetőségekkel, pl. dba, dbm, db++, Interbase, php.net-en megtalálod ezek php-beli megvalósítását is
2

MySQL nem titkosít

Rici · 2006. Aug. 19. (Szo), 00.22
A MySQL nem titkosít semmilyen adatbázist. Az, hogy a futó MySQL-hez jelszóval kell csatlakozni, még nem jelenti azt, hogy az adatbázisállományok titkosítva lennének.

Egyébként egy szerverprogram adatfájljainak a tökéletes titkosítása elméletileg sem megoldható, mivel valahogy a szerverprogramnak is el kell tudni indulnia "magától", és dolgozni a fájlokkal. Legfeljebb olyan módszer létezik, hogy a gép (vagy szerverprogram) indulásakor be kell írni egy jelszót, de ugyebár ez egy szervergép esetén nem túl előnyös.
4

Pontosabban

jeti · 2006. Aug. 19. (Szo), 10.29
Bocsi, ha nem voltam egyértelmű, most igyekszem az lenni. Szóval, akkor konkrétabban:
Természetesen tudom, hogy ugyanolyan fájlokból állnak, mint más egyéb a gépen, és hogy csak felhasználó-jelszópárosítással érhető el az adatbázis.

Windows PC-on futtatok Appservert, és nem webszervert üzemeltetek. Tehát ha valaki megfelelően rákeres (elég csak a Sajátgép keresőjével is), akkor már azt egyből megtalálja az adatokat. Anélkül, hogy tudná Appserverem van és a jogosultságok, jelszók kitalálásán kívül. Az adatbázisok elérési útvonala: C:\Program Files\AppServ\mysql\data és itt vannak felsorolva az adatbázisok (pl.: gyümölcs, zöldség, hús stb.)
Ezekben a mappákban vannak a táblák, méghozzá két fájlban eltárolva. A tabla_neve.frm-ben a mezők, míg tabla_neve.myd maga az adat van.

Tehát ha az alma táblát keresem a gyümölcs adatbázisban, akkor ez lesz az elérési útvonal:
mezők: C:\Program Files\AppServ\mysql\data\gyümölcs\alma.frm
adatok: C:\Program Files\AppServ\mysql\data\gyümölcs\alma.myd

Ha megnyitom egy szövegszerkesztővel, akkor egyből látom a mezőket és az adatot is. Ezért egy olyan megoldást keresek, ahol az adatok ebben a tároló fájlban is titkosítva vannak.

A másik kérdésem meg arra vonatkozik, hogy tudom ezeket a mappákat külön helyen tárolni?
Pl.:
1.) C:\Program Files\AppServ\mysql\data\gyümölcs, zöldség adatbázis
2.) D:\etel\hus adatbázis
3

Adatbázis más helyen

Rici · 2006. Aug. 19. (Szo), 00.48
Gondolom az első kérdésed is MySQL-re vonatkozik. Ebben az esetben is legalább kétfelé kell bontani a dolgot, mert mostanában két elterjedt táblatípus van, amik különbözőképpen kezelik az adatokat.

A MyISAM táblák esetén a MySQL data könyvtárán belül egy könyvtár jön létre az adatbázis számára. Gyakorlatilag az, hogy van egy üres adatbázisod, egyenértékű azzal, hogy van egy üres könyvtárad a data könyvtárban. Ebben a könyvtárban lesz táblánként néhány fájl. Ha ezt a könyvtárat valahogy átirányítod (pl. Linux alatt linkeléssel, vagy Windows alatt valamelyik junction tool-lal), akkor máris más helyen van az adatbázisod.

InnoDB táblák esetén alapból egész máshogy néz ki az egész, ekkor is létrejön az adatbáziskönyvtár, de a táblákról csak információs fájlok kerülnek bele, a tényleges adatok külön InnoDB adatállományokban vannak, amik az összes adatbázis InnoDB tábláira nézve közösek. Alapból egy InnoDB adatállomány van, minden adat ebbe kerül. Emellé lehet felvenni a MySQL opcióval még tetszőleges elérési úttal több InnoDB adatállományt, de azt nem lehet szabályozni, hogy melyik adatbázis melyik táblája melyik adatállományba kerüljön. Ha ez nem tetszene, akkor InnoDB esetén van egy külön opció, amit bekapcsolva az InnoDB állományok ugyanúgy külön táblánként lesznek, mint MyISAM esetén.

A részleteknek nézz utána a MySQL dokumentációban.
5

MySQL-en kívül más és junction tool

jeti · 2006. Aug. 19. (Szo), 10.31
Köszönöm, pont ezekre gondoltam.
A MySQL-en kívül létezik olyan adatbázis, amely titkosítja az adatbázis állományokat? Mivel ez nem webszerver, nem jelent semmiféle védelmet, könnyen kereshető.
A tábláknál a tábla típusával ezt nem lehet megoldani? (MyISAM, MERGE, HEAP, MEMORY, InnoDB, ISAM) Melyik hogy tárolja az adatokat? Kerestem, de csak angol nyelvű dokumentációt találtam. (http://dev.mysql.com/doc/) Van magyar nyelvű?
Hogy kell a junction tool-t használni? Elég egy magyar nyelvű oldal linkje is.
6

Junction tool

Rici · 2006. Aug. 19. (Szo), 11.23
Sajnos magyar nyelvű "igazán korrekt" oldalt nem hiszem, hogy találsz ezekben a témákban. (Aki ilyen témákkal komolyan foglalkozik, előbb-utóbb meg fog tanulni angolul, vagy így, vagy úgy :))

Angolul

Magyarul, ami van

A junctionokkal arra figyelj, hogy bár Windows 2000 óta létezik ez a fogalom, nem véletlenül nincsen a Windowsban beépített kezelőfelület hozzájuk. Ugyanis Windows alatt ez a könyvtár átirányítás dolog nem egy annyira megszokott dolog, mint pl. Unixok alatt, és a programok egyszerű könyvtárként látják, tehát pl. a törléseket is úgy csinálják, hogy először kitörlik a tartalmát, és utána a junction pointot, tehát onnan is elveszik az adat, ahová mutatott a junction point, nem csak a junction pointot szünteti meg. Tehát junction pointot törölni csak junction point tool-lal érdemes.
8

Hogy is?

jeti · 2006. Aug. 19. (Szo), 13.11
Köszönöm szépen a segítséget, de ez nekem még most magas...

Nem értem, akkor mi is pontosan a junction?
Ez ugye nem a megosztott könyvtárakhoz való meghajtó csatlakoztatása...
Annyit akarok, mondjuk, hogy pl.: a C:\Program Files\AppServ\mysql\data\hus mappa tartalma D:\etel\hus mappában legyen, és az eredeti mappában csak egy hivatkozás legyen. Mit kell beállítanom? Egy fájlba beillesztem, hogy ugorjon át a szomszédos meghajtóba (mint pl. a domain.hu/valami/valaki mappában egy index fájl, ami a domain2.hu/valaki/valami mappába viszi át a látogatót), vagy a registry-ben kell állítani valamit (még sohase láttam, nem használtam ...) vagy van valamilyen program, amibe egyszerűen beírom az eredeti útvonalat és a célmappát?

Az angol már tervbe van véve.
12

Junction

Rici · 2006. Aug. 19. (Szo), 21.42
A junctiont a következő példával próbálom ismertetni:

Van egy üres könvytárad, C:\Valami

Vannak adataid valahol, mondjuk C:\Adatok, amiben van egy C:\Adatok\Fajl.txt

Ha csinálsz egy olyan junctiont a C:\Valami könyvtárra, ami a C:\Adatok könyvtárra mutat, akkor a C:\Adatok\Fajl.txt -t ezentúl elérheted C:\Valami\Fajl.txt néven is, ha az "egyiket" módosítod, a "másik" tartalma is ugyanúgy módosul.

Tehát a junction egy könyvtár átirányítás, könyvtár soft link.
13

beállítás

jeti · 2006. Aug. 20. (V), 12.21
Köszönöm. Pont erre van szükségem! A példámmal (husos) is ezt akartam elérni. Hogy kell beállítani? (lásd. még #8 második fele)
18

Junction

Rici · 2006. Aug. 28. (H), 10.14
A Sysinternals-tól egy segédprogram junction létrehozásához.

Letöltés

Junction létrehozása:
junction <létrehozandó junction könyvtár neve> <már létező könyvtár neve, ahova mutatni fog a létrehozandó junction>


Junction törlése
junction -d <létrehozott junction könyvtár neve>
7

Adatbázis titkosítás

Rici · 2006. Aug. 19. (Szo), 11.40
Mint mondtam, az adatbázis tökéletes titkosítása elméletileg sem megoldható. Gondolj bele: valahogy el kell indulnia az adatbázis-kezelőnek, és dolgoznia az adatokkal, vagyis hozzáférnie titkosítatlan formában. Nincs semmi akadálya egy olyan adatbázis-kezelő létezésének, ami egy pontig tökéletesen ugyanazt csinálja, mint az eredeti adatbázis-kezelő, de attól a ponttól kezdve, hogy már titkosítatlan formában látja az adatokat, attól kezdve kiszolgáltatja azokat hacker-pistikének.

Persze ez az előbbi dolog úgy értendő, hogy hacker-pistikének teljes hozzáférése van az adattároló eszközhöz, pl. rendszergazda a gépen, vagy egyszerűen fogja a winchestert, és átrakja a saját gépébe.

A titkosítás az előbbi jellegű dolgok ellen akkor véd, ha valamilyen jelszó beírása után kerülnek kititkosításra az adatok. Így működik pl. Windows alatt a fájlok titkosítása (jobb klikk/tulajdonságok/speciális/tartalom titkosítása), ott "a részletek most mellőzve" a bejelentkezési jelszóval történik a titkosítás megoldása.

Nem kell ide titkosítás, egyszerűen felesleges, az másra való.
Erre találták ki a jogosultságokat.

Ha a nem rendszergazda jogú a gépen az, aki elől félted az adatokat, akkor egyszerűen fájlrendszer-jogosultságokkal megoldható, hogy ne férjen hozzá az adatbázisfájlokhoz. Pl. Windows alatt a MySQL alapbeállítás szerint a SYSTEM felhasználó nevében fut (ami amúgy nem ajánlott éles szerveren semelyik adatbázis szerverprogram esetén sem), tehát a Rendszergazdáknak és a SYSTEM felhasználónak kell teljes jogot adni az egész MySQL könyvtárra, a többieknek meg semmit.
9

Titkosítás

jeti · 2006. Aug. 19. (Szo), 13.12
Először is: tudom, hogy nincs feltörhetetlen titkosítás, az egész csak idő kérdése. Ha nagyon sokáig tart a feltörése, és addigra használhatatlanná válik az információ, akkor éri meg igazán.
Csak ki akarom zárni az egyszerű felhasználót, a hacker előbb-útóbb megfejti, akár mit csinálok. Ez nagyjából nem számít sokat, csak megnehezíti a hacker dolgát és a kis időhúzás akár hasznos is lehet.
Szóval olyan megoldást keresek, mint pl. a Paradox táblák esetében. Megnyitod jegyzettömbbel és látod az adatfoszlányokat, akár össze is tudod olvasni, mint itt. De ha megadsz egy jelszót, akkor már nem látod, mert el van rejtve. Persze tudom, hogy a paradox tábla titkosítása semmit se ér, mert nagyon könnyű megfejteni. Csak azért ezt hoztam fel példának, mert ezt ismerem, használtam. A Delphi Database Desktop-ban rengeteg táblafajta közül választhatnék.
11

Titkosítás

Rici · 2006. Aug. 19. (Szo), 21.38
(Zárójelben: létezik tökéletes titkosítás, mégpedig a XOR kódolás, az egyetlen szépséghibája, hogy a kulcs mérete megegyezik a titkosítandó adat méretével)

Az összes többi titkosítás, pl. nyilvános kulcsú, idővel elméletileg valóban feltörhető, de ez még a hackerek számára sem realitás. Viszont amit te akarsz, hogy a jelszó beírása nélkül elinduló adatbázis legyen titkosítva, a már egyszer elmondott dolgok miatt 0 időbe telik a feltörése, egyszerűen mert magának az adatbázisprogramnak ismernie kell a kulcsot a dologhoz, ha el tud indulni és dolgozni az adatokkal, tehát a gépen ott lesz a titkosítás kulcsa, tehát egyszerűen felesleges a titkosítás.

Nem tudom, azon mi nem érthető, hogy fájlrendszer-jogosultságokat állíts be, és akkor a notepad meg bármi más azt fogja kiírni, hogy access denied, és nem fogsz látni adatfoszlányokat.

Ha mindenképpen ragaszkodsz ahhoz, hogy titkosított formában legyen tárolva, és aminek a vinyó gépből való kivétele esetén is tényleg sokat kell utánanézni egy átlaghackernek, hogy NTFS titkosítást használsz a fájlokon. (Amúgy ez a titkosítás teljesen jó, és nem lenne normális időn belül feltörhető, mert a felhasználó bejelentkezési jelszavával titkosít, de szerverprogram esetén egyszerűen el van tárolva a bejelentkezési jelszava annak a felhasználónak, akinek a nevében fut a szerverprogram, ezért lehet a te esetedben feltörni.) Ehhez állítsd be a Windows szolgáltatások között, hogy a MySQL egy adott felhasználó nevében fusson, amely felhasználót célszerűen csak erre a célra hozol létre. Ezzel a felhasználóval lépj be a Windowsba, és titkosítsd az adatbázisok fájljait. Viszont arra figyelj, hogy az állandó kódolás/dekódolás lassú, tehát lassú lehet az adatbázisod. Azonkívül "egyszerű" szemmel tekintve így is elég tuti a titkosítás, tehát ha pl. újratelepíted a Windowst, akkor keresztet vethetsz a fájljaidra, még akkor is ha ugyanolyan jelszavú felhasználóval próbálkozol.
14

paradox

jeti · 2006. Aug. 20. (V), 14.59
Ha létre hozok egy paradox táblát, és megnyitom titkosítás előtt a kép felső részét kapom, ami olvasható. Ha titkosítás után nyitom meg, akkor a kép alsó, olvashatatlan részét kapom. E közben ugyanúgy tudom használni, csak meg kell adnom a jelszót (alma).
Ilyen megoldásra gondoltam...

A kép: http://kepfeltoltes.hu/060820/valami_www.kepfeltoltes.hu_.gif
10

Helyi adatbázis

jeti · 2006. Aug. 19. (Szo), 13.18
Van olyan megoldás (mint pl. a Delphiben), hogy megadom az adatbázis elérési útvonalát és jelszavát?
Csak itt PHP-val és SQl-el kezelném. (A Pascaltól már nagyon elszoktam.)
Igazából ez lenne a legmegfelelőbb megoldás a kérdésemre.
15

megoldatlan probléma!

jeti · 2006. Aug. 26. (Szo), 18.23
Sziasztok!

Amikor beküldtem ezt a témát, akkor be szerettem volna állítani a fent említet dolgokat. Mivel nem ismertem semmit, ezért megkérdeztem, hogy milyen lehetőséget vannak. Most már tudom a lehetőségek nevét, működésének mechanizmusát, csak beállítani, azaz használni nem tudom ... :(
Légy szíves segítsetek!
Rici-nek külön köszönöm az eddigi segítségét.
16

nem nagyon értem

krey · 2006. Aug. 26. (Szo), 18.39
Nem világos előttem, hogy miért akarsz titkosítani ilyen módon adatokat, de ahogy olvastam a topic-ot, azt láttam, hogy Delphi-hez értessz valamennyire. Miért nem csinálod akkor Delphiben azokat a részeket, amiket PHP-ban megoldhatatlan jelzővel illettél?

üdv. krey

ps. a többiek arra tettek javaslatokat, hogy miként tudsz védekezni külső támadásoktól, te pedig folyton azt hoztad fel, hogy jegyzettömbbel el tudod olvasni. Attól félsz, hogy valaki nekiül a gépednek és megnézi, hogy mit írtál a MySQL tábláidba? Vagy sikerült teljesen összezavarnod :)

pps. ha azt mindenképp olvashatatlan adatokat szeretnél, akkor nyomjál nekik gzip-et ;)
17

Delphi?

jeti · 2006. Aug. 27. (V), 12.53
Nem megoldhatatlan, csak megoldatlan problémáról van szó.
A konkrét kérdésem: Hogy lehet beállítani a Junction-t?

Hát igen, eredetileg Delphiben terveztem a megírását, de arra gondoltam, hogy talán php-ban kényelmesebben lenne. Ezek szerint nem, de ha jól tudom ott is tudok használni SQL parancsokat.
Igazából ez az adatbázis nem kerülne fel az internetre, csak az adott gépen lenne elérhető. Így is több támadásnak a van kitéve: internetről betörő hacker, kíváncsi munkatársak... :-)
Akkor maradók a Delphinél. Attól függetlenül, még érdekel az előbb feltett kérdésemre a válasz.