Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica

Baze de date


Qdidactic » stiinta & tehnica » informatica » baze de date
Securitatea bazei de date in Oracle - aspectele esentiale in securitatea bazelor de date



Securitatea bazei de date in Oracle - aspectele esentiale in securitatea bazelor de date




Baza de date Oracle contine propriul ei sistem de securitate care previne accesul neautorizat la baza de date . Sistemul de securitate al bazei de date Oracle este realizat prin intermediul utilizatorilor bazei de date. Serverul bazei de date solicita numele utilizatorilor si parola pentru fiecare accesare a bazei de date; indiferent de utilitarul folosit pentru interfata, serverul bazei de date nu permite accesul la baza de date daca nu este utilizat un nume si o parola corecta.


Un utilizator inseamna de fapt un cont de utilizator si nu o persoana care acceseaza baza de date. Evident, o persoana poate accesa baza de date folosind unul sau mai multi utilizatori Oracle, iar mai multe persoane pot accesa baza de date folosind acelasi utilizator Oracle.


Aspectele esentiale in securitatea bazelor de date se refera in primul rand la:


o       controlul obtinerii sesiunilor de lucru cu serverul de baze de date (login);

o       controlul accesului si manipularii structurilor de date (tabelelor) sau altor obiecte (proceduri, secvente, tipuri, etc);

o       controlul modului de exploatare a resurselor sistemului (timp de procesare, volum de spatiu de memorie si stocare folosit);

o       controlul operatiilor generale de administrare (pornirea/oprirea bazei de date, crearea/stergerea/modificarea conturilor, crearea obiectelor in schemele utilizatorilor etc.).




De mentionat ca o politica eficienta de securitate ar trebui sa fie destul de flexibila pentru a permite rezolvarea acestor probleme atat la nivelul individual al fiecarui utilizator in parte, cat si la nivelul grupurilor de utilizatori.


Fiecarui utilizator al bazei de date ii sunt acordate anumite drepturi, cunoscute sub numele de privilegii. Un privilegiu este permisiunea de a executa o actiune sau de a accesa un obiect apartinand unui alt utilizator. In Oracle, un utilizator nu poate executa nici un fel de actiune fara a avea privilegiul sa o faca. In acest sens unui utilizator ii pot fi acordate sau revocate privilegii.


In Oracle, privilegiile de care poate dispune un utilizator pentru buna desfasurare a responsabilitatilor sale sunt impartite in 2 categorii:


o       privilegii la nivel de obiecte, care permit executarea unor comenzi specifice (UPDATE, DELETE, SELECT) asupra obiectelor existente in baza de date;


o       privilegii la nivel sistem, care se refera la permisiunea crearii, stergerii sau modificarii proprietatilor globale ale obiectelor (prin comenzi precum CREATE, ALTER, DROP, etc.) la permisiunea conectarii la serverul bazei de date (deschiderea unei sesiuni) sau, mai mult (pentru SYS, de exemplu), la permisiunea de inchidere/deschidere a instantei bazei de date.


Privilegii de sistem


Actiunile pe care un utilizator le poate efectua asupra bazei de date sunt administrate prin privilegiile de sistem acordate acestuia. In Oracle exista peste 80 de privilegii de sistem, denumirea lor fiind inspirata de actiunile pe care le permit. Ele variaza de la permisiunea de a se conecta la o baza de date (CREATE SESSION) la dreptul de a crea un tabel (CREATE ANY TABEL), de exemplu:


Drept Sistem

Operatii autorizate

CREATE SESSION

Permite posesorului conectarea la baza de date.

CREATE TABLE

Permite posesorului crearea de tabele. Utilizatorul trebuie de asemenea sa aiba o cota intr-o 'tablespace' (arie a bazei de date).

CREATE VIEW

Permite crearea imaginilor.

CREATE USER

Permite posesorului sa creeze alti utilizatori ORACLE (un drept cerut pentru o functie DBA).


Privilegii la nivel de obiect


Securitatea obiectelor unei baze de date este administrata ca un numar de privilegii la nivel de obiect, care determina ce acces au utilizatorii la obiectele bazei de date.

Iata in continuare un rezumat al privilegiilor la nivel de obiect:


Privilegiul de obiect

Descrierea permisiunii

SELECT

