You are on page 1of 53

UNIVERZITET SINGIDUNUM

Departman za poslediplomske studije


SAVREMENE INFORMACIONE TEHNOLOGIJE



MASTER RAD


ZATITA PODATAKA U BAZI










mentor kandidat
prof.dr Mladen Veinovi ore Zeevi
410591/2009

Beograd, 2011.
Zavrni rad ore Zeevi

1
Zatita podataka u bazi
Saetak

U ovom radu je opisan model zatite podataka u sistemima za upravljanje bazama
podataka. Model je zasnovan na standardnim algoritmima za ifrovanje i na standardnim
dodatnim servisima radi lake primene u realnom okruenju. Detaljno je opisana i
implementacija pomou alata otvorenog koda.
Kljune rei: baza podataka, ifrovanje, podatak, servis direktorijuma, zatita,
sigurnost, otvoren kod.


Data security in database
Abstract
In this paper contains model for protecting data stored in database management
systems. Model is based on standard cryptography algorithms and on standard services all to
accommodate easy implementation in real world environment. Detail steps of inmplemetation
with open source tools are described in second part of paper.
Key words: database, cryptography, information, directory service, protection,
security, open source.


Zavrni rad ore Zeevi

2
Sadraj:
1. UVOD ........................................................................................................................................ 3
1.1. BAZE PODATAKA ................................................................................................................. 4
1.2. ZNAAJ ZATITE PODATAKA U BAZAMA ................................................................................ 5
1.3. ZATITA BAZA PODATAKA.................................................................................................... 6
2. PREDHODNA ISTRAIVANJA .............................................................................................. 8
2.1. MICROSOFT ......................................................................................................................... 8
2.2. ORACLE ............................................................................................................................ 10
3. METODOLOKI KONCEPT................................................................................................. 11
3.1. PREDMET ISTRAIVANJ A .................................................................................................... 11
3.2. CILJ I ZADACI ISTRAIVANJ A .............................................................................................. 11
3.3. ISTRAIVAKE HIPOTEZE.................................................................................................... 11
3.3.1. Generalna hipoteza ...................................................................................................... 11
3.3.2. Posebne hipoteze ......................................................................................................... 11
3.4. METODE ISTRAIVANJ A I TOK ISTRIVAKOG PROCESA ....................................................... 12
4. REZULTATI ISTRAIVANJA .............................................................................................. 13
4.1. MODEL ZATITE PODATAKA ............................................................................................... 13
4.1.1. Bezbedno radno okruenje(SOE) .................................................................................. 13
4.1.2. Sigurnosni dnevnik ...................................................................................................... 13
4.1.3. Skraeni nazivi funkciija .............................................................................................. 14
4.2. KONTROLA KORISNIKA ...................................................................................................... 14
4.3. IFROVANJ E I UPRAVLJ ANJE KLJUEVIMA ........................................................................... 14
4.3.1. ifrovanje sa sistemom javnih kljueva ......................................................................... 16
4.3.2. ifrovanje na nivou grupe korisnika ............................................................................. 18
4.4. IFROVANJ E PODATAKA U MYSQL BAZI ............................................................................. 20
4.4.1. Dodatne komponente ................................................................................................... 20
4.4.2. Sigurnosni katalog ....................................................................................................... 20
4.4.3. Sertifikaciono telo ........................................................................................................ 22
4.4.4. Server direktorijuma .................................................................................................... 23
4.4.5. CREATE TABLE upit ................................................................................................... 24
4.4.6. INSERT INTO upit ....................................................................................................... 26
4.4.7. SELECT upit................................................................................................................ 27
4.4.8. ALTER TABLE upit...................................................................................................... 28
4.4.9. DELETE FROM upit ................................................................................................... 30
4.4.10. DROP TABLE upit ..................................................................................................... 30
4.5. KLIJ ENTSKA APLIKACIJ A .................................................................................................... 30
5. ZAKLJUAK I PRIMENLJIVOST REZULTATA .............................................................. 31
5.1. PRIMENLJ IVOST REZULTATA ............................................................................................... 32
6. LITERATURA ........................................................................................................................ 38
7. DODACI .................................................................................................................................. 39
7.1. KORIENI ALATI I SOFTWARE ............................................................................................ 39
7.2. IZVORNI KOD PROGRAMA KOJ I KORISTI PROXY BAZE PODATAKA.......................................... 39

Zavrni rad ore Zeevi

3
1. Uvod

Ovaj Master rad se sastoji iz etiri celine. Prva celina je uvodna, i ona itaoca
upoznaje sa osnovnim pojmovima i temom rada. Opisan je pojam baze podataka i data je
kratka istorija razvoja baza. Nakon toga je opisan znaaj zatite podataka, kroz
karakteristian tok podataka u savremenim aplikacijama, sa posebnim osvrtom na sigurnosne
probleme sa skladitenjem podataka. Detaljnije su opisani sigurnosni mehanizmi u
savremenim bazama i analizirani problemi koji postoje.
U drugom delu rada prikazana su najnovija reenja velikih proizvoaa baza podataka
i njihov nain reavanja problema sigurnosti podataka u bazi. Cilj ovog dela rada je da se
uoe nedostaci trenutnih sistema zatite i pronau reenja.
Kako bi pronali reenja, u treem delu rada je opisan metodoloki koncept
istraivanja koje je uraeno. Izneene su hipoteze koje e biti dokazane u nastavku rada, kroz
istraivanje.
U etvrtom, najvanijem, delu rada izneeni su rezultati istraivanja. Opisan je
teorijski model zatite podataka u bazama zasnovan na radu inenjera, J ingmin He i Min
Wang, iz IBM-ovog Centra za istraivanje. Model predvia korienje ifrovanja da bi se
zatitili podaci u bazama podataka. Kako bi se ifrovanje primenilo, definisan je pojam
Sigurnosnog kataloga, koji se upotrebljava za smetanje informacija o ifrovanju podataka. U
njemu se belee kolone koje su ifrovane, prava korisnika da ifrovanje ukljue ili iskljue I
kljueve kojima se podaci ifruju. Pored Sigurnosnog kataloga, razmotreni su i sluajevi
ifrovanja na nivou grupe korisnika, kao i problematika primene ifrovanja nad podacima
koji ve postoje (naknadno ukljuivanje ifrovanja).
Drugi deo poglavlja o rezultatima istraivanja sadri praktinu primenu teoretskog
modela. U ovom delu se nalazi najvei doprinos ovog rada problematici ifrovanja podataka
u bazama. Detaljno je objanjena primena teorijskog modela u zatiti MySQL baze podataka.
Uveden je koncept Proxy aplikacije kao cetralnog mehanizma za ifrovanje podataka. Proxy
je aplikacija koja je podstavljena izmeu klijenta i baze podataka. Ubacivanjem Proxy
aplikacije, omoguena je primena nestandardnog SQL jezika, tj. uvoenje novih kljunih
rei: encrypt, key, user_list i update. Pomou ovih kljunih rei, korisniku se prua
mogunost da upravlja ifrovanjem podataka iz standardne SQL klijentske aplikacije.
Centralna uloga Proxy-a je da pregleda upite koje alje klijent, po potrebi ih menja, izvrava
izmene u Sigurnosnom katalogu i prosleuje upite bazi podataka.
Osim Proxy-ja, za uspean rad modela, potrebni su i dodatni servisi: server
diretkorijuma i PKI infrastuktura. U rezultatima istraivanja se opisuje uloga i konfiguracija
ovih servisa.
Zavrni rad ore Zeevi

4
Proxy aplikacija sama ne menja upite koje alje klijent, ve prua mogunost
programiranja. Na kraju ovog rada prikazan je programski kod koji je napisan u svrhu rada sa
Sigurnosnim katalogom i manipulisanje sa korisnikim upitima.

1.1. Baze podataka

Baze podataka predstavljaju vii nivo rada sa podacima u odnosu na klasine
programske jezike. Re je o tehnologiji koja je nastala sa namerom da se uklone slabosti
tradicionalne automatske obrade podataka iz 60-tih i 70-tih godina 20. veka. Ta tehnologija
osigurala je veu produktivnost, kvalitet i pouzdanost u razvoju aplikacija koje se svode na
memorisanje i pretraivanje podataka u raunaru.
Baza podataka je skup meusobno povezanih podataka, snimljenjih u memoriji
raunara. Podaci su istovremeno dostupni raznim korisnicima i programima. Ubacivanje,
promena, brisanje i itanje podataka obavlja se posredstvom zajednikog programa. Korisnici
i aplikacije pritom ne moraju poznavati detalje fizikog prikaza podataka, ve se referenciraju
na logiku strukturu baze. Sistem za upravljanje bazom podataka (Database Management
System - DBMS) je veza sa bazom podataka. On oblikuje fiziki prikaz baze u skladu sa
traenom logikom strukturom. Takoe, on obavlja u ime klijenata sve operacije sa
podacima. Dalje, on je u stanju da podri vie baza, od kojih svaka moe imati svoju logiku
strukturu, ali u skladu sa istim modelom. Isto tako, brine se za sigurnost podataka, i
automatizuje administrativne poslove s bazom. Podaci u bazi su logiki organizovani u
skladu s nekim modelom podataka. Model podataka je skup pravila koja odreuju kako moe
izgledati logika struktura baze. Model ini osnovu za projektovanje i implementiranje baze.
Dosadanji DBMS-i obino su podravali neki od sledeih modela:
Relacioni model. Zasnovan na matematikom pojmu relacije. I podaci i veze izmeu
podataka prikazuju se tabelama.
Mreni model. Baza je opisana usmerenim grafom. vorovi su tipovi zapisa, a lukovi
definiu veze izmeu tipova zapisa.
Hijerarhijski model. Specijalni sluaj mrenog. Baza je predstavljena jednim
stablom ili skupom stabala. vorovi su tipovi zapisa, a hijerarhijski odnos nadreeni-
podreeni izraava veze meu tipovima zapisa.
Objektni model. Inspirisan je objektno-orijentisanim programskim jezicima. Baza je
skup objekata koji se sastoje od svojih internih podataka i metoda (operacija) za rukovanje
s tim podacima. Svaki objekat pripada nekoj klasi. Izmeu klasa se uspostavljaju veze
nasleivanja, agregacije, odnosno meusobnog korienja operacija.
Zavrni rad ore Zeevi

5
Hijerarhijski i mreni modeli bili su u uptrebi u 60-tim i 70-tim godinama 20. veka.
Od 80-tih godina pa sve do danas preovladava relacioni model. Oekivani prelaz na objektni
model za sada se nije desio, tako da kada danas priamo o bazama podataka ustvari priamo
o relacionim bazama.
1.2. Znaaj zatite podataka u bazama

Bezbednosni propusti u raunarskom sistemu mogu uticati na poverljivost, integritet ili
dostupnost sistema i podataka. Gubitak poverljivosti servera baze podataka podrazumeva
neovlaen pristup podacima, gubitak integriteta podrazumeva neovlaenu izmenu ili
brisanje podataka u bazi, a gubitak dostupnosti podrazumeva da servisi baze podataka nisu
dostupni. U zavisnosti od namene sistema, gubitak jednog od ovih elemenata moe izazvati
veu ili manju tetu. Korienje Interneta je postalo svakodnevnica za dananje drutvo.
Internet kupovina je postala veoma popularna, a elektronsko poslovanje je praktino izmenilo
poslovanje iz korena.
Relacione baze podataka igraju veoma vanu ulogu u elektronskom poslovanju. Ogromne
koliine podataka se prikupljaju, skladite i obrauju, to zahteva monu podrku baze
podataka. Koliina podataka se stalno poveava, potreba za veom brzinom obrade i pretrage,
tj. izvlaenja korisnih informacija se stalno poveava.
Ako analiziramo jednu aktivnost kupovine na Internetu, a ovaj model se moe primeniti i
na skoro svaku aktivnost u elektronskom poslovanju, a posebno obratimo panju na tok
podataka, videemo da se mogui sigurnosni rizici mogu nai na jednom od dva mesta:
1. Sigurni prenos podataka. Kada korisnik poalje svoje poverljive podatke (broj
kreditne kartice, PIN broj,...) kroz Internet pretraiva ili drugu vrstu programa, ti
podaci bi trebalo da ostanu poverljivi du celog puta, tj. kroz Intenret mreu,
aplikacioni server, pa sve do baze podataka gde e biti snimljeni.
2. Sigurno skladietenje i pristup podacima. Kada podaci dou do baze podataka,
potrebno ih je zatititi na takav nain da podacima mogu da pristupe samo osobe koje
su prole kroz proces provere identiteta i provere prava pristupa.
Problem sigurnog prenosa podataka je dosta dobro obraen i podran od veine
proizvoaa programa. Standardne zatite pri prenosu, kao to su SSL (Secure Socket Layer)
i TLS (Transport Layer Security), su podrani u veini Internet pretraivaa i lako se
ugrauju u nove programe. Meutim, kada podaci dou do baze, ne postoji efikasna zatita
od neovlaenog pristupa.
Iako mehanizam kontrole pristupa postoji skoro isto toliko koliko i same baze
podataka, sigurnost baze se uzimala u obzir samo ako se za to pojavi potreba, recimo kada su
podaci ve kompromitovani. Ovo je verovatno posledica vie faktora:
Zavrni rad ore Zeevi

