PDA

Pogčedajte punu verziju : enkripcija podataka u mysql bazi


ivanhoe
29. 08. 2009., 13:48
Da li postoji neko preporuceno resenje za enkripciju svih podataka u bazi?

Naime, naizgled je to prosto, samo cu enkriptovati sve podatke pre unosa u bazu i to je to, medjutim kad se enkriptuju sva polja (ne samo text) onda ce mi baza indexirati te enkriptovane podatke, tako da gubi smisao da uopste imam bazu, jer ce selektovanje po enkriptovanim kolonama biti neupotrebljivo. Primera radi ne mogu da imam datetime kolonu, ne mogu da radim full text search ili like, itd... odnosno mogu, ali uz mnogo fizikalisanja u kodu, pa bih vise voleo ako postoji neki mysql engine za to, ili tako nesto...

kodi
29. 08. 2009., 14:45
ja sam video da su neki likovi enkriptovali samo string polja (ok enkriptovali su i cene mislim)
sva polja koja su datumi, id-jevi od normalizacija i tako to su ostala kao datetime ili integer ili sta god.

medjutim posto su kljucna polja (username, email, group... i slicna) bili enkriptovani, nisi mogao da sklopis celinu ko sta gde i koliko :D

mada to je opet jedan od najjadnijih kodova koje sam u zivotu video, ali eto - radilo je :D

mislim da ne postoji native podrska za enkriptovanje, indexing itd....

holodoc
30. 08. 2009., 20:30
ja sam video da su neki likovi enkriptovali samo string polja (ok enkriptovali su i cene mislim)
sva polja koja su datumi, id-jevi od normalizacija i tako to su ostala kao datetime ili integer ili sta god.

medjutim posto su kljucna polja (username, email, group... i slicna) bili enkriptovani, nisi mogao da sklopis celinu ko sta gde i koliko :D

mada to je opet jedan od najjadnijih kodova koje sam u zivotu video, ali eto - radilo je :D

mislim da ne postoji native podrska za enkriptovanje, indexing itd....Enkriptovanje podataka u okviru same baze obično nije najbolje rešenje jer dodatno opterećuje upite tako da ako se brineš za sigurnost svojih podataka verovatno jedno od boljih rešenja je da koristiš MySQL SSL (http://dev.mysql.com/doc/refman/5.0/en/secure-basics.html) mada to opet izuskuje da se server nalazi u potpunosti pod tvojom kontrolom ili da web server provajdera podržava ovu opciju. U deljenom "shared" okruženju gde jedan isti MySQL server koristi više korisnika problem je nažalost teži pa se tako često ipak pribegava enkripciji ili nekim drugim metodama obfuskacije podataka koje naravno povećavaju sigurnost ali imaju velik uticaj na performanse upita. Primera radi skoro sam imao priliku da vidim situaciju gde su se podaci štitili klasičnim razbijanjem podataka na nekoliko atributa u relaciji tabele što i nije tako loša tehnika ali automatski eleiminiše prednosti DBMSa kao što su indeksiranje, full text search itd.

U suštini uvek postoji neki "trade off" željenog i dobrog :)

razno
30. 08. 2009., 22:56
Nativna podrska za enkripciju ne postoji. Postoje dve mogucnosti, a to su da koristis enkriptovan filesystem i na nju smestis bazu, ili neki 3rd party proizvod (http://www.vormetric.com/products/vormetric_database_encryption_expert.html). Kriptovanjem filesystema ne moze niko da prekopira bazu.

E sad ako ne zelis da se podaci vide sa select() mozes koristiti AES_ENCRYPT(). Ovime gubis mogucnost za full text search,datetime tip podataka.Kriptovati indexe bi bilo besmisleno, jer dzabe nekom indexi ako ne moze da razume podatke.

Bolja ideja bi bila da niko sem tebe nema pristup bazi. Da u aplikaciji napravis dobru zastitu za username/pass/ime baze, koristis ssl vezu kao zastitu od snifovanja,a baza da stoji na kriptovanom file sistemu. Ovime si pokrio svaku mogucnost citanja baze.