Selectarea randurilor dintr-un tabel, vedere sau instantaneu si extragerea numerelor dintr-un generator de secvente.

INSERT

Inserarea inregistrarilor intr-un tabel sau vedere.

UPDATE

Actualizarea inregistrarilor dintr-un tabel sau vedere.

DELETE

Stergerea inregistrarilor intr-un tabel sau vedere.

ALTER

Modificarea structurii si parametrilor unui tabel sau a unei secvente.

REFERENCES

Referirea unui tabel utilizand chei straine.

EXECUTE

Executarea unei proceduri, functii, pachet sau proceduri externe si accesarea obiectelor declarate in specificatia pachetului.

INDEX

Crearea indecsilor tabelului.

READ

Citirea unui BFILE din directorul specificat.


Iata si obiectele asupra carora poate fi acordat fiecare privilegiu in parte:



Privilegiul de obiect


Tabel


Vedere


Secventa

Procedura functie pachet


Instantaneu


Director


Biblioteca

SELECT

X

X

X


X



INSERT

X

X






UPDATE

X

X






DELETE

X

X







ALTER

X


X





REFERENCES

X







EXECUTE




X



X

INDEX

X







READ






X



Fiecare privilegiu la nivel de obiect este independent de celelalte, adica existenta unui privilegiu nu atrage dupa sine si existenta altor privilegii.


Pentru a efectua o actiune asupra unui obiect  (interogare, actualizare, distrugere, etc.), un utilizator trebuie sa se gaseasca in unul din urmatoarele cazuri:


o       sa fie proprietarul acelui obiect;

o       sa aiba acordat privilegiul la nivelul obiectului respectiv de a efectua acea actiune;

o       sa aiba acordat privilegiul de sistem care sa ii permita acest lucru.


Responsabilitatile legate de o anumite functiune a unei aplicatii se dovedesc, uneori, foarte complexe datorita tranzactiilor pe care le presupune, fapt care poate implica foarte multe privilegii la nivel de obiect. Din acest motiv, necesitatea organizarii privilegiilor in structuri suplimentare devine imperativa. Elementul–cheie in acest context il reprezinta rolurile. Astfel ca, pentru a se evita acordarea repetata a unei structuri coerente de privilegii, acestea pot fi grupate in roluri, iar acordarea acestora se face o singura data pentru utilizator.


De asemenea, folosirea autorizata a acestor structuri de privilegii se poate realiza prin mecanismele de activare predefinite la nivelul rolurilor. Astfel ca, dupa conectare, un utilizator poate dispune de anumite roluri (acordate in prealabil), iar, pe parcurs in functie de contextul responsabilitatilor sale in baza de date, poate solicita activarea altor roluri (care pot presupune chiar si o reautentificare suplimentara prin asocierea unor parole specifice la nivelul lor).


Rolurile sunt utilizate pentru a simplifica administrarea privilegiilor. Astfel, in loc de a acorda un anumit privilegiu direct unui utilizator, privilegiile sunt acordate unui rol, iar un rol este acordat la randul lui unui utilizator. Cu alte cuvinte, rolurile reprezinta un grup de privilegii.


Este posibila acordarea unui rol altui rol, putandu-se astfel crea ierarhii de roluri. In plus, unui rol ii poate fi revocat un privilegiu asa cum si unui utilizator ii poate fi revocat un rol. Un rol poate fi activat sau dezactivat in cadrul aceleiasi sesiuni, aceasta avand ca efect acordarea sau retragerea privilegiilor respective utilizatorilor. De asemenea, un rol poate fi protejat cu o parola care va trebui introdusa in momentul in care se doreste activarea acestuia.


Acordarea de drepturi              Utilizatori
fara roluri: o o o
/| /| /|
/^ /^ /^
| | |
+----+--+-------+-------+
| | | | | |
| +-----|-+--+--|-+-----|-+
|
+---|-|-+---|-|-++--|-|-+
/+ | /+ | /+ | /+ |
/--+ /--+ /--+ /--+

DREPTURI

Acordarea de drepturi
utilizand roluri:
o o o Utilizatori
/| /| /|
/^ /^ /^
| /
| /
| /
| /
++---+---++
| | <------------ ROL
+--+---+--+
| | | |
+-------+ | | +-------+
| | | |
/ / / /
/ / / /