6
Performanse baze podataka. Koliko god da baza brzo obrauje podatke
uvek postoji potreba da se obrada ubrza, tako da uvoenje procedura u baze
koje bi usporile obradu, se esto ne razmatraju, ak su i nepoeljne.
Pozicija baze podataka u raunarskoj mrei. Standardno, baze podataka
nisu dostupne sa Interneta i pristup iz unutranje raunarske mree je
ogranien, pa se smatra da je rizik od ugroavanja sigurnosti mali.

1.3. Zatita baza podataka

Osnovna sigurnosna komponenta u bazama podataka je upravljanje korisnicima.
Potrebno je napraviti korisnika za svakoga ko eli da pristupi resursima baze podataka. Sam
postupak kreiranja korisnika je trivijalan, ali upravljanje korisnicima, posebno u velikim
sistemima sa puno promena, je teak posao.
Administrator baze podataka (u nastavku teksta DBA
1
) je osoba koja je zaduena za
kreiranje, izmenu i brisanje korisnikih naloga. On kreira korinika, odreuje mu nain
provere identiteta, recimo korienjem lozinke. U ovom procesu se javlja prvi sigurnosni
problem koji emo pokazati na primeru
2
.
DBA kreira korisnika Marko.

Sada tabela sa korisnicima sadri novi red.

Slika 1 Red u tabeli koji sadri loinku za korisnika

Korisnika lozinka je smetena u tabelu u ifrovanom obliku. DBA sada moe da
preuzme Markov identitet, bez iijeg znanja, pratei sledee korake:

1
Skraenica u engleskom jeziku za Database Administrator, u prevodu administrator baze podataka
2
Svi primeri u ovomradu su izvedeni u MySQL bazi podataka
CREATE USER MARKO
I DENTI FI ED BY ' MARKOVALOZI NKA' ;
Zavrni rad ore Zeevi

7
1. Izvri upit nad bazom kako bi dobavio ifrovan oblik Markove lozinke,
*8DE0D5950A3F06F3A5D537720EC02D81C70B172E.

2. Izmeni Markovu ifru izvravajui sledei upit:


3. Pristupi sistemu kao korisnik Marko. Izvri izmene za koje Marko ima prava.
4. Vrati Markovu lozinku na staru vrednost, izvravajui sledei upit:


Kontrola pristupa predstavlja glavni sigurnosi mehanizam u bazama podataka. On se
bazira na pojmu prava. Svaki korisnik moe pristupiti bilo kom objektu baze ako za to
poseduje odgovarajua prava. DBA ima prava nad svim objektima u bazi, pa moe u bilo
kom trenutku i bez bilo ijeg znanja da ta prava izmeni. Isto tako moe da uzme identitet
drugog korisnika i da bez njegovog znanja napravi izmene u sistemu, za ta e snositi
posledice korisnik iji je identitet ukraden. Osim korisnika koji su ljudi, esto se u bazama
podataka mogu nai razni sistemski i aplikativni korsnici, ije naloge koriste aplikacije koje
pristupaju bazi podataka.
ifrovanje u bazama podataka je loe podrano. U ogromnoj veini sluajeva podaci
se smetaju kao ist tekst. Kao posledica ovog stanja, sigurnost poverljivih podataka
korisnika zavisi od operativnog sistema koje je podloga bazi podataka, a on esto moe da
bude nedovoljno zatien. Pristup osetljivim podacima moe da kontrolie operativni sistem
ili sistem za upravljanje bazom podataka. U oba sluaja, podaci su nedovoljno zatieni. Dva
su naina da se ovaj problem prevazie. Prvi je da se podaci ne dre na serveru na kom se
nalazi sistem baze podataka, a drugi da se ifruje ceo sadraj tvrdih diskova na kojima se
nalaze podaci. I jedan i drugi nain dovode do javljanja novih problema.
Ukoliko posmatramo administraciju baze podataka, administrator igra veoma vanu
ulogu. On vodi rauna da baza ima odreene performanse, da baza ima rezervne kopije,
reava probleme sa pristupom podacima. Ukoliko posmatramo sigurnost baze podataka i
privatnost podataka u njoj, administrator je osoba koja ima uvid u svaije podatke, koji mogu
biti i line prirode. U odreenim sluajevima (npr. zdravstveni kartoni u bazi podataka), vie
nije pitanje poverenja koje se daje administratoru, ve je i stvar principa, pa i krenja zakona
o poverljivosti podataka.

UPDATE USER
SET PASSWORD=PASSWORD( ' DRUGALOZI NKA' )
WHERE USER = ' MARKO' ;


UPDATE USER
SET PASSWORD=' *8DE0D5950A3F06F3A5D537720EC02D81C70B172E'
WHERE USER = ' MARKO' ;

Zavrni rad ore Zeevi

8
2. Predhodna istraivanja

U ovom poglavlju emo razmotriti principe koje primenjuju veliki proizvoai baza
podataka kao to su Oracle i Microsoft. Takoe, ukazaemo na slabosti koje mogu imati
ovakvi sistemi.
2.1. Microsoft
Najnoviji proizvod za zatitu baza podataka, firme Microsoft, je Transparent Data
Encryption
3
(skraeno TDE). TDE se pojavio sa verzijom SQL servera 2008. Kao to je
prikazano na slici, Microsoft prua est razliitih scenarija za zatitu podataka. Svaka od
strelica prikazuje jedan od naina za ifrovanje:

Slika 2 ema za zatitu podataka u MS SQL Serveru

3
Transparent data encryption je engleski termin koji se ne moe bukvalno prevesti na srpski jezik. On
oznaava zatitu podataka bez dodatnih akcija korisnika.
Zavrni rad ore Zeevi

9
Korienje lozinke za direktno ifrovanje podataka.
Korienje dva simetrina kljua za ifrovanje podataka, od kojih jedan slui
za zatitu drugog, a drugi se titi lozinkom.
Sledea dva naina su u sutini ista, a rade tako to se za zatitu podataka
koristi simetrini algoritam, klju se titi korisnikim sertifikatom ili
asimetrinim algoritmom za ifrovanje, a asmetrini klju, odnosno, sertifikat
se titi sa lozinkom.
TDE koristi simtrini algoritam za ifrovanje podataka, korisnike sertifikate
za zatitu kljua za simetrino ifrovanje, Database Master Key (skraeno
DMK) za zatitu sertifikata, i konano DMK se titi lozinkom.
Poslenji nain je da se podaci ifruju simetrinim algoritmom, a da se za
zatitu kljueva simetrinog algoritma koristi reenje koje nije u samom SQL
serveru. Onaj nain ne podrava ifrovanje na nivou kolona.
Prvih pet naina ifrovanja se svodi na korienje lozinke, tako da je sigurnost celog
sistema loa. Poslednji nain se moe iskoristiti za graenje dobrog sistema zatite ali zahteva
dodtne sisteme za upravljanje kljuevima.
Dodatni problem je injenica da podaci koji su u upotrebi, nisu zatieni, ak se,
ukoliko postoji manjak slobodne memorije, mogu i upisati na tvrdi disk u otvorenom tekstu.

Zavrni rad ore Zeevi

10
2.2. Oracle
Oracle, ima proizvod za ifrovanje podataka u bazi koji se, takoe, zove Transparent
Data Encryption
4
(skraeno TDE). Ovaj proizvod je uveden prvi put u verziji Oracle
Database 10g release 2 (10.2).

Slika 3 Dijagramifrovanja u Oracle bazi
Postoje dve opcije pri ukljuenju ifrovanja podataka. Podaci se mogu ifrovati na
nivou kolone i na nivou tablespace
5
. Za razliku od Microsoft SQL Servera, Oracle nudi samo
jednu opciju za proces iforvanja podataka. Podaci se ifruju simetrinim algoritmom,
kljuevi za simetrian algoritam se tite sistemom javnih i tajnih kljueva, dok se ovi kljuevi
tite drugim parom javnih i tajnih kljueva koji se nalaze van baze podataka.
Ovo je bolji pristup zatiti podataka. Jedina zamerka je to su svi kljuevi za zatitu
podataka na kraju zatieni jednim Master
6
kljuem. Ako je Master klju kompromitovan, svi
podaci u bazi ostaju nezatieni.


4
Transparent data encryption je engleski termin koji se ne moe bukvalno prevesti na srpski jezik. On
oznaava zatitu podataka bez dodatnih akcija korisnika.
5
Tablespace, je mesto gde Oracle baza smeta podatke. Tablespace se sastoji od datoteka, i nezavisan
je od lokacije datoteke ili operativnog sistema na kombaza radi.
6
Master klju je est naziv za klju pomou koga se moe otkljuati sve to se titi.
Zavrni rad ore Zeevi

11
3. Metodoloki koncept

3.1. Predmet istraivanja
Predmet ovog istraivanja je metod zatite podataka u bazama pomou ifrovanja.

3.2. Cil j i zadaci istraivanja
Cilj ovog istraivanja je pronalaenje mehanizma za ifrovanje podataka u bazama.
Mehanizam za ifrovanje mora biti realizovan tako da:
Koristi standardne algoritme za ifrovanje;
Koristi alate koji ve postoje, kako bi se smanjila cena implementacije;
Prui mogunost ifrovanja na nivou kolone;
Prui mogunost ifrovanja na novou grupe korinika;
Prui mehanizam za ukljuivanje i iskljuivanje ifrovanja u bilo kom
trenutku;
Ne trai izmene u postojeim sistemima za upravljanje bazama podataka;
Rei probleme postojeih sistema za ifrovanje;
Bude lako primenljiv u postojeim okruenjima.

3.3. Istraivake hipoteze

3.3.1. General na hipoteza

Osnovna hipoteza ovog rada je pretpostavka da je mogue napraviti mehanizam za
zatitu podataka u sistemima za upravljanje bazama podataka, koji je nezavisan od
proizvoaa.
3.3.2. Posebne hipoteze

Mehanizam mora biti, pre svega, primenljiv u realnom okruenju, i mora koristiti
proverene standardne algoritme za ifrovanje. Da bi ovaj mehanizam bio primenljiv mora
ispuniti dodatne uslove koji su postavljeni u zadacima istraivanja.
Zavrni rad ore Zeevi

12
J o jedna od pretpostavki je da se ovakav mehanizam moe napraviti bez ulaganja u
skupe programe i pakete programa koje nude svetski proizvoai, to e biti dokazano kroz
detaljan opis jednog ovakvog mehanizma.

3.4. Metode istraivanja i tok istrivakog procesa

Sloenost predmeta istraivanja zahteva primenu vie naina istraivanja. Prikupljanje
podataka e biti relizovano:
Analizom literature;
Sekundarnom analizom dobijenih rezultata ranijih istraivanja;
Analizom postojeih mehanizama za zatitu podataka;
Analizom problema od strane autora.
Nakon prikupljanja potrebne koliine podataka, autor e metodama analize,
dedukcije i apstrakcije pokuati da dokae da su postavljene hipoteze tane.

Zavrni rad ore Zeevi

