adatbázisok külön elérési útvonalakon, titkosítva
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.
■ 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.
pontosítva?
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
MySQL nem titkosít
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.
Pontosabban
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
Adatbázis más helyen
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.
MySQL-en kívül más és junction tool
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.
Junction tool
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.
Hogy is?
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.
Junction
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.
beállítás
Junction
Letöltés
Junction létrehozása:
Junction törlése
Adatbázis titkosítás
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.
Titkosítás
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.
Titkosítás
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.
paradox
Ilyen megoldásra gondoltam...
A kép: http://kepfeltoltes.hu/060820/valami_www.kepfeltoltes.hu_.gif
Helyi adatbázis
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.
megoldatlan probléma!
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.
nem nagyon értem
ü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 ;)
Delphi?
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.