Privilegii

Iata un set de roluri predefinite cu privilegii incluse oferit de Oracle:


o       CONNECT ofera privilegiile de baza pentru utilizatorul unei aplicatii;

o       RESOURCE ofera privilegiile de baza pentru programatorul unei aplicatii;

o       DBA ofera toate privilegiile de sistem cu posibilitatea de a acorda aceste privilegii altor utilizatori sau roluri (optiunea WITH ADMIN OPTION);

o       EXP_FULL_DATABASE si IMP_FULL_DATABASE sunt pentru utilizatorii utilitarelor Export si Import, adica ofera privilegiile necesare operatiilor de export si respectiv import ale bazei de date;

o       DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE si SELECT_CATALOG_ROLE ofera privilegiile de accesare a vederilor dictionarului de date si a pachetelor;

o       Alte roluri: AQ_ADMINISTRATION_ROLE, AQ_USER_ROLE, RECOVERY_CATALOG_OWNER si SNMPAGENT.



Pe scurt, principalele beneficii implicate de folosirea rolurilor se refera la: simplificarea gestiunii drepturilor( privilegiilor), posibiltatea administrarii dinamice a structurilor de securitate, disponibilitatea selectiva a accesului la anumite zone ale bazei de date, imbunatatirea performantelor sistemului prin reducerea numarului de verificari ale drepturilor implicate de executia frazelor SQL.


Utilizatorii bazei de date


Procesul de creare a bazei de date Oracle produce si doi utilizatori privilegiati, “imputerniciti” sa efectueze sarcinile de administrare care necesita drepturi speciale, adica SYS, ce detine schema in care se gasesc toate obiectele ce formeaza catalogul sau dictionarul bazei de date plus responsabilitatea de a porni “manual” baza de date aflata in stadiul “shutdown”, si SYSTEM, administratorul de facto (chiar daca si SYS poate efectua o parte din sarcinile sale), care are, prin urmare, si “puterea” de a crea noi conturi de baza de date sau de a modifica detaliile celor deja existente.


Utilizatorul SYS este sigurul care poate avea acces la anumite tabele ale dictionarului de date. Datorita faptului ca acesta este proprietarul tuturor structurilor dictionarului de date, pentru a acorda privilegii asupra obiectelor dictionarului de date este necesara conectarea ca SYS. Parola initiala pentru utilizatorul SYS este CHANGE_ON_INSTALL, dar, datorita importantei acestui utilizator, este recomandata schimbarea acesteia dupa instalare.


Utilizatorul SYSTEM este de asemenea creat odata cu crearea bazei de date si, in mod normal, este utilizat initial pentru crearea altor utilizatori si pentru administrarea bazei de date. Ca si SYS, si SYSTEM are drepturi depline asupra tuturor obiectelor bazei de date avand rolul acordat de DBA si, de aceea, de multe ori contul SYSTEM se utilizeaza pentru a administra baza de date. Totusi, este preferabil ca pentru administrarea bazei de date sa se creeze un utilizator separat cu privilegiile de DBA. Parola initiala pentru utilizatorul SYSTEM este MANAGER si se recomanda schimbarea ei imediat dupa crearea bazei de date.


Utilizatorii SYS si SYSTEM nu trebuie in nici un caz folositi pentru a crea sau interoga obiecte specifice aplicatiilor sau pentru a interactiona direct cu aplicatiile.






Iata un exemplu de mai multi utilizatori:


Nume cont utilizator

Parola

Descriere

INTERNAL

ORACLE (in cazul unei instalari “custom”)

Numele administratorului bazei de date cu care se realizeaza anumite operatii precum pornirea si oprirea bazei de date. INTERNAL nu este cu adevarat un utilizator, el este de fapt un alias al utilizatorului SYS cu privilegiul suplimentar SYSDBA.

SYS

CHANGE_ON_INSTALL

Numele administratorului bazei de date ce are urmatoarele roluri:

  • CONNECT;
  • RESOURCE;
  • DBA;
  • EXP_FULL_DATABASE;
  • IMP_FULL_DATABASE;
  • DELETE_CATALOG_ROLE;
  • EXECUTE_CATALOG_ROLE;
  • SELECT_CATALOG_ROLE;
  • AQ_ADMINISTRATION_ROLE;
  • AQ_USER_ROLE;
  • RECOVERY_CATALOG_OWNER;
  • SNMPAGENT.