13
4. Rezultati istraivanja
4.1. Model zatite podataka
Osim ugraenih naina zatite podataka u bazama, postoje sluajevi kada je potrebna
dodatna zatita. Model koji e biti predstavljen u ovom poglavlju reava sigurnosne probleme
koji su navedeni u predhodnom tekstu. Kako bi predstavili ovaj model potrebno je definisati
nekoliko termina.
4.1.1. Bezbedno radno okruenj e(SOE
7
)
Operacije koje ukljuuju rad sa tajnim podacima potrebno je izvravati u okruenju
koje nee dovesti do toga da podaci budu ugroeni zbog samog okruenja, tj. koje nee imati
sigurnosne propuste. Dobar primer za ovakvo okruenje je smart kartica. Korisniki privatni
kljuevi su na kartici i nikada je ne naputaju u toku korienja. Ukoliko je potrebno izvriti
neku operaciju nad podacima, operacija se izvrava na kartici a samo rezultat naputa karticu.
Iako je baza podataka dosta sloeniji sistem od smart kartice, ipak se jezgro baze
moe smatrati prilino bezbednim radnim okruenjem, a sigurnosni propusti nastaju slabim
podeavanjem.
4.1.2. Sigurnosni dnevni k
Svi podaci, ukljuujui i one o korisnikim nalozima i pravima korisnika (sistemski
katalog), nalaze se u tabelama baze podataka. Kao i ostali podaci oni mogu biti promenjeni
direktnim izvravanjem upita od strane administratora baze podataka.
Sigurnosni dnevnik je slian sistemskom katalogu osim to izmene u sigurnosnom
dnevniku moe da izvri samo proces baze podataka (za koji smo rekli da je bezbedno radno
okruenje). To praktino znai da se korisniki nalozi mogu menjati samo pozivom
sistemskih procedura.
Sigurnosni dnevnik se moe kreirati na vie naina. Moe biti unutar baze podataka u
vidu sistemskih procedura, ali moe biti kreiran i kao aplikacija koja se nalazi van baze
podataka ali u bezbednom radnom okruenju. Manje sloen nain podrazumeva kreiranje
dnevnika unutar baze podataka i njega emo upotrebiti u ovom radu.


7
Secure Operating environment(SOE)
Zavrni rad ore Zeevi

14
4.1.3. Skraeni nazivi funkciij a

Kako bi u kasnijem tekstu izbegli pojanjavanje osnovnih funkcija ifrovanja, i time
se nepotrebno udaljili od sutine problema, sada emo ih definisati:
Funkcija E predstavlja operaciju ifrovanja. Funkcija D predstavlja operaciju
deifrovanja. Par funkcija (D,E) se moe odnositi na simetrine algoritme za ifrovanje, kao
to su 3DES i AES, kao i na asimtrine algoritme za ifrovanje, kao to je RSA. Otvoreni
tekst emo obeleavati sa slovom m, ifrovani tekst sa slovom c, a kljueve za ifrovanje sa
slovom K.
4.2. Kontrola korisnika

Da bi pristupio podacima, korisnik mora imati nalog u bazi. Administratora baze je
zaduen za kontrolu korisnikih naloga. On kreira i brie korisnike, odreuje nain njihove
provere identiteta i prava pristupa resursima baze. Postoji vie naina provere identiteta,
putem lozinke, putem PKI
8
infrastrukture, Kerberos protokola, itd. Sve metode se svode na
tajni podatak koji je poznat samo korisniku.
Potrebno je da jedino korisnik ima pravo izmene svog naloga. Na primer, potrebno je
da jedino korisnik moe da promeni svoju lozinku, drugi korisnici (ili administrator) bi to
mogli da urade samo ako im je dodeljeno odreeno pravo. U dananjim sistemima za
upravljanje bazom podataka, administrator moe promeniti lozinku korisniku na njegov
zahtev, ali i kada korisnik to nije zahtevao. Administrator, u stvari, moe da promeni lozinku
korisniku bez iijeg znanja, to je opasan sigurnosni propust.
4.3. ifrovanje i upravljanje kljuevima

Najvei problem pri korienju ifrovanja je upravljanje kljuevima. Sami algoritmi
su dovoljno dobri. Kada priamo o ifrovanju u bazama podataka, dve teme je potrebno
obraditi kako bi se ifrovanje ugradilo u bazu podataka:
1. Potrebno je da korisnik ima mogunost da odredi koji e podaci biti ifrovani
pre nego to te podatke snimi u bazu.
2. Potrebno je da korisnik ima mogunost (posredno ili neposredno) da odredi
klju kojim e se podaci ifrovati.

8
Public Key Infrastructure provera identiteta zasnovana na sertifikatima
Zavrni rad ore Zeevi

15
Posmatrajui drugu stavku, ceo problem ifrovanja u bazi se svodi na upravljanje
kljuevima. Da bi reili problem iz take jedan potebno je kreirati proceduru za kreiranje
tabele koja e omoguiti da korisnik naznai kolone koje eli da ifruje:

Izvravajui ovu proceduru korisnik je naznaio da kolona broj_kartice treba da bude
ifrovana (kljuna re ENCRYPT), i server baze podataka e ifrovati podatke pre nego to ih
upie u bazu. Da bi server ifrovao podatke potrebno je da zna kojim kljuem e podatke
ifrovati a kasnije i deifrovati. Polje UPDATE koje se postavlja na vrednost 1 slui za
kontrolu prava nad ifrovanjem kolone.
Da bi imali evidenciju o kolonama koje su ifrovane, potrebno je da kreiramo novi
sigurnosni katalog. Ovaj katalog bi sadrao polja id_korisnika, ime_tabele, ime_kolone,
izmena, izmenu_izvrsio. Na primer:
( mar ko, kupac, br oj _kar t i ce, 1, mar ko)

Pretpostavimo da je korisnik sa korisnikim (i linim) imenom Marko izvrio
proceduru kreiranja tabele. Samo postojanje reda u sigurnosnom katalogu znai da e kolona
u tabeli biti ifrovana. Polje izmena e oznaiti prava nad ovim zapisom i moe imati
vrednosti 0, 1 ili 2. Vrednost 0 znai da niko ne moe da menja ovaj zapis pa ni kreator
zapisa, 1 znai da zapis moe da menja samo kreator zapisa, tj. vlasnik tabele koja se nalazi u
zapisu i 2 znai da zapis moe da menja bilo ko, ko ima prava nad tabelom koja se nalazi u
zapisu. U primeru koji smo naveli, samo Marko moe da menja zapis koji je kreirao.
Pre nego to bi neko pokuao da promeni tabelu, baza podataka bi proverila
sigurnosni dnevnik. Ukoliko ne postoje prava za promenu, izmena bi bila odbijena i pokuaj
bi bio upisan u dnevnik (log) baze podatka. Kako bi ovaj sistem radio potrebno je kreirati i
proceduru koja bi bila u mogunosti da iskljui ifrovanje nad odreenom kolonom tabele:

Ovde je potrebno razmotriti jo jedan sluaj. Sluaj kada se promeni kolona u tabeli,
bilo da je bila ifrovana pa je ifrovanje ukinuto, bilo da nije bila ifrovana pa je ifrovanje
postavljeno. Dva su mogua reenja, podaci koji su u tabeli ostaju neporomenjeni (ifrovani
ili neifrovani) i podaci u tabeli se menjaju. U ovom modelu emo primeniti sluaj kada se
stari podaci menjaju, jer to smanjuje kompleksnost u voenju sigurnosnog dnevnika.

CREATE TABLE KUPAC
( I D I NTEGER PRI MARY KEY
I ME VARCHAR( 30) ,
BROJ _KARTI CE VARCHAR( 16) ENCRYPT UPDATE 1
) ;
ALTER TABLE KUPAC
MODI FY BROJ _KARTI CE DROP ENCRYPT;
Zavrni rad ore Zeevi

16
4.3.1. ifrovanje sa sistemom javnih kljueva

Da bi uspeno koristili model ifrovanja koristei sistem javnih kljueva moramo
pretpostaviti da ve postoji server koji prua uslugu direktorijuma
9
(na primer LDAP
10

server) kojeg sistem za upravljanje bazom podataka moe kontaktirati po potrebi. U ovom
sluaju baza podataka bi kontaktirala server direktorijuma kako bi pribavila sertifikat
11
za
odreenog korisnika. Zajedno sa javnim kljuem korisnika u direktorijumu se moe nalaziti i
privatni klju korisnika koji je ifrovan lozinkom korinika, ali je bolja praksa da privatni
klju korisnika bude na smart kartici i uz korisnika.

APLIKACIONI
SERVER
KLIJ ENT
SERVER
DIREKTORIJ UMA
Server baze podataka
Sigurna veza(SSL,TLS)

Slika 4 Model zatite podataka u bazi - potrebni serveri


9
Prevod od poznatijeg termina na engleskomjeziku - Directory service. Kao to mu samo ime kae
prua uslugu centralnog direktorijuma (imenika) sa podacima o korisnicima. Meu podacima se moe nai i
korisniki sertifikat.
10
LDAP je skraenica od Lightweight Directory Access Protocol. LDAP je protokol koji koristimo
kako bi vrili upite i menjali podatke na serveru za usluge direktorijuma.
11
Sertifikat je uobiajen naziv sa sertifikat o posedovanju i validnosti javnog kljua, kojim telo kojem
se veruje, a nezavisno je od uesnika u komunikaciji, potvruje ispravnost javnog kljua.
Zavrni rad ore Zeevi

17
Na primer, korisnik Marko poseduje sertifikat CERT
A
u serveru za direktorijum. Taj
sertifikat potvruje verodostojnost javnog kljua PK
A
, i u isto vreme PK
A
ima odgovarajui
privatni klju SK
A
. U serveru direktorijuma bi bio upisan ovakav skup podataka:
(marko, CERT
A
)
Kada Marko eli da izvri sledei upit:

Server baze podataka e izvriti upit nad serverom za direktorijum i pribaviti sertifikat
CERT
A
a samim tim i javni klju PK
A
. PK
A
e biti upotrebljen kako bi se zatitio radni klju
K i time obazbedilo da samo korisnik koji ima privatni klju SK
A
moe da deifruje radni
klju K i samim tim da jedini proita podatke koji su zatieni kljuem K. Radni klju K
generie baza podataka i moe se uvati u bazi u ifrovanom obliku ili se moe snimiti u
server direktorijuma. Zapis bi izgledao ovako:
(marko, kupac, broj_kartice, E(PK
A
, K))
Kada Marko eli da ifruje novu kolonu, moemo primeniti jedan od dva sluaja. Prvi
sluaj je da baza koristi isti klju K koji je korien za ifrovanje prve kolone ili da generie
novi klju K
1
, njega ifruje Markovim javnim kljuem i takvog ga snimi u server
direktorijuma.
Kada Marko eli da pristupi podacima koji su ifrovani potrebno je da izvri sledeu
proceduru:

Drugim reima, Marko mora da eksplicitno navede svoj privatni klju kako bi
pristupio podacima. Sistem za upravljanje bazom podataka e prvo dohvatiti ifrovani radni
klju sa servera za direktorijum. Zatim e iskoristiti privatni klju koji je Marko naveo u
upitu kao bi deifrovao radni klju K, onda e iskoristiti radni klju K kako bi deifrovao
podatke i vratio Marku rezultat.
Slina procedura se primenjuje i kada Marko eli da upie podatak u bazu:


I NSERT I NTO KUPAC VALUES
(100,PERA PERI,1112221112)
;
SELECT BROJ _KARTI CE
FROM KUPAC
WHERE I D_KUPCA = 100 PRI VATE_KEY SK
A
;
I NSERT I NTO KUPAC VALUES
( 200, ZORAN J OVANOVI C, 123456789) PRI VATE_KEY SK
A
;
Zavrni rad ore Zeevi

18
4.3.2. ifrovanj e na ni vou grupe kori sni ka

Podaci u bazi podataka esto, ako ne i uvek, treba da budu dostupni veem broju
korisnika. Do sada smo u radu bili skoncentrisani na zatitu podataka za pojedinane
korisnike a u nastavku emo razmotriti model gde grupa korisnika treba da pristupi istim
ifrovanim podacima.
Recimo, da Marko eli da kreira tabelu i u njoj zatiti odreenu kolonu. Sada je
potrebno da i Ana pristupi i proita te podatke. Najlaki nain bi bio da Marko svoju lozinku,
ili privatni klju da Ani na korienje, ali se to kosi sa osnovnom sigurnosnom politikom koja
zahteva da samo korisnik zna svoju lozinku.
Da bi omoguili ifrovanje, i deifrovanje na nivou grupe, moramo generalizovati
upotrebu javnih kljueva.
Sada, kada Marko kreira tabelu, mora prvo da navede listu korinika kojima e
omoguiti da ifruju i deifruju podatke. To e uraditi kroz novu proceduru koja bi izgleda
ovako:

USER_LIST je lista korisnika koji mogu da pristupe ifrovanim podacima. Potrebno
je da proirimo sigurnosni katalog, tako da on sada sadri informacije o grupi korinika. Novi
sigurnosni katalog bi sada sadrao ista polja, samo to bi za svakog korisnika postojao po
jedan red. Sigurnosni katalog, za predhodni primer, bi izgledao ovako:
(marko, kupac, broj_kartice,1,marko,1)
(marko, kupac, broj_kartice,1,ana,1)
(marko, kupac, broj_kartice,1,mika,1)


Sada, kada Marko kreira ovu tabelu, radni klju K e biti ifrovan tri puta i to sa
Markovim, Aninim i Mikinim javnim kljuevima. U server direktorijuma e biti upisani
sledei podaci:

CREATE TABLE KUPAC
( I D I NTEGER PRI MARY KEY
I ME VARCHAR( 30) ,
BROJ _KARTI CE VARCHAR( 16) ENCRYPT USER_LI ST ANA, MI KA UPDATE 1
) ;
Zavrni rad ore Zeevi

19
U delu za definisanje korisnika :
(marko, CERT
A
)
(ana, CERT
B
)
(mika, CERT
C
)

U delu za uvanje radnih kljueva:
(marko, kupac, broj_kartice, E(PK
A
, K))
(ana, kupac, broj_kartice, E(PK
B
, K))
(mika, kupac, broj_kartice, E(PK
C
, K))

Kada Ana eli da pristupi zatienim podacima izvrie sledei upit:

Baza podataka e proveriti da li se Ana nalazi u sigurnosnom katalogu za tabelu
kupac i kolonu broj_kartice, ako jeste baza e izvriti upit nad serverom direktorijuma i
dobaviti radni klju K koji je ifrovan sa Aninim javnim kljuem E(PK
B
,K). Iskoristie Anin
privatni klju koji je ona navela u upitu SK
B
i deifrovati radni klju K. Sada e radni klju
biti upotrebljen kako bi se deifrovali podaci. Podaci e onda biti vraeni Ani.
Uestalo itanje sa servera direktorijuma bi verovatno prilino usporilo izvravanje
upita nad bazom. Dobra ideja je da se zatieni radni kljuevi dre u privremenoj memoriji
(cache memoriji) radi poboljanja performansi.


SELECT BROJ _KARTI CE
FROM KUPAC
WHERE I D_KUPCA = 100 PRI VATE_KEY SK
B
;
Zavrni rad ore Zeevi

20
4.4. ifrovanje podataka u MySQL bazi

U ovom poglavlju emo prikazati kako se opisani model primenjuje u realnom
okruenju. Svi alati koji su korieni su otvorenog koda i besplatni i ine sloeni sistem kojim
se titi baza podataka. Dok budemo detaljno opisivali postupak primene teorijskog modela,
koristiemo i praktian primer kako bi rad sistema bio jasniji.
Baza podataka koju emo zatititi je MySQL. Osnovni deo mehanizma koji e biti
opisan je aplikacija MySQL-Proxy. MySQL-Proxy je pozicioniran izmeu klijenta i baze,
tako da presree upite i po potrebi ih menja. Sve promene, u upitima ili u rezultatima upita, se
vre preko programa koji je napisan u programskom jeziku Lua.


Slika 5 Uproena ema sistema za zatitu baze podataka
4.4.1. Dodatne komponente
Kako bi sistem uspeno podrao opisani teorijski model, u opisano reenje moramo
uvesti jo i server direktorijuma, CA telo i sigurnosni katalog.






Slika 6 Model sistema za zatitu podataka u bazama
4.4.2. Sigurnosni katalog
Sigurnosni katalog se sastoji iz dve tabele koje se nalaze na posebnoj bazi podataka i
ija je izmena mogua samo iz programa Proxy aplikacije.

Klijentska
aplikacija
Proxy
Lua program
Baza
Proxy
Lua program
CA telo
OpenLDAP
Klijentska
aplikacija
Baza
Sigurnosni
Katalog
Zavrni rad ore Zeevi

21

Slika 7 Tabele u Sigurnosnomkatalogu
Tabela ENC_COLUMNS sadri imena kolona koje su ifrovane, kao i imena tabela
kojima pripadaju, informaciju o korisniku koji je kreirao tabelu, pravima nad kolonom i
informaciju o poslednjoj promeni. Tabela ima sloeni primarmi klju koji se sastoji od kolona
table_name i column_name. Sva polja u ovoj tabeli su tekstualna.

Slika 8 Struktura tabele ENC_COLUMNS
Tabela ENC_KEYS sadri sesijske kljueve koji su ifrovani sa javnim kljuevima
korisnika koji imaju pravo ifrovanjai i deifrovanja nad odreenim tabelama. Tabela ima
sloeni primarmi klju koji se sastoji od kolona table_name, column_name i username. Sva
polja u ovoj tabeli su tekstualna.

Slika 9 Struktura tabele ENC_KEYS

Zavrni rad ore Zeevi

22
4.4.3. Sertifikaci ono telo
Uloga sertifakionog tela u ovom sistemu je jasna i vana. Sertifikaciono telo izdaje
sertifikate i garantuje za njihov sadraj.
Za sertifikaciono telo koristimo programski paket OpenSSL i to njegovu komponentu
CA. OpenSSL je programski paket za kriptografiju, otvorenog koda, koji podrava sve
poznate algoritme za simetrino i asimetrino ifrovanje, heing
12
algoritme, rad sa
sertifikatima, itd.
Radi lakeg rada sa sertifikatima, koristiemo i dodatni program TinyCA. TinyCA je
grafiki alat za konfiguraciju CA komponente OpenSSL-a.

Slika 10 Tiny CA grafiko okruenje za CA komponentu OpenSSL-a



12
Haing je re engleskog porekla koja nema pravi prevod na srpski jezik. Radi se o jednosmernoj
funkcji koja se koristi za zatitu integriteta podataka. Za svaki ulazni parameter, bilo koje veliine, funkcija daje
jedinstveni izlaz fiksne duine.
Zavrni rad ore Zeevi

23
4.4.4. Server direktorij uma

Server direktorijuma je OpenLDAP. To je program koji razvija neprofitna firma The
OpenLDAP Foundation jo 1998. godine. Njegova uloga u ovom reenju je da korsniki
sertifikati, koji su kreirani od strane sertifikacionog tela, budu dostupni u svakom trenutku.

Slika 11 GQ, grafiko okruenje za pristup OpenLDAP serveru

Zavrni rad ore Zeevi

24
4.4.5. CREATE TABLE upi t
Pri kreiranju tabele, potrebno je da korisnik moe da navede kolone koje e biti
ifrovane kao i listu korisnika koji e imati pravo da itaju i upisuju ifrovane podatke. Ovi
podaci se kasnije mogu izmeniti Alter table upitom.
Kada klijent poalje upit za kreiranje tabele, Proxy server presree upit. Poto upit ne
odgovara standardnoj SQL sintaksi (ima nove kljune rei), proxy e iz upita izvui sledee
informacije:
koje kolone treba da budu ifrovane;
koji korisnici mogu da itaju ili menjaju kolone.
Na sledeem primeru emo bolje upoznati proces:

Iz ovog upita Proxy e pronai kljune rei ENCRYPT i UPDATE, i pomou njih
zakljuiti da je potrebno ifrovati kolone PIN i PUK, i da su prava 1, odnosno 2.
Na osnovu ovih informacija Proxy e izvriti sledei niz operacija:
Upit e izmeniti tako da on odgovara SQL sintaksi;
CREATE TABLE SI M(
I D I NT,
I ME VARCHAR( 30) ,
BROJ VARCHAR( 30) ,
STANJ E I NT,
PI N VARCHAR( 30) ,
PUK VARCHAR( 30) ,
) ;

Za svaku kolonu koja je ifrovana generisae klju za simetrino ifrovanje (sesijski
klju);

Za svakog korisnika kome je pravo dodeljeno e dohvatiti sertifikat sa njegovim
javnim kljuem;

CREATE TABLE SI M(
I D I NT,
I ME VARCHAR( 30) ,
BROJ VARCHAR( 30) ,
STANJ E I NT,
PI N VARCHAR( 30) ENCRYPT USER_LI ST [ MMI KI C PPETROVI C] UPDATE 1,
PUK VARCHAR( 30) ENCRYPT UPDATE 2
) ;
Zavrni rad ore Zeevi

25
Sa svakim javnim kjuem e ifrovati sesijski klju i takvog ga smestiti u sigurnosni
katalog;

+
Slika 12 ENC_KEYS tabela u sigurnosomkatalogu

Svaku kolonu koja treba da bude ifrovana e oznaiti u sigurnosnom katalogu;


Slika 13 ENC_COLUMNS tabela u sigurnosnomkatalogu
Izvrie upit kreiranja tabele u bazi podataka;


Slika 14 Tabela SIM u bazi podataka
Nakon izvravanja ove procedure, u bazi podataka e postojati eljena tabela, a u
sigurnosnom katalogu e postojati zapisi potRebni za njeno ifrovanje.

Zavrni rad ore Zeevi

26
4.4.6. INSERT INTO upi t

Pri ubacivanju podataka u tabelu, potrebno je da Proxy konsultuje Sigurnosni katalog
i da utvrdi koje kolone treba da ifruje i da bazi podataka prosledi izmenjen originalni upit:

Na osnovu dobijenih informacija iz upita Proxy izvrava sledee korake:
Konsultuje Sigurnosni katalog i proverava da li korisnik ima pravo da ifruje podatke
u koloni, ukoliko nema, akcija se prekida;
Konsultuje Sigurnosni katalog i saznaje koje kolone treba ifrovati;
Uzima, za kolone koje su ifrovane, iz Sigurnosnog kataloga, kljueve za simetrino
ifrovanje;
Upit modifikuje tako to umesto imena kolone dodaje funkciju aes_encrypt i kao
argumente prosleuje ime kolone i klju za simetrino ifrovanje;

Ovako izmenjen upit se onda prosleuje bazi na izvravanje.
Nakon izvravanja tabela u bazi izgleda ovako:

Slika 16 Zatieni podaci u bazi

I NSERT I NTO SI M VALUES(
1, " DJ ORDJ E ZECEVI C", "064- 123- 1234" , 10000, " 2222", "113456789"
) KEY " SK";
I NSERT I NTO KORI SNI K VALUES (
1, " DJ ORDJ E ZECEVI C" , " 111- 222",
AES_ENCRYPT ( " 1111", ' J SUMKMTNJ I ZQ17O/ KA2LBW==' )
)
Zavrni rad ore Zeevi

27
4.4.7. SELECT upit

Procedura izvravanja SELECT upita je slina izvravanju INSERT INTO upita.
Proxy prvo pronalazi kolone koje su ifrovane pa ih deifruje sa kljuevima iz Sigurnosnog
kataloga. SELECT upit moemo posmatrati iz vie uglova i u svakom pronai razliite
sluajeve koje je potrebno obraditi.
Ako SELECT upit posmatramo iz ugla prava
13
korisnika nad tabelom, korisniku koji
nema prava da ifruje e biti dozvoljeno da podatke proita, ali e podatci koje dobije biti u
ifrovanom obliku.
Ako posmatramo SELECT upit iz ugla izbora kolona, moemo pronai dva sluaja.
Sluaj kada korisnik navodi kolone koje mu trebaju i sluaj kada korisnik navodi specijalni
znak *
14
.
SELECT I ME, BROJ , STANJ E, PI N, PUK
FROM SI M KEY " SK";


Procedura za koju izvrava Proxy sastoji se iz sledeih koraka:
Proxy presree upit i ispituje kojem od dva tipa pripada;
Ukoliko je upit sa specijalnim znakom, Proxy e znak zameniti sa listom
kolona;
Iz liste kolona pronalazi one koje su ifrovane;
Iz Sigurnosnog kataloga dohvata kljueve za simetrino ifrovanje koji su
ifrovani sa korisnikim javnim kljuem;
Koristi korisniki privatni klju, koji je naveden u upitu, kako bi deifrovao
kljueve za simetrino ifrovanje;
Upit menja tako da imena kolona koje su ifrovane, zemenjuje sa funkcijom za
deifrovanje, koja za argumente ima ime kolone i klju sa kojim e rezultat
biti deifrovan;
Ovako izmenjen upit se alje bazi na izvravanje.

13
U ovom sluaju mislimo na prava za ifrovanje podataka, a ne na korisnika prava da izvri SELECT
upit.
14
Znak * u standardnomSQL jeziku zamenjuje imena svih kolona u tabli.
SELECT *
FROM SI M KEY " SK";
Zavrni rad ore Zeevi

28
Na primerima emo pokazati kako Proxy menja upite dok oni putuju od korisnika do
baze podataka. Pretpostavimo da korisnik zadaje upit:

On e biti analiziran, izmenjen i takav poslat bazi na izvravanje. Ovako izgleda
izmenjen upit:

Drugi primer pokazuje sluaj kada korisnik eli samo odreene kolone:

Nakon analiziranja i izmene upit se prosleuje bazi u sledeem obliku:

4.4.8. ALTER TABLE upit

Da bi se promenila osobina kolone iz ifrovane u neifrovanu ili obrunuto, koristi se
specijalni oblik upita ALTER TABLE. ALTER TABLE upit se mora zadati u obliku:

Ako se navodi kljuna re DROP, onda se ifrovanje iskljuuje sa kolone, a ukoliko
se ne navodi, ifrovanje se ukljuuje za kolonu.
Procedura ukljuivanja i iskljuivanja ifrovanja je slina i sastoji se iz sledeih
koraka:
Proxy proverava da li korisnik ima pravo da izmeni osobinu ifrovanja za
kolonu iz upita. Ukoliko nema, akcija se prekida;
Proxy presree upit i analizira koja kolona i iz koje tabele e biti izmenjena;
SELECT *
FROM SI M KEY " SK";
SELECT I D, I ME, BROJ , STANJ E, AES_DECRYPT( PI N, ' 8TVDRNDYZPR6PJ I AQRH5I A==' ) AS
PI N, AES_DECRYPT( PUK, ' ESROJ XC1H91PUALGMR7MLW==' ) AS PUK
FROM SI M
SELECT I ME, BROJ , STANJ E, PI N, PUK
FROM SI M KEY " SK";
SELECT I ME, BROJ , STANJ E, AES_DECRYPT( PI N, ' 8TVDRNDYZPR6PJ I AQRH5I A==' ) AS
PI N, AES_DECRYPT( PUK, ' ESROJ XC1H91PUALGMR7MLW==' ) AS PUK
FROM SI M
ALTER TABLE IME_TABELE
SET IME_KOLONE [ DROP] ENCRYPT KEY SK;
Zavrni rad ore Zeevi

29
Proxy kreira privremenu tabelu i u nju kopira tabelu iz koje se menja kolona;
Brie sve redove iz tabele koja se menja;
Ukoliko se ukljuuje ifrovanje za kolonu, u Sigurnosni katalog, Proxy
upisuje potrebne podatke (izvrava procedure kao kod kreiranja tabele sa
ifrovanim kolonama). Ukoliko se iskljuuje ifrovanje, iz Sigurnosnog
kataloga se briu redovi vezani za ovu kolonu;
Kopira privremenu tabelu u originalnu tabelu, ali tako da se kolona koja
predmet upita se ifruje ili deifruje prilikom kopiranja;
Privremena tabela se nakon toga brie.
Evo primera gde se sa kolone PUK iz tabele SIM uklanja iforvanje:

Tabela je, pre izvravanja upita, izgledala ovako:

Slika 16 Sadraj tabele pre izvravanja ALTER TABLE upita
Nakon izvravanja upita izgleda ovako:

Slika 17 Sadraj tabele nakon izvravanja ALTER TABLE upita


ALTER TABLE SI M
SET PUK DROP ENCRYPT KEY " SK";
Zavrni rad ore Zeevi

30
4.4.9. DELETE FROM upit

DELETE FROM upit je jednak standardnom delete upitu, nema specijanih rei i bez
izmena se izvrava na serveru baze podataka.

4.4.10. DROP TABLE upit

Brisanje tabele je najjednostavniji upit u ovom praktinom primeru. Pri brisanju
tabele proxy e iz upita izvui ime tabele koja se brie, a onda e uraditi sledee korake:
Brisanje zapisa iz tabela Sigurnosnog kataloga;
Izvravanje samo upita nad bazom, tj. brisanje same tabele u bazi.


4.5. Kli jentska aplikacija

Iako se ovaj rad ne bavi klijentskim delom sistema za zatitu, naveemo preduslove
koje treba da ispunjava klijentska aplikacija.
Aplikacija mora biti odgovorna za uspostavljanje sigurne veze sa bazom podataka i za
siguran pristup korisnikim kljuevima. Za sigurnu vezu se mogu koristiti neki od
standardnih naina kao to su IPSEC ili SSL, dok se za uvanje i pristup kljuevima mogu
koristiti Smart kartice ili USB Token ureaji.

DELETE FROM SI M
;
DROP TABLE SI M
;
Zavrni rad ore Zeevi

31
5. Zakljuak i primenljivost rezultata

U ovom radu opisali smo znaaj zatite podataka koji su smeteni u sistemima za
upravljanje bazma podataka. Opisali smo trenutne sigurnosne mehanizme, kao i njihove slabe
take koje dovode do sigurnosnih rupa. Navedeni su i naini na koje se slabosti baza
podataka mogu zloupotrebiti. Takoe istaknuto je koliko se malo vodi rauna o zatiti i koje
su opasnosti takve politike.
Kako bi prevazili ove propuste, predstavljen je model zatite koji se moe, uz malo
napora, primeniti u veini popularnih sistema za upravljanje bazama podataka. Model je
zasnovan na primeni ifrovanja, kao proverene i standardne mere zatite podataka. Vodili
smo rauna o injenici da su baze podataka ve dugo u upotrebi i da model mora biti takav da
se moe primeniti bez veih izmena u postojeim sistemima. Kako bi to postigli, model se
oslanja sa standardne servise kao to je server direktorijuma koji se moe lako povezati sa
postojeim sistemima za upravljanje bazama podataka.
U treem delu rada, opisana je i jedna praktina primena modela koji je opisan u radu.
Model je izveden koristei alate otvorenog koda i usmeren je ka zatiti MySQL baze
podataka.

Zavrni rad ore Zeevi

32
5.1. Primenljivost rezultata

Primenljivost rezultata opisanog sistema emo proveriti kroz dva testna scenarija, koji
u sebi sadre sve operacije koje su definisane.
Scenario 1
Scenario jedan se sastoji iz niza sledeih upita:


DROP TABLE KORI SNI K;

CREATE TABLE KORI SNI K (
I D I NT, I ME VARCHAR( 30) ,
BROJ _KARTI CE VARCHAR( 30) ,
PI N VARCHAR( 30) ENCRYPT UPDATE 1
) ;

I NSERT I NTO KORI SNI K VALUES
( 1, " DJ ORDJ E ZECEVI C", " 111- 222" , " 1111") KEY SK;

I NSERT I NTO KORI SNI K VALUES
( 2, " PETAR PETROVI C" , "111- 222", "1234" ) KEY SK;

I NSERT I NTO KORI SNI K VALUES
( 3, " MI KA MI KI C" , "111- 222", "2222" ) KEY SK;

SELECT * FROM KORI SNI K KEY " SK";

SELECT I ME, BROJ _KARTI CE, PI N FROM KORI SNI K KEY "SK" ;

ALTER TABLE KORI SNI K SET BROJ _KARTI CE ENCRYPT KEY "SK" ;

SELECT * FROM KORI SNI K KEY " SK";

DELETE FROM KORI SNI K;

DROP TABLE KORI SNI K;
Zavrni rad ore Zeevi

33
Rezultati scenarija 1:




Slika 18 Rezultati scenarija 1
Zavrni rad ore Zeevi

34

Slika 19 Rezultati scenarija 1

Slika 20 Rezultati scenarija 1
Zavrni rad ore Zeevi

35
Scenario 2
Scenario dva se sastoji iz niza sledeih upita:


DROP TABLE SI M;

CREATE TABLE SI M(
I D I NT, I ME VARCHAR( 30) ,
BROJ VARCHAR( 30) ,
STANJ E I NT,
PI N VARCHAR( 30) ENCRYPT USER_LI ST [ MMI KI C PPETROVI C] UPDATE 1,
PUK VARCHAR( 30) ENCRYPT UPDATE 2
) ;

I NSERT I NTO SI M
VALUES( 1, "DJ ORDJ E ZECEVI C" , " 064- 123- 1234", 10000, "2222" , " 113456789" ) KEY SK;

I NSERT I NTO SI M
VALUES( 2, "PETAR PETROVI C", "064- 123- 1234" , 10000, " 2222", "122456789") KEY SK;

I NSERT I NTO SI M
VALUES( 3, "MI KA MI KI C" , " 064- 123- 1234" , 10000, " 2222", "123456799") KEY SK;

SELECT * FROM SI M KEY "SK" ;

SELECT I ME, BROJ , STANJ E, PI N, PUK FROM SI M KEY "SK" ;

ALTER TABLE SI M SET PUK DROP ENCRYPT KEY " SK";

SELECT * FROM SI M;

DELETE FROM SI M;

DROP TABLE SI M;
Zavrni rad ore Zeevi

36
Rezultati scenarija 2:



Slika 21 Rezultati scenarija 2

Zavrni rad ore Zeevi

37


Slika 22 Rezultati scenarija 2



Slika 23 - Rezultati scenarija 2

Zavrni rad ore Zeevi

38
6. Literatura

[1] Pleskonji Dragan, Maek Nemanja, orevi Borislav, Cari Marko: Sigurnost u
raunarskim mreama, Mikroknjiga, 2007.

[2] CPNI Technical Note: Understanding Database Security,
www.cpni.gov.uk/Docs/TN_Database_Security_Final.pdf, poseeno 30.08.2010.

[3] Tanenbaum Andrew: Raunarske mree, Mikroknjiga, 2005.

[4] Robert Manger: Baze podataka, Sveuilite u Zagrebu, Prirodoslovno matematiki
fakultet Matematiki odjel, 2008.

[5] Securing Data at Rest: Developing a Database Encryption Strategy,
http://www.rsa.com/products/bsafe/whitepapers/DDES_WP_0702.pdf, poseeno
30.08.2010.

[6] Database Encryption in SQL Server 2008 Enterprise Edition,
http://msdn.microsoft.com/en-
us/library/cc278098%28v=sql.100%29.aspx#_Toc189384672, poseeno 30.08.2010.

[7] OpenSSL Command-Line HOWTO, http://www.madboa.com/geek/openssl/, poseeno
30.08.2010.

[8] HOWTO: Creating your own CA with OpenSSL,
http://sandbox.rulemaker.net/ngps/m2/howto.ca.html, poseeno 30.08.2010.

[9] Lua 5.1 Reference Manual, http://www.lua.org/, poseeno 30.08.2010.

[10] Getting started with MySQL Proxy, http://dev.mysql.com/tech-
resources/articles/proxy-gettingstarted.html, poseeno 30.08.2010.

[11] Encryption and Compression Functions,
http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html, poseeno
30.08.2010.

[12] OpenLDAP Software 2.4 Administrator's Guide www.ldap.org, poseeno
30.08.2010.

[13] Publishing digital certificates with LDAP, http://tldp.org/HOWTO/archived/LDAP-
Implementation-HOWTO/certificates.html, poseeno 30.08.2010.
Zavrni rad ore Zeevi

39
7. Dodaci

7.1. Korieni alati i software

[1] Mysql baza podataka verzije 5.0.77. Web adresa na kojoj se moe pronai
vie informacija je http://www.mysql.org.
[2] OpenLDAP server direktorijuma verzije 2.3.43. Web adresa na kojoj se moe
pronai vie informacija je http://www.openldap.org.
[3] CA server. OpenSSL PKI server komponenta. Web adresa na kojoj se moe
pronai vie informacija je http://www.openssl.org.
[4] Apache2 - Server aplikacija (web server). Web adresa na kojoj se moe
pronai vie informacija je http://www.apache.org.
[5] OpenSSL verzije 0.9.8e. Komponente za rad sa simetrinim i asimetrinim
algoritmima za ifrovanje. Web adresa na kojoj se moe pronai vie
informacija je http://www.openssl.org.
[6] Lua 5.1.4. Programski jezik za izmenu upita. Web adresa na kojoj se moe
pronai vee informacija je http://www.lua.org.
[7] Mysql-proxy 0.8.1. Aplikacija koja stoji izmeu baze podataka i korisnika.
Web adresa na kojoj se moe pronai vie informacija je
http://dev.mysql.com/downloads/mysql-proxy.
[8] CentOS 5.5. Operativni sistem na kom je instaliran ceo rad. Web adresa na
kojoj se moe pronai vie informacija je http://www.centos.org
7.2. Izvorni kod programa koji koristi Proxy baze podataka