SYSTEM

MANAGER

Numele utilizatorului bazei de date ce detine numai rolul DBA.

SCOTT

TIGER

Numele utilizatorului bazei de date ce detine rolurile CONNECT si RESOURCE.

DEMO

DEMO

Numele utilizatorului bazei de date ce detine rolurile CONNECT si RESOURCE. Este recomandata stergerea acestui cont in cazul in care nu este folosit.

DBSNMP

DBSNMP

Numele utilizatorului bazei de date ce detine rolurile CONNECT, RESOURCE si SNMPAGENT



Schema


Schema reprezinta o colectie de obiecte formata din tabelele, view-urile, cluster-ele, procedurile stocate, package-urile, etc. detinute de un anumit utilizator. Un utilizator poate avea o singura schema, care va avea acelasi nume cu acesta. O schema este creata pentru a administra o aplicatie, avand drepturi depline asupra tuturor obiectelor aplicatiei. Aceasta este creata implicit la crearea contului respectiv, de aceea numele ei si numele utilizatorului vor fi utilizate ca fiind echivalente.

Pentru a accesa un obiect din propria schema , un utilizator poate folosi doar numele acestuia. Pentru a accesa un obiect din schema altui utilizator, trebuie specificat atat numele obiectului cat si schema din care face parte, folosind sintaxa:


schema.obiect


Un user, fie el traian, va putea crea in schema proprie un tabel numit persoana, folosind comanda:


CREATE TABLE persoana . ;


Daca alt user doreste crearea tabelului persoana in schema userului traian, va folosi sintaxa:


CREATE TABLE traian.persoana . ;


Pentru interogari, traian va folosi :


SELECT * FROM persoana;


Iar oricare alt user:


SELECT * FROM traian.persoana;


Pentru interogarea, de exemplu a tabelului persoana, oricare alt utilizator va trebui sa posede privilegiul SELECT asupra tabelului persoana sau privilegiul de sistem SELECT ANY TABLE.


Trebuie sa existe macar 3 tipuri de acces la o aplicatie: administratorul bazei de date, dezvoltatorul si utilizatorul:


o       Administratorul bazei de date va trebui sa administreze structurile si obiectele bazei de date. El este de fapt proprietarul aplicatiei si al bazei de date. El trebuie sa detina o varietate de privilegii de sistem.

o       Dezvoltatorul va trebui sa poate efectua atat operatii de interogare (DQL), cat si de manipulare (DML) si definire (DDL) a datelor. Pentru aplicatiile de dimensiuni reduse, proprietarul aplicatiei este de obicei utilizat si pentru dezvoltare.

o       Utilizatorul, pe de alta parte, va putea efectua doar operatii de interogare (DQL) si manipulare a datelor (DML), fara a avea insa permisiunea de a efectua operatii de definire a datelor (DDL).


Crearea, modificarea si distrugerea utilizatorilor


Crearea unui cont de utilizator inseamna implicit si asigurarea conditiilor pentru formarea schemei de obiecte asociate acestui cont.

Practic, la crearea unui utilizator trebuie specificate cel putin urmatoarele elemente:


o       numele utilizatorului care va fi de fapt numele schemei de obiecte;

o       parola ca modalitate standard de autentificare in baza de date (mai exista si alte posibilitati de autentificare “externally” tinand seama de conturile utilizatorilor sistemului de operare local sau retea);

o       tablespace-ul default in care vor fi stocate implicit obiectele din schema asociata contului;

o       tablespace-ul pentru segmentele temporare din care va fi utilizat spatiul de memorie suplimentar necesar operatiilor de sortare costisitoare.


De asemenea, tot in momentul definirii unui cont, se poate determina si modul in care utilizatorul poate folosi spatiul de stocare dedicat bazei de date, prin precizarea cotelor de spatiu in diferitele tablespace-uri.  


Modul in care un utilizator (sau operatiile initiate de acesta) poate solicita resursele disponibile serverului bazei de date poate fi reglementat prin asa-numitele profile. Acestea includ clauze specifice referitoare la timpul de procesor alocat, numarul de sesiuni concurente, timpul de conectare, etc., dar si clauze privind utilizarea parolelor, adica perioada de valabilitate, perioada de gratie pentru schimbarea parolei, numarul de incercari esuate de conectare, blocarea contului, etc.


Iata sintaxa crearii utilizatorilor bazei de date prin comanda SQL CREATE USER:


CREATE USER nume_utilizator

IDENTIFIED

[DEFAULT TABLESPACE nume_spatiu_tabel]

[TEMPORARY TABLESPACE nume_spatiu_tabel]

[QUOTA nume_spatiu_tabel] .

[PROFILE nume_profil]

[PASSWORD EXPIRE]

[ACCOUNT


Pentru a crea un alt utilizator, trebuie ca utilizatorul ce realizeaza acest lucru sa detina privilegiul de sistem CREATE USER.


Iata un exemplu in care este creat utilizatorul traian cu parola cornel , avand ca spatiu tabel implicit ts_alfa, spatiu tabel temporar ts_temp si cota spatiu nelimitata pe spatiile ts_alfa, ts_beta si ts_temp:


CREATE USER traian

IDENTIFIED BY cornel

DEFAULT TABLESPACE ts_alfa

TEMPORARY TABLESPACE ts_temp

QUOTA UNLIMITED ON ts_alfa

QUOTA UNLIMITED ON ts_beta

QUOTA UNLIMITED ON ts_temp;


Prin comanda SQL ALTER USER se pot schimba caracteristicile unui utilizator, spre exemplu parola:


ALTER USER traian

IDENTIFIED BY edi;


Prin comanda SQL DROPUSER se realizeaza distrugerea unui utilizator. Obiectele aflate in schema utilizatorului trebuiesc distruse inainte de distrugerea acestuia, acest lucru putand fi realizat folosind optiunea CASCADE a comenzii:


DROP USER traian CASCADE;


Crearea, modificarea si stergerea rolurilor


Crearea se realizeaza prin comanda SQL CREATE  ROLE:


CREATE ROLE rol

[NOT IDENTIFIED/IDENTIFIED ]


o       NOT IDENTIFIED – orice utilizator caruia ii va fi acordat rolul creat nu va trebui identificat in momentul cand activeaza rolul;

o       IDENTIFIED        – orice utilizator caruia ii va fi acordat rolul creat va trebui identificat;

o       Daca ambele optiuni de mai sus sunt omise, optiunea implicita este NOT IDENTIFIED;


CREATE ROLE rol_traian;

CREATE ROLE ana IDENTIFIED BY maria;


Un utilizator poate crea un rol numai daca detine privilegiul de sistem CREATE ROLE.


Prin SQL ALTER ROLE se poate schimba modul de identificare:


ALTER ROLE ana NOT IDENTIFIED;


Distrugerea unui rol se poate face prin comanda SQL DROP ROLE:


DROP ROLE ana;




Acordarea rolurilor sau privilegiilor


Prin comanda SQL GRANT se pot acorda privilegii de sistem, la nivel de obiect sau roluri, sintaxa sa fiind insa diferita in functie de tipurile de privilegii. De asemeni, ea poate fi folosita doar daca utilizatorul are acest drept, acordat cu optiunea ADMIN OPTION sau privilegiul GRANT ANY PRIVILEGE, respective GRANT ANY ROLE.


Iata sintaxa pentru acordarea de privilegii de sistem sau roluri:


GRANT


TO [,] .

[WITH ADMIN OPTION]


o       PUBLIC este folosit pentru acordarea rolurilor sau privilegiilor de sistem tuturor rolurilor si utilizatorilor existenti;

o       WITH ADMIN OPTION permite utilizatorului (sau rolului) sa acorde la randul lui rolul (sau privilegiul) altui utilizator (sau rol).


Un rol nu se poate acorda lui insusi in mod direct sau printr-un set circular de atribuiri. Daca se incearca acest lucru, Oracle va genera un mesaj de eroare.


Acordarea privilegiilor de sistem CREATE CLUSTER si CREATE TABLE pentru rolul rol_traian:


GRANT CREATE CLUSTER, CREATE TABLE

TO rol_traian;


Permisul accesului a baza de date:


GRANT CREATE SESSION

TO traian;


Acordarea rol_traian lui traian:


GRANT rol_traian

TO traian;


Iata sintaxa pentru acordarea de privilegii la nivel de obiect:


GRANT [coloana [,coloana] . )]