Izvorni kod je pisan u programskom jezuku Lua.
r equi r e ( "l uasql . mysql ")
- - FUNCTI ONS
- - Funki ci j a za l oggi ng
f unct i on l og( msg)
l ocal l og_f i l e = ' / var / l og/ mysql - pr oxy- app. l og'
l ocal f h = i o. open( l og_f i l e, " a+")
f h: wr i t e( st r i ng. f or mat ( "%s %6d - - %s \ n", os. dat e( ' %Y- %m- %d
%H: %M: %S' ) , pr oxy. connect i on. ser ver . t hr ead_i d, t ost r i ng( msg) ) )
f h: f l ush( )
end

- - RSAencr ypt vr aca put anj u do dat ot eke sa si f r ovani mkj ucem
- - t ext j e kl j uc koj i j e pot r ebno si f r ovat i
f unct i on RSAencr ypt ( t ext , key)
l ocal f = i o. popen( " echo ' ". . t ext . . "' | openssl r saut l - encr ypt -
i nkey " . . key . . " - cer t i n | openssl enc - A - base64")
r et ur n f : r ead( )
end
Zavrni rad ore Zeevi

40

- - RSAdecr ypt vr aca kl j uc K za si met r i cno si f r ovanj e
- - t ext j e i me dat ot eke u koj oj se nal azi si f r ovani kl j uc
f unct i on RSAdecr ypt ( t ext , key)
l ocal f = i o. popen( " echo ' ". . t ext . . "' | openssl enc - A - base64 - d
| openssl r saut l - decr ypt - i nkey " . . key )
r et ur n f : r ead( )
end

- - dohvat a kor i sni cki ser t i f i kat koj i sadr zi j avni kl j uc. Funkci j a vr aca
i me f i l e- a u komse nal azi ser t i f i kat
f unct i on get LDAPKey( user )
i f ( user ==ni l ) t hen
l og( " Pr osl edj en user ni l u f unkci j u get l dapkey")
os. exi t ( 1)
end
l og( " Ul azi u f unkci j u za dohvat anj e ser t i f i kat a za kor i sni ka " . .
user )
l ocal i = 0
l ocal f i l ename = " / usr / l ocal / mast er r ad/ cer t / " . . user . .
" / cer t i f i cat e. pem"
l og( " Fi l ename: " . . f i l ename)
- - i o. popen( "umask u=r wx, g=r wx, o=r wx / t mp/ mysql - cer t / " . . user )
- - i o. popen( "r m- f ". . f i l ename)
- - i o. popen( "t ouch " . . f i l ename)
i o. popen( "echo ' ' > " . . f i l ename)
l ocal f h = i o. open( f i l ename, " w" )
l ocal f = i o. popen( " l dapsear ch - LLL - x - D
' cn=Manager , dc=mast er r ad, dc=or g' - w admi n ' ( ui d=" . . user . . " ) '
user Cer t i f i cat e" )
l ocal r ez = f : r ead( )
l ocal r ez = f : r ead( )
l ocal r ez = st r i ng. gsub( r ez, "user Cer t i f i cat e; bi nar y: : ", "" )
f h: wr i t e( "- - - - - BEGI N CERTI FI CATE- - - - - \ n" )
f h: wr i t e( r ez)
r epeat
l ocal r ez_komande = f : r ead( ) ;
- - l og( " kl j uc r ed po r ed: " . . t ost r i ng( r ez_komande) )
i f ( r ez_komande) t hen
r ez = "\ n" . . st r i ng. gsub( r ez_komande, " ", " ")
f h: wr i t e( r ez)
end
i = i + 1
unt i l ( i >25)
f h: wr i t e( "- - - - - END CERTI FI CATE- - - - - \ n" )
f h: f l ush( )
l og( " I zl azak i z f unkci j e za dohvat anj e ser t i f i kat a. . . " )
r et ur n f i l ename
end

- - gener at e128bi t gener i se kl j uc duzi ne 128 bi t a enkodovan u base64, koj i
ce se kor i st i t i za si f r ovanj e u bazi
f unct i on gener at e128bi t ( )
l ocal f = i o. popen( " openssl r and - base64 16") - - st or e t he out put i n
a " f i l e"
l ocal r ez = f : r ead( )
r et ur n r ez
end

f unct i on t r i m( s)
r et ur n ( st r i ng. gsub( s, " ^%s*( . - ) %s*$", " %1") )
Zavrni rad ore Zeevi

41
end
f unct i on pr i nt t abl e( t abel a)
l ocal v = ""
f or i =1, #t abel a do
i f ( t ype( t abel a[ i ] ) =="t abl e") t hen
pr i nt ( #t abel a[ i ] )
v = l i st ToSt r i ng( t abel a[ i ] )
el se
v = t abel a[ i ]
end
pr i nt ( i . . " - " . . v)
end
end
- - i z " 1, 2, 3, 4" vr aca ni z {1, 2, 3, 4}
f unct i on st r i ngToLi st ( l i st a)
l ocal r ezul t at = {}
l ocal i = 1
l ocal t emp = " "
i f ( st r i ng. f i nd( l i st a, " , " ) ) t hen
r epeat
t emp = t r i m( st r i ng. sub( l i st a, 1, st r i ng. f i nd( l i st a, " , " ) - 1) )
r ezul t at [ i ] = t emp
i = i + 1
l i st a =
st r i ng. sub( l i st a, st r i ng. f i nd( l i st a, " , " ) +1, st r i ng. l en( l i st a) )
unt i l ( st r i ng. mat ch( l i st a, ", ") == ni l )
end
upi t = t r i m( l i st a)
r ezul t at [ i ] = upi t
r et ur n r ezul t at
end

- - i z {1, 2, 3, 4} vr aca "1, 2, 3, 4"
f unct i on l i st ToSt r i ng( l i st a)
l ocal r ez = ""
j = #l i st a
i = 1
i f ( j ==1) t hen
r ez = l i st a[ 1]
el se
r epeat
r ez = r ez . . l i st a[ i ] . . " , "
i = i +1
unt i l ( j ==i )
r ez = r ez . . l i st a[ i ]
end
r et ur n r ez
end

f unct i on number Of ( r ec, deo)
l ocal i =0
whi l e st r i ng. mat ch( r ec, deo) do
i = i +1
r ec = st r i ng. gsub( r ec, deo, ' ' )
end
r et ur n i
end

f unct i on i sSpeci al Quer y( quer y)
l ocal r ez = f al se
i f st r i ng. mat ch( quer y, " encr ypt " ) or st r i ng. mat ch( quer y, " key" ) t hen
Zavrni rad ore Zeevi

42
r ez = t r ue
end
r et ur n r ez
end

- - pr over ava da l i j e upi t t i pa cr eat e t abl e
f unct i on i sCr eat eTabl e( quer y)
l ocal r ez = f al se
i f st r i ng. mat ch( st r i ng. upper ( quer y) , " CREATE TABLE") t hen
r ez = t r ue
end
r et ur n r ez
end

- - pr over ava da l i j e upi t t i pa dr op t abl e
f unct i on i sDr opTabl e( quer y)
l ocal r ez = f al se
i f st r i ng. mat ch( st r i ng. upper ( quer y) , " DROP TABLE") t hen
r ez = t r ue
end
r et ur n r ez
end
- - pr over ava da l i j e I NSERT I NTO upi t
f unct i on i sI nser t I nt o( quer y)
i f st r i ng. mat ch( st r i ng. l ower ( quer y) , " i nser t i nt o . + key") t hen
r et ur n t r ue
end
r et ur n f al se
end

- - pr over ava da l i j e ALTER TABLE upi t
f unct i on i sAl t er Tabl e( quer y)
i f st r i ng. mat ch( st r i ng. l ower ( quer y) , " al t er t abl e . + set . + encr ypt " )
t hen
r et ur n t r ue
end
r et ur n f al se
end

- - pr over ava da l i j e SELECT upi t
f unct i on i sSel ect ( quer y)
i f st r i ng. mat ch( st r i ng. l ower ( quer y) , " sel ect ") t hen
r et ur n t r ue
end
r et ur n f al se
end
- - par se Sel ect quer y
f unct i on par seSel ect ( quer y)
l ocal upi t 1 = ""
l ocal i meTabel e = get Tabl eName( quer y)
l ocal k1, k2
l ocal kol one_sec={}
l ocal kol one = {}
l ocal sve_kol one = {}
l ocal se = {}
l ocal user = USER
l ocal schema = pr oxy. connect i on. cl i ent . def aul t _db
l ocal new_quer y = ""
l ocal kol _si f , kol _nesi f
- - dohvat anj e kol ona koj e t r eba da se si f r uj u u pr omenl j i vu
kol one_sec
Zavrni rad ore Zeevi

43
kol one_sec = get Cr ypt Col s( i meTabel e)
- - kr ei r a se novi upi t koj i sadr zi f unkci j u za desi f r ovanj e kol ona
l ocal usl ovi = " "
uu, usl ovi = st r i ng. f i nd( quer y, ' key. *%" . +%" ' )
usl ovi = st r i ng. sub( quer y, usl ovi +1, st r i ng. l en( quer y) )
usl ovi = t r i m( usl ovi )
kol _nesi f = st r i ng. gsub( quer y, "sel ect " , " ")
kol _nesi f = t r i m( kol _nesi f )
l ocal pos = st r i ng. f i nd( kol _nesi f , "f r om" )
kol _nesi f = st r i ng. sub( kol _nesi f , 1, pos- 2)
kol _nesi f = t r i m( kol _nesi f )
l og( " kol one nesi f r ovane . . " . . kol _nesi f )
i f ( kol _nesi f == " *" ) t hen
kol _nesi f = get Ast er i sk( schema . . ". " . . i meTabel e)
el se
kol _nesi f = st r i ngToLi st ( kol _nesi f )

end
sve_kol one = get Ast er i sk( schema . . " . " . . i meTabel e)
l ocal kk = get Col Names( schema . . " . " . . i meTabel e)
l ocal num= #kk
f or i =1, numdo
se[ i ] = {}
se[ i ] [ 1] = kk[ i ]
se[ i ] [ 3] = sve_kol one[ i ]
i f ( t abl e. cont ai ns( kol one_sec, se[ i ] [ 1] ) ) t hen
l og( " i =" . . i )
se[ i ] [ 2] = 1
- - r ead key f or mSEC_CAT i nt o k2
upi t 1 = " SELECT enc_key FROM `SEC_CAT`. `ENC_KEYS` wher e
t abl e_name = ' " . . i meTabel e . . "' and col umn_name = ' ". . se[ i ] [ 1] . . " ' and
user name = ' ". . user . . "' " ;
l og( upi t 1)
k1 = r eadFr omSEC( upi t 1)
i f ( k1) t hen
k2 = k1: f et ch( )
el se
l og( "GRESKA! kol ona ni j e si f r ovana ! ")
os. exi t ( 2)
end
- - decr ypt wor ki ng key
k2 = RSAdecr ypt ( k2, " / usr / l ocal / mast er r ad/ cer t / " . . user
. . "/ SK. pem" )
l og( k2)
- - encr upt v wi t h wor i ki ng key
se[ i ] [ 3] = " AES_DECRYPT( " . . se[ i ] [ 3] . . ", ' " . . k2 . . "' )
as " . . se[ i ] [ 3]
el se
se[ i ] [ 2] = 0
end
i f ( t abl e. cont ai ns( kol _nesi f , sve_kol one[ i ] ) ) t hen
t abl e. i nser t ( kol one, se[ i ] [ 3] )
end
l og( " kol one ". . i . . " = " . . t ost r i ng( kol one[ i ] ) )
end
new_quer y = "sel ect ". . l i st ToSt r i ng( kol one) . . " f r om" . . i meTabel e
. . " " . . usl ovi
r et ur n new_quer y
end

- - PARSE I NSERT I NTO upi t
Zavrni rad ore Zeevi

44
f unct i on par seI nser t I nt o( quer y)
l ocal i i = {}
l ocal kol one = {}
l ocal upi t 1 = ""
l ocal i meTabel e = get Tabl eName( quer y)
l ocal k1, k2
l ocal kol one_sec={}
l ocal schema = pr oxy. connect i on. cl i ent . def aul t _db
l ocal user = USER
l og( " Kor sni cka shema: " . . t ost r i ng( schema) )
l ocal SK = " / usr / l ocal / mast er r ad/ cer t / ". . USER . . " / SK. pem"
- - vadj enj e vr ednost i kol ona i z upi t a

upi t = st r i ng. gsub( quer y, " i nser t . *i nt o . * val ues. *%( ", "" )
upi t = st r i ng. gsub( upi t , "%) key. +" , " ")
l og( upi t )
upi t = st r i ngToLi st ( upi t )
kol one_sec = get Cr ypt Col s( i meTabel e)
l ocal kk = get Col Names( schema . . " . " . . i meTabel e)
l ocal num = #kk
f or i =1, numdo
i i [ i ] = {}
i i [ i ] [ 1] = kk[ i ]
i i [ i ] [ 3] = upi t [ i ]
i f ( t abl e. cont ai ns( kol one_sec, i i [ i ] [ 1] ) ) t hen
l og( " i =" . . i )
i i [ i ] [ 2] = 1
- - r ead key f or mSEC_CAT i nt o k2
upi t 1 = " SELECT enc_key FROM `SEC_CAT`. `ENC_KEYS` wher e
t abl e_name = ' " . . i meTabel e . . "' and col umn_name = ' ". . i i [ i ] [ 1] . . " ' and
user name = ' ". . user . . "' " ;
l og( upi t 1)
k1 = r eadFr omSEC( upi t 1)
i f ( k1) t hen
k2 = k1: f et ch( )
end
- - decr ypt wor ki ng key
k2 = RSAdecr ypt ( k2, SK)
- - encr upt v wi t h wor i ki ng key
i i [ i ] [ 3] = " AES_ENCRYPT( " . . i i [ i ] [ 3] . . ", ' " . . k2 . .
" ' ) "
el se
i i [ i ] [ 2] = 0
end
kol one[ i ] = i i [ i ] [ 3]
l og( " kol one ". . i . . " = " . . t ost r i ng( kol one[ i ] ) )
end
- - kr ei r a se novi upi t koj i sadr zi si f r ovane kol one
new_quer y = "i nser t i nt o " . . i meTabel e . . " val ues ( " . .
l i st ToSt r i ng( kol one) . . ") "
l og ( "NQ = " . . new_quer y)
r et ur n new_quer y
end
f unct i on get Cr ypt Col s( i meT)
l ocal k1, upi t 1
l ocal kol one_sec = {}
- - dohvat anj e kol ona koj e t r eba da se si f r uj u u pr omenl j i vu kol one_sec
upi t 1 = " sel ect col umn_name f r omSEC_CAT. ENC_COLUMNS wher e t abl e_name
= ' " . . i meT . . " ' "
k1 = r eadFr omSEC( upi t 1)
i f ( k1) t hen
Zavrni rad ore Zeevi

45
f or u=1, k1: numr ows( ) do
k2 = k1: f et ch( )
k2 = t r i m( k2)
t abl e. i nser t ( kol one_sec, k2)
- - l og( "k2 - " . . t ost r i ng( k2) )
end
el se
l og( " Gr eska! Tabel a nema si f r ovane kol one! ")
os. exi t ( 1)
end
r et ur n kol one_sec
end

f unct i on get Col Names( I meTabel e)
- - dohvat anj e i mena kol ona i z t abl e u koj u se ubacuj e
- - i me t abel e u obl i ku shema. i met abel e
l ocal upi t 1, k1
upi t 1 = " sel ect * f r om" . . I meTabel e
k1 = r eadFr omSEC( upi t 1)
i f ( k1==f al se) t hen
l og( " Gr eska! Tabel a ne post oj i ! ")
os. exi t ( 2)
end
r et ur n k1: get col names( )
end

f unct i on CTel ement ( t ext )
l og( " CTel ement za - - " . . t ext . . " - - ")
l ocal el ement = t ext
l ocal el = {}
l ocal pr avo = "12"
l ocal i me = ""
l ocal kor i sni ci = {}
- - l og( st r i ng. f i nd( el ement , "updat e 1" ) )
i f ( st r i ng. f i nd( el ement , "updat e 1" ) ) t hen
pr avo = " 1"
end
i f ( st r i ng. f i nd( el ement , "updat e 0" ) ) t hen
pr avo = " 0"
end
i f ( st r i ng. f i nd( el ement , "updat e 2" ) ) t hen
pr avo = " 2"
end
el ement = st r i ng. gsub( el ement , "updat e . " , "" )
el ement = st r i ng. gsub( el ement , "encr ypt ", "" )
i f ( pr avo=="12" ) t hen os. exi t ( 12) end
l og( " pr avo=" . . pr avo)
l og ( "el - " . . el ement )
i f ( st r i ng. mat ch( el ement , " user _l i st " ) ) t hen
l ocal upi t 1 = st r i ng. mat ch( el ement , " user _l i st %[ . +%] ")
upi t 1 = st r i ng. gsub( upi t 1, "user _l i st +%[ ", "" )
upi t 1 = st r i ng. gsub( upi t 1, "%] " , " ")
- - l og( " St r i ng koj i se pr et var a u l i st u: " . . upi t 1)
r epeat
l ocal t = st r i ng. sub( upi t 1, 1, st r i ng. f i nd( upi t 1, " " ) )
l og( " T - " . . t )
t = t r i m( t )
t abl e. i nser t ( kor i sni ci , t )
upi t 1 = st r i ng. gsub( upi t 1, t , "" )
upi t 1 = t r i m( upi t 1)
unt i l ( st r i ng. f i nd( upi t 1, " ") ==ni l )
Zavrni rad ore Zeevi

46
l og( " T - " . . upi t 1)
t abl e. i nser t ( kor i sni ci , upi t 1)
- - l og( el ement )
el ement = st r i ng. gsub( el ement , " user _l i st %[ . +%] ", "" )
el ement = t r i m( el ement )
- - l og( " Upi t posl e ski danj a l i st e - " . . el ement )
end
el ement = st r i ng. sub( el ement , 1, st r i ng. f i nd( el ement , " " ) )
i me = el ement
t abl e. i nser t ( kor i sni ci , USER)
l og( " ????" . . el ement . . " " . . t ost r i ng( kor i sni ci ) . . " " . . pr avo)
el = {i me, kor i sni ci , pr avo}
r et ur n el
end
- - vr aca ni z kol ona i z cr eat e t abl e koj e u sebi i maj u encr ypt
- - i l i st u kor i sni ka koj i ma j e dozvol j en pr i st up
f unct i on par seCr eat eTabl e( quer y)
l ocal CT = {}
l ocal i = 1
l ocal upi t = st r i ng. l ower ( quer y)
upi t = t r i m( upi t )
l ocal pocet ak= st r i ng. f i nd( upi t , "%( " )
l og ( "pocet ak = " . . t ost r i ng( pocet ak) )
upi t = st r i ng. sub( upi t , pocet ak+1, st r i ng. l en( upi t ) - 1)
l og( upi t ) - - deo upi t a i zmedj u zagr ada
i f ( st r i ng. mat ch( quer y, " , " ) ) t hen
r epeat
l ocal t emp = " "
l ocal i me = ""
t emp = t r i m( st r i ng. sub( upi t , 1, st r i ng. f i nd( upi t , " , " ) - 1) )
- - l og( "kont r ol a - " . . t emp)
i f ( st r i ng. f i nd( t emp, "encr ypt ") ) t hen CT[ i ] =
CTel ement ( t emp) i =i +1 end
upi t =
st r i ng. sub( upi t , st r i ng. f i nd( upi t , " , " ) +1, st r i ng. l en( upi t ) )
- - l og( upi t )
unt i l ( st r i ng. mat ch( upi t , " , " ) == ni l )
end
upi t = t r i m( upi t )
l og( " 1kont r ol a: " . . upi t . . i )
i f st r i ng. mat ch( st r i ng. l ower ( upi t ) , " encr ypt " ) t hen
i f ( st r i ng. f i nd( upi t , "encr ypt ") ) t hen CT[ i ] = CTel ement ( upi t )
end
end
r et ur n CT
end
- - ALTER TABLE Funct i ons
f unct i on par seAl t er Tabl e( quer y)
l ocal i = 1
l ocal add = {}
l ocal dr op = {}
quer y = st r i ng. l ower ( quer y)
quer y = st r i ng. gsub( quer y, "al t er t abl e . + set " , " ")
quer y = st r i ng. gsub( quer y, "encr ypt ", "" )
quer y = st r i ng. gsub( quer y, "key . *" , " ")
l ocal upi t = st r i ngToLi st ( quer y)
f or j , v i n i pai r s( upi t ) do
i f ( st r i ng. f i nd( v, " dr op") ) t hen
v = t r i m( st r i ng. gsub( v, " dr op" , " ") )
t abl e. i nser t ( dr op, v)
- - pr i nt ( v)
Zavrni rad ore Zeevi

47
el se
t abl e. i nser t ( add, v)
end
end
r et ur n add, dr op
end

- - i zvr sava upi t nad SEC kat al ogom
f unct i on wr i t et oSEC( upi t )
l ocal env = l uasql . mysql ( )
l ocal konekci j a =
env: connect ( "SEC_CAT", "r oot " , " ", "l ocal host ", 3306)
l ocal kur sor = konekci j a: execut e( upi t )
i f ( kur sor ==ni l ) t hen
r et ur n "upi s u sec_cat neuspesan"
end
r et ur n "upi s u sec_cat uspesan"
end

f unct i on r eadFr omSEC( upi t )
l ocal env = l uasql . mysql ( )
l ocal konekci j a =
env: connect ( "SEC_CAT", "r oot " , " ", "l ocal host ", 3306)
l ocal kur sor = konekci j a: execut e( upi t )
i f ( kur sor ==ni l ) t hen
r et ur n f al se
end
r et ur n kur sor
end

f unct i on t abl e. cont ai ns( t abl e, el ement )
f or _, val ue i n pai r s( t abl e) do
i f val ue == el ement t hen
r et ur n t r ue
end
end
r et ur n f al se
end

- - vr aca ni z sa i meni ma kol ona
f unct i on get Ast er i sk( t abel a)
l ocal upi t = " descr i be " . . t abel a
l ocal kol ona = {}
l ocal i = 1
l ocal r ezul t at = r eadFr omSEC( upi t )
r epeat
l ocal t emp = r ezul t at : f et ch( )
i f ( t emp == ni l ) t hen
el se
kol ona[ i ] = t emp
- - pr i nt ( kol ona[ i ] )
end
i = i +1
unt i l ( t emp == ni l )
r et ur n kol ona
end

- - ski da kl j ucne r eci i z upi t a
f unct i on dr opKeyWor ds( t ext )
t ext = st r i ng. gsub( t ext , "updat e 1" , " ")
t ext = st r i ng. gsub( t ext , "updat e 0" , " ")
Zavrni rad ore Zeevi

48
t ext = st r i ng. gsub( t ext , "updat e 2" , " ")
t ext = st r i ng. gsub( t ext , "encr ypt ", "" )
t ext = st r i ng. gsub( t ext , "user _l i st . *%[ . *%] ", "" )
r et ur n t ext
end

- - vr aca i me t abel e i z upi t a
f unct i on get Tabl eName( quer y)
l ocal upi t = st r i ng. upper ( quer y)
i f ( st r i ng. mat ch( upi t , "CREATE TABLE %w+_%w+" ) ) t hen
upi t = st r i ng. mat ch( upi t , " CREATE TABLE %w+_%w+")
upi t = st r i ng. gsub( upi t , "CREATE TABLE" , " ")
el sei f ( st r i ng. mat ch( upi t , "CREATE TABLE %w+" ) ) t hen
upi t = st r i ng. mat ch( upi t , " CREATE TABLE %w+")
upi t = st r i ng. gsub( upi t , "CREATE TABLE" , " ")
end
i f ( st r i ng. mat ch( upi t , "DROP TABLE %w+_%w+" ) ) t hen
upi t = st r i ng. mat ch( upi t , " DROP TABLE %w+_%w+")
upi t = st r i ng. gsub( upi t , "DROP TABLE" , " ")
el sei f ( st r i ng. mat ch( upi t , "DROP TABLE %w+" ) ) t hen
upi t = st r i ng. mat ch( upi t , " DROP TABLE %w+")
upi t = st r i ng. gsub( upi t , "DROP TABLE" , " ")
end
i f ( st r i ng. mat ch( upi t , "I NSERT I NTO %w+_%w+") ) t hen
upi t = st r i ng. mat ch( upi t , " I NSERT I NTO %w+_%w+" )
upi t = st r i ng. gsub( upi t , "I NSERT I NTO", "" )
el sei f ( st r i ng. mat ch( upi t , "I NSERT I NTO %w+") ) t hen
upi t = st r i ng. mat ch( upi t , " I NSERT I NTO %w+" )
upi t = st r i ng. gsub( upi t , "I NSERT I NTO", "" )
end
i f ( st r i ng. mat ch( upi t , "SELECT" ) ) t hen
l ocal i = 0
i = st r i ng. f i nd( upi t , " FROM")
- - pr i nt ( "u1 - " . . upi t )
upi t = st r i ng. sub( upi t , i +5, st r i ng. l en( upi t ) )
upi t = t r i m( upi t )
upi t = st r i ng. mat ch( upi t , " %a+" )
end
i f ( st r i ng. mat ch( upi t , " ALTER TABLE . + SET") ) t hen
upi t = st r i ng. gsub( upi t , "ALTER. +TABLE" , " ")
upi t = st r i ng. sub( upi t , 1, st r i ng. f i nd( upi t , "SET") - 2)
- - pr i nt ( upi t )
end
r et ur n st r i ng. l ower ( t r i m( upi t ) )
end
f unct i on addCol Enc( i met abel e, i mekol one, sk)
l ocal schema = " mast er "
l ocal i mekor i sni ka = " dj zecevi c"
l ocal upi t 1 = "dr op t abl e I F EXI STS t est . t emp123"
l ocal USER = i mekor i sni ka
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1=" cr eat e t abl e t est . t emp123 sel ect * FROM " . . schema . . ". " . .
i met abel e
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
l ocal col names = get Ast er i sk( schema . . " . " . . i met abel e)
col names = l i st ToSt r i ng( col names)
l og( col names)
Zavrni rad ore Zeevi

49

- - gener at e wor ki ng key
l ocal KEY = gener at e128bi t ( )

col names = st r i ng. gsub( col names, i mekol one, "AES_ENCRYPT( " . . i mekol one
. . ", ' " . . KEY . . "' ) as " . . i mekol one)
upi t 1 = " dr op t abl e " . . schema . . ". " . . i met abel e
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " cr eat e t abl e " . . schema . . " . " . . i met abel e . . " sel ect "
. . col names . . " f r omt est . t emp123"
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " dr op t abl e t est . t emp123"
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
- - kr ei r at i kl j uc za t r enut nog kor i sni ka
KEY = RSAencr ypt ( KEY, " / usr / l ocal / mast er r ad/ cer t / " . . USER . .
" / cer t i f i cat e. pem" )
upi t 1 = " i nser t i nt o `SEC_CAT`. `ENC_KEYS` VALUES( ' " . . i met abel e . .
" ' , ' ". . i mekol one . . " ' , ' " . . USER . . "' , ' " . . KEY . . "' ) "
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " i nser t i nt o `SEC_CAT`. `ENC_COLUMNS`VALUES( ' " . . i met abel e
. . "' , ' " . . i mekol one . . "' , ' " . . USER . . " ' , 1, ' " . . USER . . "' ) "
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
end

f unct i on r emCol Enc( i met abel e, i mekol one, sk)
l ocal schema = pr oxy. connect i on. cl i ent . def aul t _db
l ocal i mekor i sni ka = USER
l ocal upi t 1 = "dr op t abl e I F EXI STS t est . t emp123"
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1=" cr eat e t abl e t est . t emp123 sel ect * FROM " . . schema . . ". " . .
i met abel e
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
l ocal col names = get Ast er i sk( schema . . " . " . . i met abel e)
col names = l i st ToSt r i ng( col names)
l og( col names)
- - r ead key f or mSEC_CAT i nt o k2
upi t 1 = " SELECT enc_key FROM `SEC_CAT`. `ENC_KEYS` wher e t abl e_name =
' " . . i met abel e . . " ' and col umn_name = ' " . . i mekol one . . " ' and user name =
' ". . i mekor i sni ka . . " ' " ;
l og( upi t 1)
l ocal kk1 = r eadFr omSEC( upi t 1)
l ocal kk2
i f ( kk1) t hen
kk2 = kk1: f et ch( )
l og( kk2)
end
- - decr ypt wor ki ng key
Zavrni rad ore Zeevi

50
kk2 = RSAdecr ypt ( kk2, " / usr / l ocal / mast er r ad/ cer t / dj zecevi c/ SK. pem")
l og( " key: " . . kk2)
col names = st r i ng. gsub( col names, i mekol one, "AES_DECRYPT( " . . i mekol one
. . ", ' " . . kk2 . . " ' ) as " . . i mekol one)
upi t 1 = " dr op t abl e " . . schema . . ". " . . i met abel e
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " cr eat e t abl e " . . schema . . " . " . . i met abel e . . " sel ect "
. . col names . . " f r omt est . t emp123"
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " dr op t abl e t est . t emp123"
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " del et e f r om `SEC_CAT`. `ENC_KEYS` wher e t abl e_name = ' " . .
i met abel e . . " ' and col umn_name = ' " . . i mekol one . . " ' "
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
upi t 1 = " del et e f r om `SEC_CAT`. `ENC_COLUMNS` wher e t abl e_name = ' "
. . i met abel e . . "' and col umn_name = ' ". . i mekol one . . "' "
l ocal t empRez = wr i t et oSEC( upi t 1)
l og( upi t 1)
l og( t empRez)
end

f unct i on r ead_aut h( )
USER = pr oxy. connect i on. cl i ent . user name
end

f unct i on checkPr i vi l eges( user name, t bl name, col name)
l ocal r ezul t at = f al se
l ocal t emp = {}
- - da l i j e kr eat or ?
l ocal upi t 1 = "SELECT cr eat or , per mi t i on FROM `ENC_COLUMNS` wher e
`t abl e_name` = ' " . . t bl name . . "' and `col umn_name` = ' " . . col name . . "' "
- - pr i nt ( upi t 1)
l ocal U = r eadFr omSEC( upi t 1)
i f ( U) t hen
U: f et ch( t emp)
l og( t emp[ 1] . . " " . . t emp[ 2] )
l og( user name)
i f ( t emp[ 2] ==" 0" ) t hen
r et ur n f al se
el sei f ( t emp[ 1] ==user name) t hen
r et ur n t r ue
el sei f ( t emp[ 2] =="2") t hen
r et ur n t r ue
end
end
r et ur n r ezul t at
end

f unct i on r ead_quer y( packet )
i f ( packet : byt e( ) ~= pr oxy. COM_QUERY) t hen
r et ur n
end
l ocal quer y = st r i ng. sub( packet , 2)
Zavrni rad ore Zeevi

51
- - pr over ava da l i j e dr op t abl e upi t
i f ( i sDr opTabl e( quer y) ) t hen
l ocal i meT = get Tabl eName( quer y)
l og( i meT)
l og( " DELETE FROM `SEC_CAT`. `ENC_COLUMNS` WHERE t abl e_name = ' "
. . i meT . . " ' " )
l og( " DELETE FROM `SEC_CAT`. `ENC_COLUMNS` WHERE t abl e_name = ' "
. . i meT . . " ' " )
l og( wr i t et oSEC( " DELETE FROM `SEC_CAT`. `ENC_COLUMNS` WHERE
t abl e_name = ' " . . i meT . . " ' " ) )
l og( wr i t et oSEC( " DELETE FROM `SEC_CAT`. `ENC_KEYS` WHERE
t abl e_name = ' " . . i meT . . " ' " ) )
pr oxy. quer i es: append( 1, st r i ng. char ( pr oxy. COM_QUERY) . . quer y)
r et ur n pr oxy. PROXY_SEND_QUERY
end
- - pr over ava da l i u upi t u i ma kl j ucni h r eci : encr ypt , key
i f ( not i sSpeci al Quer y( quer y) ) t hen
r et ur n
end
l og ( " Speci al quer y; " . . quer y)
- - pr over ava vr t u upi t a: cr eat e t abl e, i nset i nt o, dr op t abl e, al t er
t abl e
- - SELECT upi t
i f ( i sSel ect ( quer y) ) t hen
quer y = par seSel ect ( quer y)
l og( " SELECT quer y: " . . quer y)
pr oxy. quer i es: append( 1, st r i ng. char ( pr oxy. COM_QUERY) . . quer y)
r et ur n pr oxy. PROXY_SEND_QUERY
end
- - CREATE TABLE
i f ( i sCr eat eTabl e( quer y) ) t hen
l og( " ul azak u cr eat e t abl e")
l ocal kol one= par seCr eat eTabl e( quer y)
- - l og( " Pr avi quer y pr e dr op key wor ds- " . . quer y)
quer y = dr opKeyWor ds( quer y)
l ocal KEY = ""
l ocal i meTabel e = get Tabl eName( quer y)
- - l og( " Pr avi quer y posl e dr op key wor ds- " . . quer y)
l og( " Duzi na ni za kol one " . . #kol one)
f or i =1, #kol one do
l og( " Duzi na ni za user i " . . #kol one[ i ] [ 2] )
l og( " I NSERT I NTO `SEC_CAT`. `ENC_COLUMNS` VALUES ( ' " . .
i meTabel e . . " ' , ' " . . kol one[ i ] [ 1] . . "' , ' " . . USER . . " ' , ' " . .
kol one[ i ] [ 3] . . "' , ' " . . USER . . " ' ) ")
t empRez = wr i t et oSEC( " I NSERT I NTO `SEC_CAT`. `ENC_COLUMNS`
VALUES ( ' " . . i meTabel e . . " ' , ' " . . kol one[ i ] [ 1] . . "' , ' " . . USER . . " ' , ' "
. . kol one[ i ] [ 3] . . " ' , ' " . . USER . . "' ) " )
l og( " Rezul t at ul i t a: " . . t empRez)
KEY = gener at e128bi t ( )
f or j =1, #kol one[ i ] [ 2] do
l og( "kol ona: " . . kol one[ i ] [ 1] . . " # kor i sni k: "
. . kol one[ i ] [ 2] [ j ] )
l og ( " KEY = " . . KEY)
l ocal t empRez
- - pot r ebno j e si f r ovat i kl j uc sa j avni mkl j ucem
kor i sni ka
l ocal l dapKEY = get LDAPKey( kol one[ i ] [ 2] [ j ] )
l og( "LDAP KEY: " . . l dapKEY)
l ocal KEY = RSAencr ypt ( KEY, l dapKEY, kol one[ i ] [ 2] [ j ] )
l og( "kor i sni k: " . . kol one[ i ] [ 2] [ j ] )
l og ( " Encr ypt ed KEY = " . . t ost r i ng( KEY) )
Zavrni rad ore Zeevi

52
i f ( KEY) t hen
l og( "I NSERT I NTO `SEC_CAT`. `ENC_KEYS` VALUES
( ' " . . i meTabel e . . "' , ' " . . kol one[ i ] [ 1] . . " ' , ' " . . kol one[ i ] [ 2] [ j ] . .
" ' , ' " . . KEY . . "' ) " )
t empRez = wr i t et oSEC( " I NSERT I NTO
`SEC_CAT`. `ENC_KEYS` VALUES ( ' " . . i meTabel e . . "' , ' " . . kol one[ i ] [ 1] . .
" ' , ' " . . kol one[ i ] [ 2] [ j ] . . "' , ' " . . KEY . . "' ) " )
l og( t empRez)
el se
l og( "Gr eska! - Nepr avi l no ci t anj e kor sni ckog
ser t i f i kat a, mol i mvas pokusaj t e ponovo" )
os. exi t ( 1)
end
end
end
l og( quer y)
pr oxy. quer i es: append( 1, st r i ng. char ( pr oxy. COM_QUERY) . . quer y)
r et ur n pr oxy. PROXY_SEND_QUERY
end
- - ALTER TABLE
i f ( i sAl t er Tabl e( quer y) ) t hen
l og( " al t er t abl e")
r ezul t at = " sel ect ' Al t er t abl e OK' "
enc, no_enc = par seAl t er Tabl e( quer y)
l ocal i meTabl e = get Tabl eName( quer y)
SK = "/ usr / l ocal / mast er r ad/ cer t / ". . USER . . " / SK. pem"
i f ( #enc>0) t hen
l og( " Usao u encr ypt ")
f or j , v i n i pai r s( enc) do
- - obar adi t i encr ypt
addCol Enc( i meTabl e, v, " SK")
end
end
l og ( "- - - - - - - - - - - - - " )
i f ( #no_enc>0) t hen
l og( " Usao u no encr ypt " )
f or j , v i n i pai r s( no_enc) do
- - pr over i t i pr ava
i f ( checkPr i vi l eges( USER, i meTabl e, v) ) t hen
l ocal upi t 1 = ""
r emCol Enc( i meTabl e, v, " SK")
el se
r ezul t at = " sel ect ' Access deni ed! ' "
end
end
end
pr oxy. quer i es: append( 1, st r i ng. char ( pr oxy. COM_QUERY) . .
r ezul t at )
r et ur n pr oxy. PROXY_SEND_QUERY
end
- - I NSERT I NTO TABLE
i f ( i sI nser t I nt o( quer y) ) t hen
l og( " I NSERT I NTO FUNKCI J A POCI NJ E" )
quer y = par seI nser t I nt o( quer y)
pr oxy. quer i es: append( 1, st r i ng. char ( pr oxy. COM_QUERY) . . quer y)
r et ur n pr oxy. PROXY_SEND_QUERY
end

end

You might also like