[, [coloana [.coloana] . )]] .

ON obiect

TO [,] .

[WITH GRANT OPTION}]


o       ALL este folosit pentru a acorda toate privilegiile pentru obiectul respectiv;

o       Coloana repezinta coloana pentru care este acordat privilegiul. Implicit, daca nu se specifica nimic, privilegiul se acorda pentru toate coloanele;

o       WITH GRANT OPTION permite celui care ii sunt acordate privilegiile de a le acorda la randul lui altui utilizator.


Exemple:


GRANT SELECT ON studenti

TO traian, rol_traian

WITH GRANT OPTION;


GRANT UPDATE(nume, prenume) ON studenti

TO traian;


GRANT INSERT, DELETE ON studenti

TO traian;


GRANT ALL ON studenti

TO traian;


GRANT SELECT ON studenti

TO PUBLIC;


Revocarea rolurilor si privilegiilor


Pentru a revoca un privilegiu sau un rol se foloseste comanda SQL REVOKE care, la fel ca in cazul comenzii GRANT, dispune de sintaxa diferite in functie de tipurile de privilegii la care se refera. Astfel:


In cazul revocarii unui privilegiu de sistem sau a unui rol se foloseste sintaxa:


REVOKE[,] .

FROM [,] .


Daca se revoca un rol care contine alte roluri, intregul set de privilegii asociat cu fiecare rol va fi revocat. Daca oricare dintre rolurile si privilegiile continute de rolul anulat a fost acordat si in mod direct utilizatorului, atunci utilizatorul va continua sa aiba privilegiile corespunzatoare.


Exemple:


REVOKE CREATE CLUSTER

FROM rol_traian;


REVOKE rol_traian

FROM traian;


In cazul revocarii privilegiilor la nivel de obiect, sintaxa este urmatoarea:


REVOKE [{coloana[,coloana] . )]

[, [(coloana[,coloana[,coloana] . )]] .

ON obiect

FROM , [] .

[CASCADE CONSTRAINTS]

[FORCE]


o       CASCADE CONSTRAINTS indica faptul ca va sterge orice restrictie de integritate referentiala definite asupra tabelului de catre utilizatorul respective;

o       FORCE forteaza revocarea privilegiului EXECUTE asupra unui tip de date definit de catre utilizator care are tabele dependente, aceste tabele devenind in acest caz invalide. In absenta acestei optiuni, daca exista tabele dependente, revocarea privilegiului EXECUTE asupra tipului de date va esua.


Exemple:


REVOKE ALL ON persoana FROM traian;


REVOKE SELECT ON persoana FROM PUBLIC;


Activarea si dezactivare rolurilor unui utilizator


In cadrul unei sesiuni, rolurile pot fi activate sau dezactivate prin comanda SQL SET ROLE:


SET ROLE


o       Lista rolurilor specifica rolurile care sunt activate pentru sesiunea curenta. Toate rolurile ce nu sunt listate vor fi dezactivate pentru sesiunea curenta;

o       ALL activeaza pentru sesiunea curenta toate rolurile utilizatorului, mai putin cele enumerate in clauza EXCEPT, daca ea exista. Aceasta optiune nu poate fi folosita pentru activarea rolurilor cu parola.

o       NONE dezactiveaza toate rolurile pentru sesiunea curenta.



Exemple:


SET ROLE rol_traian;


SET ROLE ana IDENTIFIED BY maria;


SET ROLE ALL;


SET ROLE ALL EXCEPT ana;


SET ROLE NONE;


Pentru a determina rolurile active din sesiunea curenta se poate examina vederea SESSION_ROLES din dictionarul de date. Numarul maxim de roluri care pot fi active la un anumit moment este specificat de catre parametrul de initializare MAX_ENABLED_ROLES.






Bibliografie:


Florentin Eugen Ipate, Monica Popescu – Dezvoltarea aplicatiilor de baze de date                         in Oracle 8 si Forms 6;


Marin Fotache, Catalin Strambei, Liviu Cretu – Ghidul dezvoltarii aplicatiilor profesionale in Oracle 9i2;


Internet – Oracle 7 ebooks.



Bergher Eduard an III grupa 331














Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright