Securitate Multinivel Pentru Baze de Date
Lista figurilor
Lista tabelelor
Lista acronimelor
Introducere
Am ales să realizez lucrarea de licență cu titlul „Securitate multinivel pentru baze de date” deoarece consider că domeniul securității este unul foarte vast și cu multe implicații în viața reală. Asigurarea unei baze de date e foarte importantă pentru că datele memorate sunt esențiale în desfășurarea unei activități. Faptul că o bază de date este folosită de toți cei dintr-o companie, de la simpli angajați la manageri și faptul că aceștia realizează anumite operații cu baza de date duce la necesitatea asigurării unei securități multinivel, bazată pe existența a mai multor nivele de securitate, atât pentru utilizatorii ce folosesc acea bază de date cât și pentru obiectele existente în aceasta. Securitatea unei baze de date se bazează pe anumite politici predefinite și este asigurată de către administratorul bazei de date.
Protecția datelor împotriva accesului neautorizat devine din ce în ce mai importantă pe măsură ce crește numărul organizațiilor care iși încredințează datele sistemelor de baze de date. O importantă funcționalitate pe care fiecare sistem de management al bazelor de date (DBMS) ar trebui sa o ofere este abilitatea de a proteja datele și resursele sistemului de modificări nedorite, furturi sau dezvăluiri neautorizate.Din moment ce datele dintr-o bază de date sunt legate între ele prin relații semantice , un prejudiciu adus bazei de date , nu afectează un singur utilizator , ci întreg sistemul. O soluție completă pentru a asigura securitatea bazei de date trebuie să țină cont de trei criterii: confidențialitate, integritate și disponibilitate.
Securitatatea este asigurată de către diferite componente ale DBMS. În particular , mecanismul de control al accesului asigură confidențialitatea datelor. Oricând un utilizator incearcă să acceseze un obiect , mecanismul de control al accesului verifică drepturile utilizatorului folosind un set de autorizații , stabilit de obicei de un administrator. O autorizație definește pentru fiecare utilizator ce acțiune poate face asupra obiectelor și este acordată pe baza unor politici de securitate ale companiei.
Integritatea datelor este asigurată pe de o parte de mecanismul de control al accesului iar pe de altă parte de constrângerile semantice .De fiecare dată când un utilizator încearcă să modifice datele, mecanismul de control al accesului verifică daca acel utilizator are drepturile necesare, iar subsitemul ce se ocupă cu sementica verifică daca datele noi sunt conforme din punct de vedere semantic.
Mecanismele de autorizare oferite de către DBMS pot fi clasificate în două mari categorii :
mecanisme de autorizare discreționare și mandatorii (obligatorii). Mecanismele de control al accesului discreționare sunt caracterizate de un nivel înalt al flexibilității, ceea ce le face potrivite pentru o gamă largă de aplicații.Aceste mecanisme discreționare permit utilizatorilor să acorde altor utilizatori autorizația de acces după cum doresc.Principalul dezavantaj al modelelor discreționare ale controlului accesului este vulerabilitatea acestora la atacuri malițioase deoarece acestea nu impun niciun control asupra modului de propagare a informației.
Pe de altă parte , politicile mandatorii asigură un grad ridicat de protecție, prevenind orice fel de flux nedorit de informație.Aceste politici necesită o clasificare strictă a utilizatorilor și a obiectelor pe nivele de securitate.
Controlul accesului este bazat pe un set de axiome ce declară relațiile ce trebuie să existe între nivelul de securitate a unui obiect și cel al unui utilizator pentru ca acelui utilizator să i se acorde accesul la obiect. Acest tip de securitate este cunoscut ca și securitate multinivel.
Pentru realizarea părții practice a acestei lucrări, am construit o bază de date pentru o firmă de telecomunicații. La baza de date vor avea acces clienții, operatorii și supervizorii, astefel vom avea trei nivele de securitate. Fiecare din acești utilizatori vor avea anumite privilegii și drepturi asupra datelor în funcție de rolul pe care îl are și operațiile ce îi sunt permise cu baza de date. Pentru realizarea bazei de date am folosit sistemul de management MYSQL iar pentru construirea aplicației, am folosit limbajul PHP și serverul Web Apache.
Capitolul 1. Baze de date – Concepte generale
1.1 Ce este o bază de date?
Sistemele de baze de date sunt o componentă esențială a vieții de zi cu zi în societatea modernă. Zilnic, majoritatea oamenilor desfășoară activități ce implică interacțiunea cu o bază de date: depunerea sau extragerea unor sume de bani din bancă, rezervarea unor bilete de avion sau cumpărarea unor produse .
În sensul cel mai larg, o bază de date este o colecție de date corelate din punct de vedere logic, ce reflectă un aspect al lumii reale și care este destinată unui grup de utilizatori .
O bază de date este o colecție de date creată si menținută computerizat, care permite operații de introducere, ștergere, actualizare și interogare a datelor.
Componentele unui sistem de baze de date sunt: hardware, software, utilizatori și date persistente. Sistemele de baze de date sunt instalate, de obicei, pe calculatoare standard sau pe stații multiprocesor puternice, performanțele generale ale acestora (numărul și viteza procesoarelor, dimensiunea și viteza de operare a memoriei principale) influențează performanțele sistemului de baze de date. Ceea ce este cel mai important pentru partea hardware a unui sistem de baze de date, este capacitatea memoriei secundare , folosită pentru memorarea datelor persistente.
Între colecția de date memorate fizic în fișiere pe hard-discuri și utilizatorii sistemului există un nivel software, numit sistem de gestiune a bazei de date (SGBD) .
În figura următoare se pot observa componentele unui sistem de baze de date :
Figura 1.1 Componentele unui sistem de baze de date
1.2 Sistemul de gestionare a bazei de date (SGBD)
Sistemul de gestionare a bazei de date este un sistem de programe ce permite utilizatorului definirea, crearea și întreținerea bazei de date și accesul controlat la aceasta. SGBD este componenta software a unui sistem de bază de date care interacționează cu toate celelalte componente ale acestuia, asigurând legătura și interdependența între elementele sistemului.
Participanții la alcătuirea, configurarea și utilizarea bazelor de date sunt:
Administratorii de date – se ocupă cu gestionarea resurselor de date, cu planificarea,dezvoltarea și întreținerea standardelor și a politicilor, dar și cu proiectarea logică a bazei de date.
Administratorii de baze de date – responsabili cu realizarea fizică a bazei de date, dar și de securitatea și controlul integrității.
Proiectanții de baze de date
Programatorii de aplicații
Utilizatorii finali
Rolul unui SGBD în cadrul unui sistem de bază de date este de a:
1. defini și descrie structura bazei de date, folosind un limbaj propriu specific (DDL)
2. realiza accesul la date pentru diferite operații (inserare, interogarea, actualizare ) cu un limbaj de manipulare a datelor (DML) numit și limbaj de interogare . Un astfel de limbaj este SQL . 3.oferi posibilitatea de a crea unor așa numite moduri de vizualizare a bazei de date (views) pentru a afișa doar acele date ale bazei de date ce sunt utile utilizatorului.Modurile de vizualizare au ca principal avantaj asigurarea unui anumit nivel de securitate , existând opțiunea excluderii unor date la care anumiți utilizatori nu ar trebui să aibe acces.
4. asigura protecția bazei de date sub cele două aspecte: securitatea și integritatea datelor. Astfel, se impun restricții pentru a împiedica accesul utilizatorilor neautorizați, se menține integritatea datelor stocate și se oferă posibilitatea utilizării simultane, asigurându-se astfel accesul partajat la baza de date.
Evoluția SGBD a fost determinată, în principal, de modelul de date pe care-l implementează la organizarea datelor în BD. Etapele în evoluția SGBD sunt prezentate în continuare:
Până în anii 60 datele erau organizate doar în fișiere, gestionate de programe scrise în diferite limbaje de programare universale (exemple: Cobol, Fortran etc.).
La sfârșitul anilor 60 a apărut modelul arborescent de organizare a datelor în BD și primele SGBD care erau ierarhice și implementau acest model (exemplu: IMS).
La începutul anilor șaptezeci a apărut modelul rețea de organizare a datelor și SGBD rețea ce implementau acest model (exemple: IDMS, SOCRATE).
La sfârșitul anilor 70 și începutul anilor 80 a apărut pentru prima oară modelul relațional de organizare a datelor și ulterior s-au realizat SGBD relaționale ce implementau acest model (exemple: Oracle, Informix, DB2, SQLServer, Visual Foxpro, Access etc.). Este generația a doua de SGBD, care prin simplitate și interactivitate domină piața actuală.
La sfârșitul anilor 80, începutul anilor 90 a apărut modelul orientat obiect de organizare a datelor și SGBD orientate obiect ce implementau acest model (exemple: Gemstone, O2, Jasmine etc.). Aceasta este generația a treia de SGBD care este în plină dezvoltare acum.
1.3 Arhitectura unei baze de date
Arhitectura internă a unui sitem de baze de date conține trei nivele funționale : nivelul extern, nivelul conceptual și nivelul intern (figura 1.2). Nivelul extern este reprezentat de o colecție de scheme externe ,ce nu sunt altceva decât vederi ale diferitelor grupuri de utilizatori. Din punctul de vedere al administratorului de baze de date ce integrează toate vederile ce privesc baza de date într-un singur model, există așa numita schemă conceptuală. Pentru cel ce implementează baza de date, care de multe ori coincide cu administratorul bazei de date, ce privește baza de date ca o colecție de fișiere memorate pe diferite medii externe (hard-discuri) , avem nivelul fizic.
După cum se poate vedea în figura 1.2, un sistem de baze de date suportă o schemă internă, o schemă conceptuală și mai multe scheme externe, toate aceste scheme sunt descrieri diferite ale aceleiași colecții de date, care există doar în nivelul fizic.
Figura 1.2 Arhitectura internă a unui SGBD
În cadrul unei scheme externe , informațiile pot fi luate ca atare din nivelele logic și fizic sau pot fi deduse din aceste informații pe baza unor calcule. Alte informații ce pot să apară în vederi și care de obicei nu sunt prevăzute în schemele conceptuale privesc numărul de elemente dintr-o mulțime, media valorilor unei mulțimi de elemente numerice și alte informații asemănătoare. Vederile sunt transparente pentru un utilizator obișnuit, el poate să obțină și să modifice informațiile folosind anumite comenzi cu o structură dată. Structura unei vederi este sintetizată grafic într-o diagramă Entitate-Relație. Modelul Entitate-Relație definește mulțimile de entități și asocierile dintre ele, dar nu impune niciun mod specific de structurare și prelucrare a datelor.
O entitate se referă la un aspect al realității obiective ce poate fi deosebit de restul universului și poate fi un obiect fizic, o activitate, un concept, etc. Orice entitate poate fi descrisă prin intermediul atributelor sale. Un atribut este o proprietate care descrie un anumit aspect al unei entități. Toate entitățile similare, ce pot fi descrise prin aceleași atribute, aprțin unui același tip de entitate, iar toate entitățile de același tip dintr-o bază de date reprezintă o mulțime de entități.
De exemplu, tipul de entitate „abonat” reprezintă orice persoană ce solicită anumite beneficii companiei și poate fi descris prin mai multe atribute, dintre care o parte sunt atribute de identificare a persoanei (Nume, Prenume, CNP, Adresă) , iar altele sunt atribute ce au legătură cu beneficiile ce le are acesta (Tip abonament).
Există două tipuri de entități : entități normale (puternice,obișnuite) și entități slabe (dependente). Entitățile slabe pot exista doar dacă există o entitate normală cu care sunt asociate. Corespondețele dintre entitățile din două sau mai multe mulțimi de entități se numesc asocieri. Gradul unei asocieri este dat de numărul de mulțimi de entități asociate și pot fi binare sau multiple. Asocierile binare sunt , la rândul lor, de trei categorii, după numărul de elemente din fiecare din cele două mulțimi asociate : asociere „unul-la-unul”, notată 1:1, asociere „unul-la-multe”, notată 1:N , respectiv asociere de tipul „multe-la-multe” , notată cu M:N .
Cele trei categorii de asocieri binare sunt prezentate în figura următoare :
Figura 1.3 Tipuri de asocieri între entități : a) asociere 1:1 ; b)asociere 1:N ; c)asociere M:N
Cardinalitatea (multiplicitatea) unei asocieri față de o mulțime de entități este numărul maxim de elemente din acea mulțime ce pot fi asociate cu un element din altă mulțime a asocierii.Raportul dintre valorile cardinalităților unei asocieri binare se numește raport de cardinalitate.
Diagrama Entitate-Relație reprezintă medelul Entitate-Asociere prin mulțimile de entități și asocierile dintre acestea. Notațiile folosite în reprezentarea diagramei sunt următoarele : un tip de entitate e reprezentată printr-un dreptunghi, iar atributele tipului de entitate prin elipse conectate printr-o linie continuă la acesta. O asociere dintre două tipuri de entități e reprezentată printr-un romb conectat prin link-uri la tipurile de entități asociate , în el fiind inscris numele acelei asocieri.
Aceste notații pot fi observate mai bine in figura 1.4 :
Figura 1.4 Notațiile Diagramei Entitate-Relație (E-R)
Din punct de vedere al schemei conceptuale se combină subschemele vederilor ce privesc o anumită aplicație într-un model unitar. Cel mai folosit model și cel pe care îl vom folosi și noi este modelul relațional ale cărui concepte principale sunt cele de relație și operațiile cu acestea.
Schemele interne descriu diferitele fișiere utilizate pentru memorarea informațiilor bazei de date și modul de operare cu ele .
1.4 Sisteme de gestionare a bazelor de date relaționale (SGBDR)
Bazele de date relaționale sunt un tip de baze de date în care datele, văzute ca și atribute ale entităților reale, sunt stocate în tabele și sunt legate între ele prin relații. Acest mod de structurare a datelor, bazat pe legături între date, permite eliminarea redundanței, astfel încât stocarea și,mai ales, modificarea unei informații se face într-un singur loc, iar, din punct de vedere funcțional, această structură permite regăsirea, filtrarea, ordonarea și agregarea datelor, în mod natural.
Un sistem de gestiune a bazelor de date relaționale se definește ca fiind un sistem de gestiune care utilizează organizarea datelor conform modelului relațional. Conceptul de bază al modelului relațional este acela de relație sau tabelă.
Structura relațională a datelor cuprinde următoarele componente: domeniu, relație(tabelă), atribut, tuplu, cheia unei relații.
Domeniul este ansamblul de valori caracterizat printr-un nume (domeniu de valori). El poate fi precizat explicit, prin enumerarea tuturor valorilor care aparțin domeniului sau implicit prin precizarea proprietăților pe care le au valorile din domeniu.
Relația este reprezentată printr-un tabel bidimensional (tabela de date) în care liniile tabelului reprezintă tuplurile, iar coloanele corespund atributelor Toate tuplurile într-o relație trebuie să fie unice. Numărul tuplurilor dintr-o tabelă este cardinalul tabelei, iar numărul valorilor dintr-un tuplu reprezintă gradul tabelei.
O relație fiind o mulțime (de tupluri) nu poate contine elemente duplicat, rezultă că tuplurile pot fi deosebite între ele prin valorile aflate pe una sau mai multe coloane din relație. Cheia unei relații reprezintă o mulțime minimală de atribute ale căror valori identifică in mod unic un tuplu al relației respective.
Tipurile de chei întâlnite în sistemele de baze sunt : supercheia,cheia candidat, cheia primară și cheia străină.
Supercheia este un atribut sau un set de atribute care identifică în mod unic un tuplu din interiorul unei relații. O supercheie poate conține și atribute care nu sunt necesare identificării unice a tuplului. Cheia candidat este o supercheie minimă, pentru care nici o submulțime nu este supercheie în cadrul relației respetive. Cheia primară este cheia candidat care este selectată(din toate cheile candidat identificate) pentru a identifica în mod unic tuplurile din cadrul unei relații. Cheia străină este un atribut sau o mulțime de atribute din cadrul unei relații, care se potrivesc cu o cheie candidat din altă relație.
În continuare sunt prezentate regulile relaționale de integritate pentru corectitudinea datelor.
Din moment ce fiecare atribut are un domeniu asociat, există anumite constrângeri (denumite constrângeri de domeniu) sub formă de restricții asupra mulțimii de valori permise pentru atributele relațiilor. Pe lângă acestea, există două reguli de integritate care reprezintă restricții sau constrângeri ce se aplică tuturor instanțelor unei baze de date. Pentru modelul relațional, acestea sunt: integritatea entităților și integritate referențială.
Null-ul reprezintă valoarea unui atribut care este în mod curent necunoscută sau nu este aplicabilă tuplului respectiv. Un null nu este același lucru cu o valoare numerică egală cu 0 sau cu un text completat cu spații; zerourile și spațiile sunt valori, pe când null-ul semnifică absența unei valori. Null-urile pot crea probleme privind implementarea. Această dificultate apare deoarece modelul relațional se bazează pe calculul predicativ de ordinul întâi, care reprezintă o logică bazată pe două valori, sau booleană, unde singurele valori admise sunt adevărat sau fals. Introducerea null-urilor înseamnă că trebuie să lucrăm cu o logică polivalentă.
Prima regulă de integritate se aplică cheilor primare ale relațiilor. Într-o relație, niciun atribut al unei chei primare nu poate fi null, această constrângere se numește NOT NULL. Dacă admitem un null pentru orice parte a unei chei primare, aceasta implică faptul că nu toate atributele sunt necesare pentru a deosebi tuplurile, ceea ce contrazice definiția cheii primare.
A doua regulă de integritate se aplică cheilor străine. Dacă într-o relație există o cheie străină, valoarea acesteia trebuie ori să coincidă cu valoarea unei chei candidat a unui tuplu în relația sa de bază, ori să fie în întregime null.
Pe lângă aceaste restrcții , mai avem urmatoarele constrângeri pentru coloanele unei relații : constrângerea DEFAULT și constrângerea CHECK. Constrângerea DEFAULT este folosită pentru stabilirea unei valori implicite pentru un atribut al entității. În cazul în care la inserarea unei înregistrări nu se specifică valoarea unui atribut, atunci acesta primiște valoarea implicită sau valoarea null. Dacă nu a fost definită nicio valoare implicită dar nci nu sunt admise valori null, atunci se generează o eroare. Constrângerea CHECK este după cum îi spune și numele o constrângere de verificare.
Capitolul 2. Sistemul de management MySQL și Limbajul PHP
2.1 Sistemul de management al bazelor de date MySQL
MySQL este un sistem de gestiune a bazelor de date relaționale, produs de compania suedeza MySQL AB și este cel mai popular SGBD open-source la ora actuală. În cadrul sistemului a fost implementt de la început limbajul relațional pentru interogări cu baza de date, SQL.
Pentru construirea bazei de date și pentru administrarea acesteia am folosit MySQL Workbench , ce oferă o interfață ușor de utilizat și care nu consumă multă memorie pentru a rula, cu alte cuvinte perfectă pentru o bază de date administrată local. MzSQL are o interfață intuitivă în browser cu care putem administra baza de date, crea tabele, vederi și alte obiecte sau putem face interogări în baza de date și rula scripturi SQL. De asemenea există și posibilitatea folosirii linei de comandă pentru inserarea comenzilor SQL .
La prima rulare a programului MySQL este necesară crearea unei conexiuni cu serverul MySQL. Trebuie ales numele serverului și portul pe care rulează acesta. În cazul nostru, serverul este local, numele lui fiind localhost, iar ca port am ales 1234, deoarece nu dorim ca pe acest port să mai ruleze altă aplicație.
Figura 2.1 Prima pagină MySQL Workbench pentru realizarea conexiunii cu serverul MySQL
Utilizatorii accesează MySQL folosind conturile de utilizatori ai bazei de date. Odată cu instalarea MySQL unele conturi sunt create automat, de exemplu, utilizatorul root, fiind un cont cu privilegii de administrator. Inițial trebuie să te loghezi cu acest cont de administrator pentru a putea crea, gestiona noi conturi de utilizatori și asigura securitatea bazei de date. Un cont de utilizator este identificat de numele acestuia și definește atributele pe care le poate avea acesta, cum ar fi : parola pentru autentificarea în baza de date, privilegii și roluri. Pentru a vedea utilizatorii unei baze de date folosind interfața grafică a MySQL, vom selecta tabul Users and Privileges.
Figura 2.2 Vizualizarea utilizatorilor bazei de date în MySQL Workbench
Selectând unul din acești utilizatori vom putea vedea informații despre acesta. Tot aici putem crea un nou utilizator sau putem șterge unul existent dar și modifica informațiile acestuia. Putem modifica parola cu care utilizatorul se autentifică, putem seta dacă aceasta expiră sau nu și putem adăuga sau revoca unele roluri și privilegii.
Printre privilegiile ce pot fi acordate unui utilizator sunt cele legate de crearea unei noi tabele, crearea unui rol sau a unei vederi.
2.2 Limbajul SQL
SQL (Structured Query Language – Limbaj Structurat de Interogare) este un limbaj de programare specific pentru manipularea datelor în sistemele de management a bazelor de date relaționale, iar la origine este un limbaj bazat pe algebra relațională. Acesta are ca scop inserarea datelor, interogații, actualizare și ștergere, modificarea și crearea schemelor, precum și controlul accesului la date. A devenit un standard în domeniu, fiind cel mai popular limbaj utilizat pentru creearea, modificarea, regăsirea și manipularea datelor de către SGBD-urile relaționale. Pe lângă versiunile standardizate ale limbajului, există o mulțime de variante, specifice anumitor SGBD-uri.
Comenzile SQL sunt de 2 tipuri: comenzi de creare a tabelelor, de ștergere și de modificare, iar pe de altă parte comenzi de maniulare a datelor, interogări de bază și de actualizare a bazei de date. Cea mai des utilizată instrucțiune în SQL este instrucțiunea SELECT, ce are drept clauze INTO, pentru a transfera rezultatul interogării într-o nouă tabelă sau WHERE, pentru a specifica condiții ce trebuiesc îndeplinite de coloanele tabelei din care se face selecția.
Limbajul de manipulare a datelor (DML) este un subset al SQL utilizat pentru a adăuga, actualiza sau șterge date. Instrucțiunile limbajului de manipulare a datelor sunt : INSERT, UPDATE, DELETE.
INSERT este o intrucțiune ce inserează un articol într-o tabelă: INSERT INTO tabel (câmp1, câmp2, …) VALUES (valoare1, valoare2, …);
UPDATE actualizează un set de articole: UPDATE tabel SET câmp = valoare [WHERE condiție];
DELETE se folosește pentru a șterge un set de articole: DELETE FROM tabel [WHERE condiție];
Comenzile de creare și modificare de tabele fac parte din limbajul de definire a datelor (DDL).
Crearea unui table se realizează folosind CREATE TABLE, pentru a modifica structura unui tabel existent prin redenumirea, adăugarea sau ștergerea structurii unei coloane se face cu ALTER TABLE. Pentru ștergerea tuturor articolelor dintr-un tabel există comanda TRUNCATE TABLE iar daca dorim să ștergem un tabel cu totul, folosim DROP TABLE.
O altă parte componentă a limbajului SQL este limbajul de control al datelor (DLC) , care autorizează utilizatorii și grupurile ce lucrează cu o anumită bază de date. Instrucțiunile limbajului de control sunt GRANT , cu care se acordă unul sau mai multe drepturi unui utilizator sau grup și REVOKE , pentru a elimina unul sau mai multe privilegii.
Folosirea comenzii GRANT împreună cu opțiunea WITH GRANT OPTION permite utilizatorului să dea privilegii echivalente cu ale sale altor utilizatori.
2.3 Limbajul PHP
Limbajul PHP este un limbaj de tip script creat special pentru aplicații de tip Web. Liniile de cod PHP trebuie incluse în interiorul unei pagini Web scrisă în HTML. Limbajul PHP este un limbaj interpretat de server, acest lucru făcând posibilă generarea flexibilă a unor pagini dinamice, ce oferă informații în timp real.
Contextul în care limbajul PHP poate fi utilizat presupune existența unui server Web.Schema generală de lucru este prezentată în figura 2.3.
Figura 2.3 Schema generală a realizării unei pagini Web folosind baze de date MySQL
Un utilizator lansează prin intermediul unui navigator Web, de exemplu Internet Explorer, o cerere HTTP(HyperText Transport Protocol) către un server Web pentru o pagină cu extensia PHP.
PHP este gratuit și portabil,acesta fiind disponibil pentru mai multe sisteme de operare. Ca și server de Web am folosit Apache.
Arhitectura tip WAMP a devenit populară în industria web ca modalitate rapidă, gratuită și integrată de dezvoltare a aplicațiilor, aceasta conținând Windows, Apache, MySQL și PHP. Windows ocupă rolul de sistem de operare pentru toate celelalte aplicații, MySQL gestionează bazele de date, Apache are rol de server web, iar PHP are rol de interpretator și comunicator între acestea.
Capitolul 3. Securitatea Bazelor de Date
3.1 Concepte ale securității bazelor de date
Datele sunt foarte importante pentru orice companie și din acest motiv , securitatea bazelor de date este fundamentală. Bazele de date fiind partajate, în cadrul lor existând informații variate, o pierdere a datelor dintr-o bază de date ar afecta nu doar un utilizator, ci întreaga companie.
Principalele concepte legate de securitatea unei baze de date sunt : confidențialitatea, integritatea și disponibilitatea.
Figura 3.1 Concepte de bază pentru securitatea bazelor de date
Confidențialitatea este definită ca fiind asigurarea accesabilității informației doar de către persoanele autorizate în accesarea și folosirea acestor informații. De exemplu , dacă avem în baza de date un tabel cu angajați, ce conține informații precum salariul acestora, confidențialitatea ar presupune ca un anumit angajat sa își poată vedea doar prorpriul salariu și nu și pe al celorlalți.
Integritatea datelor reprezintă protecția împotriva unor modificări neautorizate a datelor. În același context, unui angajat nu trebuie sa îi fie permis să modifice propriul salariu, de acest lucru ocupându-se o persoană autorizată din departamentul de contabilitate.
Disponibilitatea se referă la asigurarea accesului la date pentru utilizatorii autorizați să vadă acele date.
Protecția datelor este asigurată de diferite componente ale DBMS. În particular, mecanismul de control al accesului asigură confidențialitatea. De fiecare dată când un utilizator încearcă să acceseze un obiect al bazei de date, mecanismul de control al accesului verifică drepturile acelui utilizator, drepturi ce au fost setate de către un administrator. Aceste autorizări sunt acordate conform unor politici de securitate.
Mecanimsul de control al accesului împreună cu restricțiile semantice de integritate realizează integritatea bazei de date. Când un utilizator încearcă sa modifice datele, mecanismul de control verifică daca există drepturi corespunzătoare pentru modificare, în timp ce subsistemul de integritate semantica verifică daca datele noi sunt corecte din punct de vedere semantic.
Controlul accesului în cadrul unui sistem de management a unei baze de date este împărțit în două mari categorii : mecanism de control al accesului discreționar și mandatoriu.
Controlul accesului discreționar (DAC) presupune permitivitatea utilizatorilor de a transfera drepturile pe care le dețin altor utilizatori pe când controlul accesului mandatoriu presupune existența unui singur administrator de securitate care se ocupă de acordarea drepturilor și privilegiilor celorlalți utilizatori după anumite politici de securitate.
O altă modalitate de control al accesului este cel bazat pe roluri, unde fiecărui utilizator îi sunt acordate privilegii în funcție de rolul său , datele accesibile unui grup de utilizatori pot sau nu pot fi disponibile altui grup. De exemplu un supervizor al unei firme de telecomunicații ar putea avea acces la toate informațiile firmei, angajații din departamentul de resurse umane să aibe acces la informații despre angajații acelei firme, iar departamentul de contabilitate sa poată accesa tabelele cu comenzi și rapoartele de vânzări. Trebuie cunoscut cine este administratorul bazei de date, întrucât el se ocupă de punerea în practică a politicilor de securitate.
3.2 Controlul accesului discreționar
Autentificarea este primul pas ce trebuie să existe pentru a pune în aplicare un plan de securitate. Înainte de a putea primi autorizația de a utiliza resursele bazei de date,trebuie să fie creat un cont pentru fiecare utilizator ,denumite și ID-uri. Pe lângă acest ID , fiecare utilizator va primi și o parolă, cu care se va conecta la baza de date. Parola trebuie să aibe o complexitate ridicată pentru o siguranță crescută și trebuie modificată regulat, de aceea administratorul bazei de date setează ca parola să expire după un anumit timp.
Atunci când un utilizator al unui sistem de management al bazei de date își pierde dreptul de acces la acel DBMS ,de exemplu când un angajat părăsește o firmă, administratorul bazei de date (DBA), trebuie să șteargă contul corespunzător acelui utilizator cât de repede posibil. Uneori, acest lucru poate fi destul de complicat doarece contul nu poate fi șters dacă , de exemplu, acel user deține unele obiecte în baza de date. Din acest motiv este recomandat să limităm numărul de utilizatori ai bazei de date ce pot crea obiecte .
Unele DBMS oferă controale în plus atunci cînd un utilizator se loghează, cum ar fi : un număr limitat de încercări de logare eșuate înainte ca un cont să fie blocat, numărul de zile de validitate a parolei, numărul de zile în care contul poate rămâne blocat atunci când parola exipră sau numărul de zile după care o parolă poate fi reutilizată.
Politicile de securitate sunt implementate folosind un set de autorizații, ce stabilesc operațiile pe care le poate face și drepturile pe care un utilizator le are . Se pune problema dacă un anumit utilizator U are dreptul de acces A pentru obiectul O. O combinațite e genul ( S, O, A) constituie autorizația, controlul accesului fiind o funcție f (S, O, A) care are ca rezultat valoarea adevărat sau fals.
Obiectele unei baze de date pot fi autorizate folosind mecanismul de control , un utilizator poate să acceseze , de exemplu, doar anumite componente ale obiectului. Astefel se pot da drepturi pentru o singură tabelă din baza de date, pentru un set de tabele, pentru unele linii sau coloane dintr-o tabelă sau chiar pentru întreaga bază de date. Asupra unui obiect se pot crea drepturi precum : SELECT, UPDATE, INSERT, DELETE.
Controlul accesului este de cele mai multe ori dependent de datele din baza de date. De exemplu, unii utilizatori ar putea fi limitați să vadă în tabela cu angajați doar salariile mai mici decât o anumita valoare.
O altă modalitate de a realiza controlul accesului o reprezintă vederile, ce reduc datele expuse utilizatorilor. O vedere este o relație virtuală a bazei de date , ce conține o parte din tabela inițială. Pentru a putea exemplifica cum funcționeză o vedere, considerăm relația ANGAJAȚI ca în tabelul 1.
Tabel 1 Tabela ANGAJAȚI
Următoarele comenzi SQL definesc o vedere numită Departamentul Vânzări :
CREATE VIEW Departamentul Vânzări
AS SELECT NUME,SALARIU
FROM ANGAJAȚI
WHERE DEPARTAMENT =’VÂNZĂRI’
Rezultatul vederii poate fi observat în tabelul 2:
Tabel 2 Vederea Departamentul Vânzări pentru tabela ANGAJAȚI
Se observă că au fost filtrate din tabela inițială doar acele informații dorite.
Dacă un nou angajat al departamentului de vânzări este adăugat în tabelă, vederea creată , Departamentul Vânzări, se va modifica automat și va include noul angajat. O vedere poate fi creată pentru elimina anumite coloane din tabelă ce dorim să le interzicem utilizatorului, astefel spunem ca am realizat o restricție pe verticală. Pe de altă parte, vederile pot fi folosite și pentru a asigura o securitate la nivel de linie în tabelă, bazată pe conținutul datelor. Aceasta se mai numește și restricție pe orizontală și este implementată folosind clauza WHERE când este creată vederea.
Administratorul bazei de date controlează securitatea și autorizarea folosind limbajul de cotrol al datelor (DCL) , ce face parte din SQL, împreună cu DDL și DML. Comenzile principale ale DCL-ului sunt : acordarea de permisiuni unui utilizator al bazei de date (GRANT) și eliminarea unor permisiuni (REVOKE).
Comanda GRANT este însoțită de 2 liste, o listă cu privilegiile ce urmează a fi oferite și o listă cu utilizatorii ce beneficiază de aceste privilegii. Opțiunea WITH GRANT OPTION permite unui utilizator să paseze privilegiile, mai departe, unui alt utilizator.
Exită diferite tipuri de privilegii ce pot fi oferite sau revocate utilizatorilor de baze de date. Fiecare DBMS asigură unele privilegii de bază, cum ar fi abilitatea de a accesa datele, de a crea obiecte în baza de date și de a realiza funcții de sistem.
Privilegiile legate de tabele oferă utilizatorilor accesul la tabele și vederi. Ele pot fi :
• SELECT: permite utilizatorului sa vadă tabela/ vederea
• INSERT: permite utilizatorului să insereze linii în tabelă/vedere
• UPDATE: permite utilizatorului să modifice tabela/vederea
• DELETE: permite utilizatorului să șteargă linii din tabelă/vedere
• ALL : oferă toate privilegiile de mai sus
De exemplu, pentru a i se permite utilizatorului Popescu să șteargă linii din tabela Angajați, se va folosi comanda : GRANT DELETE on Angajați to Popescu ;
Privilegiile legate de obiectele bazei de date controlează ce utilizatori au permisiunea să creeze obiecte în baza de date. Pentru a permite utilizatorilor Popescu și Ionescu să creeze tabele, comanda este : GRANT CREATE table TO Popescu, Ionescu ;
Există posibilitatea ca un administrator să ofere o anumită autorizație PUBLIC. Când o autorizație este acordată PUBLIC, DBMS va permite tuturor celor ce se loghează, acea autorizație.
Comanda REVOKE se folosește pentru a elimina privilegii ce au fost deja acordate. În plus, privilegiile legate de un obiect al bazei de date, vor fi revocate imediat ce acel obiect este șters.
Revocările în cascadă ar putea fi o problemă întrucât folosind opțiunea WITH GRANT OPTION, fiecare utilizator ar putea da mai departe anumite drepturi și astfel nu putem controla foarte bine mecanismul.
De exemplu, presupunem că administratorul oferă toate privilegiile managerului și doar privilegii de SELECT departamentului de contabilitate , managerul acordă toate drepturile opeatorilor iar departamentul de contabilitate doar privilegii de SELECT. Dacă managerul revocă toate drepturile operatorilor, operatorii încă mai au privilegiile de SELECT de la contabilitate.
Atunci când administratorul revocă dreptul de SELECT pentru contabilitate, implicit operatorii vor pierde și ei acest privilegiu.
Figura 3.2 Exemplu de revocare în cascadă
Pe lângă posibilitatea acordări de privilegii unui utilizator, DBMS are capabilitatea de a oferi drepuri unui rol sau unui grup de utilizatori.
Odată creat , un rol poate fi folosit pentru a garanta unele privilegii utilizatorilor. Un rol este în esență o colecție de privilegii. Folosirea rolurilor simplifică administrarea securității bazei de date. Dacă dorim, de exemplu , un rol MANAGER , în care să permitem toate drepturile pentru tabelele ANGAJAȚI și COMENZI , rol pe care îl vom oferi utilizatorului Popescu, trebuie să rulăm în SQL următoarele comenzi :
CREATE role MANAGER;
GRANT select, insert, update, delete on ANGAJAȚI to MANAGER ;
GRANT select, insert, update, delete on COMENZI to MANAGER ;
GRANT MANAGER to Popescu ;
Toate aceste privilegii pot fi organizate ierarhic , de exemplu , dreptul de de scriere într-o tabelă (INSERT) se află pe un nivel superior al ierarhiei față de privelegiul de citire ( SELECT). Drepturile de pe nivelele superioare le include și pe cele de pe nivele inferioare , în exemplul nostru, scrierea informției într-o tabelă, implică și citirea.
Figura 3.3 Ierarhizarea privilegiilor
Autentificare, autorizarea și controlul accesului sunt împreună cu regulile de integritate, principalele component ale mecanismului de securitate discreționar.
Figura 3.4 Componente ale mecanismului de securitate discreționar
3.3 Securitatea Multinivel
Datorită limitărilor pe care le are modelul de securitate discreționar , este recomandată folosirea unui control al accesului de tip mandatoriu (MAC) . Securitatea multinivel este o politică de tip MAC , în care informația poate circula de la un nivel de încredere mai scăzută la unul mai ridicat. Controlul accesului mandatoriu este bazat pe etichete de securitate asociate fiecărei element din baza de date și fiecărui utilizator.
O etichetă atașată unui element de date ,cum ar fi o tabelă sau o coloană a unei tabele, se numește clasificare iar eticheta corespunzătoare utilizatorilor poartă numele de autorizație.
Din punct de vedere al securității, un sistem este divizat în straturi, prin linii orizontale, realizându-se așa-zisa securitate pe nivele multiple (multinivel) prin care se realizează o delimitare netă între diferite categorii de informații din sistem (publice, confidențiale, secrete, strict secrete). Această delimitare asigură certitudinea accesării informațiilor dintr-o anumită clasificare numai de persoanele care au autorizația de același nivel (sau mai mare) cu clasificarea informațiilor accesate.
Schematic, sistemul multinivel poate fi reprezentat ca în figura 3.5.
.
Figura 3.5 Modelul de securitate multinivel
Politicile de controlare a accesului sunt foarte clare: o persoană poate accesa un obiect numai dacă autorizarea sa este cel puțin egală cu nivelul de clasificare al informației citite. Ca efect, informațiile vor circula doar de jos în sus, de la nivelul CONFIDENȚIAL, la SECRET apoi la STRICT SECRET , iar de sus în jos nu au voie să circule decât dacă o persoană autorizată le declasifică.
Unul din cele mai cunoscute modele al politicilor de securitate este cel propus de David Bell și Len LaPadula, în 1973, și este cunoscut sub numele Bell-LaPadula sau modelul de securitate multinivel. Proprietatea de bază a acestor sisteme este aceea că informațiile pot circula în jos.
Ținând cont de nivelele de securitate : neclasificat (public) , confidențial , secret și strict secret s-au formulat următoarele trei principii pentru modelul Bell-LaPadula :
Principiul (sau proprietatea) securității simple, prin care nu-i este permis nici unui utilizator să citească date aflate pe un nivel superior lui. Este cunoscut și ca Nu citi deasupra (No Read Up, NRU);
Principiul *: nici un utilizator nu poate să scrie date pe un nivel aflat sub el. Este cunoscut și ca Nu scrie dedesubt (No Write Down, NWD);
Principiul securității discreționare introduce o matrice de acces pentru a specifica controlul accesului discreționar. Este cunoscut și ca Trusted Subject (subiect de încredere). Prin acest principiu, subiectul de încredere violează principiul *, dar nu se abate de la scopul său.
Figura 3.6 Ilustrarea celor 3 principii ale medelului Bell-LaPadulla
Fluxul informațiilor poate exista între aceleași nivele de securitate , de exemplu între “secret” și “secret” , sau de la un nivel inferior la unul superior. Asta înseamnă ca utilizatorii aflați pe nivelul “secret” pot împarți date între ei sau pot primi informații de la utilizatorii de pe nivelul “confidențial”. Totuși , datele nu pot fi transmise de la un nivel superior la unul inferior, astfel un utilizator cu nivelul de securitate “secret” nu va putea vedea informațiile clasificate ca fiind “strict secrete”. De asemenea previne ca un utilizator cu un nivel de securitate ridicat să scrie în mod accidental pe un nivel inferior.
Un exemplu de posibile fluxuri de informație în cazul unui utilizator cu un nivel de securitate “secret” este ilustrat în figura ….
Figura 3.7 Posibile fluxuri de informație în cazul unui utilizator cu nivelul de securitate “secret”
Pe lângă nivelele de securitate, unui obiect îi este asociat unul sau mai multe așa numite compartimente cu ajutorul cărora este permis accesul celor ce au nevoie de informație deoarece se află într-un compartiment sau în altul. Chiar dacă anumiți utilizatori ar putea fi de încredere pentru a putea accesa anumite informații din baza de date, dacă aceștia nu au nevoie de acele informații pentru responsabilitățile lor , politica de securitate multinivel (MLS) le refuză accesul.
Clasa de acces a unui obiect este o combinție ce conține atât nivelul de securitate cât și compartimentul în care se află acel obiect. Politicile de securitate multinivel folosesc dolosesc noțiunea de dominanță a etichetelor pentru a stabili dreptul de acces. Relația de dominanță este folosită pentru a determina operațiile permise în baza de date și fluxul de informații și este determinată prin ordonarea nivelului de securitate al etichetei și prin intersecția setului de compartimente.
Spunem că o clasă de acces Ci domină o altă clasă de acces Ck dacă nivelul de securitate al clasei Ci este mai mare sau egal decât nivelul de securitate al clasei Ck iar setul de compartimente al lui Ck este identic sau inclus în cel al lui Ci . Relația de dominanță strictă presupune ca nivelul de securitate al lui Ci să fie strict mai mare decât cel al lui Ck . Două clase sunt incomparabile dacă fiecare conține cel puțin un compartiment ce nu este inclus în setul de compartimente al celeilalte.
Toate comenzile SQL sunt controlate astefel încât să prevină fluxuri de informații neconforme.
De exemplu, un utilizator confidențial ar trebui să nu poată realiza comanda SELECT asupra unei linii din tabelă ce este strict secretă. De asemenea un utilizator strict secret nu ar trebui să poată realiza UPDATE unei linii cu nivelul confidențial , dar ar trebui să poată realiza comanda SELECT.
În figura 3.8 este reprezentată o diagramă a fluxului de informație permis și interzis între anumite etichete ale sistemului de securitate multinivel. Nivelele de securitate posibile sunt : neclasificat, confidențial, secret și strict secret , iar compartimentele sunt notate generic cu A,B,C.
Figura 3.8 Fluxul de informații între clasele de acces ce conțin nivele de securitate și compartimente
În general, informației îi este permis să circule de la sursă la destinație dacă eticheta destinației domină pe cea a sursei. În imagine se poate observa că nu există flux de informații între etichete incomparabile, cum ar fi Top Secret :A B și Top Secret : C.
Se poate construi o diagramă , un graf, care să reprezinte grafic toate relațiile de dominanță dintre etichete. De exemplu, pentru un sistem cu cele patru nivele de securitate (TS >S > C > U) și două compartimente A și B , o astfel de diagramă este reprezentată în figura 3.9.
Etichetele din partea de sus a diagramei au un nivel de securitate mai ridicat iar cele din partea dreaptă a diagramei conțin cele mai multe compartimente. Se poate observa ca eticheta TS: AB domină toate celelalte etichete din sistem și informația circulă spre această etichetă, de la oricare alta. Eticheta U este dominată de toate celelalte etichete iar informația va circula de la aceasta spre oricare altă etichetă din sistem.
În această diagramă, dacă există o cale de la un nod la altul, atunci eticheta asociată primului nod domină strict eticheta celui de-al doilea nod , iar informația circulă de la primul nod la al doilea.
Figura 3.9 Graful de securitate pentru un sistem cu 4 nivele de securitate și 2 compartimente
În continuare putem vedea o diagramă ce arată rezultatele pentru doi utilizatori ce au etichete ale securității multinivel diferite, ce realizează fiecare o operație de tip SELECT pentru aceeași tabelă. Primul uitilizator este conectat la baza de date folosind o etichetă de tip „Top Secret : A”, iar cel de-al doilea are o etichetă „Confidențial: B”. Ambii utilizatori selectează toate liniile tabelului MyTab. În ambele cazuri, rezultatul instrucțiunii SELECT va conține doar linii pe care utilizatorii le domină.
Figura 3.10 Cazul unei operații de tip SELECT în cazul a doi utilizatori cu etichete diferite
Dacă avem un tebel cu etichete conform securității multinivel, ca în tabelul 3, ceea ce va observa un utilizator cu eticheta „confidențial” se poate vedea în tabelul 4.
Tabel 3 Exemplu de tabel cu angajați cu etichete de securitate multinivel
Tabel 4 Instanța tabelului 3 în cazul unui utilizator cu eticheta “confidențial”
Deoarece modelul de securitate multinivel Bell-LaPadula oferă doar confidențialitatea datelor, pentru integritate există modelul Biba. El se bazează pe faptul că integritatea și confidențialitatea datelor sunt concepte duale: în timp ce prin confidențialitate se impun restricții celor ce pot citi o informație, prin integritate sunt controlați cei ce pot scrie sau modifica acea informație. Integritatea se referă in principal la cele două scopuri esențiale: protejarea datelor împotriva modificărilor efectuate de utilizatori neautorizați și protejarea datelor împotriva modificărilor neautorizate efectuate de utilizatori autorizați.
În cadrul modelului Biba, similar modelului Bell-LaPadula, în locul nivelelor de securitate(senzitivitate), se definesc așa numitele nivele de integritate.
Ca și in cazul modelului Bell-LaPadula, există trei axiome ale integrității:
• Axioma integrității simple: stabilește că unui subiect aflat pe un anumit nivel de integritate nu-i este permis să citească un obiect de o integritate mai joasă (NRD);
• Axioma integrității * : stabilește că unui obiect situat pe un anumit nivel de integritate nu-i este permis să modifice (scrie) alt obiect situat pe un nivel mai înalt de integritate (NWU);
• Un subiect de pe un anumit nivel de integritate nu poate solicita un subiect situat pe un nivel de integritate superior.
Modelul Biba și axiomele sale sunt reprezentate în figura 3.11.
Figura 3.11 Modelul Biba de securitate multinivel pentru oferirea integrității datelor
Cele două modele Bell-LaPadula și Biba sunt greu de obținut împreună deoarece se află indirect în conflict .Pentru a atinge ambele reguli, în practică, un utilizator poate sa își coboare voluntar nivelul de privilegiu.
Poliinstanțierea reprezintă posibilitatea existenței într-o tabelă din baza de date a mai multor linii ce pot avea aceeași cheie primară, acestea fiind diferențiate folosind nivelele de securitate. În figura următoare (figura 3.12) este prezentat cazul în care un utilizator cu nivelul de securitate “public” și unul cu nivelul “top secret” doresc să scrie într-o tabelă a bazei de date aceeași informație.
Figura 3.12 Diagrama procesului de poliinstanțiere
După cum se poate observa, în tabelă au fost create două instanțe ale aceleiași informații, cărora le-a fost atribuit nivelul de securitate al utilizatorului ce a inserat acea linie în tabelă, U și respectiv TS.
O altă modalitate de asigurare a securității multinivel o reprezintă matricea de control al accesului. Folosind matricea de control al accesului se oferă drepturi asupra tuturor obiectelor bazei de date pentru utilizatori. Drepturile de acces reprezintă drepturi de scriere, de citire, de execuție.Un exempu de astfel de matrice de control al accesului e reprezentată în tabelul 5. Modelul matricei de control al accesului acceptă controlul discreționar pentru că intrările în matrice sunt la discreția persoanelor care au autorizația de a completa tabelul
Tabelul 5 Matrice de control al accesului
Pentru o bază de date, unde operațiile posibile cu o tabelă sunt INSERT, SELECT, UPDATE sau DELETE, matricea de control al accesului poate arata ca în tabulul 6.
Tabel 4 Matrice de control al accesului în cazul operațiilor cu o bază de date
Coloanele unei matrici de control al accesului se numesc liste de control al accesului (ACL) iar liniile se numesc liste de competențe.
Capitolul 4. Crearea bazei de date și implementarea aplicației
4.1 Crearea bazei de date
Am construit o bază de date pentru o firmă de telecomunicații, la care vor avea acces clienții, angajații și supervizorul.
Pentru început, am identificat entitățile ce vor face parte din baza de date și anume următoarele tabele: ANGAJAȚI, ABONAȚI (CLIENȚI), OFERTE, PRODUSE, COMENZI, OFERTE ACTIVATE, VÂNZĂRI și LOGIN.
Tabela ANGAJAȚI conține o listă cu toate persoanele angajate în acea companie, în tabela ABONAȚI sunt memorați toți clienții companiei, iar tabelele OFERTE și PRODUSE conțin informații pentru client, acesta poate să își activeze o ofertă sau sa cumpere un anumit produs(telefon) .Tabelele COMENZI, OFERTE ACTIVATE și VÂNZĂRI stochează informații despre activitatea firmei, ce produse au fost comandate sau vândute sau ce oferte și-au activat clienții. Tabela LOGIN conține datele de autentificare a utilizatorilor, numele de utilizator și parola.
Apoi am ales atributele pentru fiecare entitate prezentată mai sus. Astfel tabela ANGAJAȚI conține drept atribute: angajat-id , nume și prenume . Tabela ABONAȚI conține: abonat-id, nume, prenume, CNP, telefon, oraș, adresă și abonament/prepay. Atributele tabelei OFERTE sunt : ofertă-id, tip-ofertă, nume-ofertă, descriere-ofertă și preț iar pentru tabela PRODUSE: id-produs, nume-telefon, descriere-telefon, unități în stoc și preț. Pentru tabela COMENZI există atributele: id-comandă, dată-comandă, produs, cantitate și preț. Tabela OFERTE ACTIVATE conține următoarele atribute: ofertă-id, dată-activare, abonat- id, telefon, nume-ofertă, preț, iar tabela VÂNZĂRI: vânzari-id, id-produs, dată-vânzare, cantitate. În cele din urmă, tabela LOGIN, folosită pentru autentificare, conține următoarele atribute: id-user, username și password.
Pentru fiecare tabelă, din lista de atribute am ales o cheie primară pentru identificarea în mod unic a tuplurilor din tabele. Cheile primare alese pentru fiecare tabelă pot fi vizualizate în tabelul 1.
Tabelul 1. Cheile primare pentru tabelele bazei de date
După alegerea tipurilor de date pentru fiecare atribut în parte și după stabilirea relațiilor existente între tabele, conform modelului entitate-relație, am creat următoarea diagramă:
Figura 4.1 Diagrama Entitate-Relație
După cum se poate observa în figura 4.1, între anumite tabele din baza de date, există legături. De exemplu, între tabela ABONAȚI și tabela OFERTE ACTIVATE există o relație de tipul “unul-la-unul”(1:1) , ceea ce reprezintă faptul că un abonat își poate activa o anumită ofertă iar reciproc putem spune că o ofertă a fost activată de un abonat. Un alt tip de relație întâlnită este relația de tipul “unul-la-multe”(1:N), ce se realizează între tabelele PRODUSE și VÂNZĂRI.
Pentru construirea efectivă a bazei de date am folosit ca și sistem de management MySQL în cadrul căruia am scris comenzi SQL pentru crearea bazei de date, construirea tabelelor și crearea unor utilizatori și de asemenea acordarea unor privilegii acestora.
Pentru ușurință, am ales să folosesc interfața grafică a MySQL și anume MzSQL Worbench.
Inițial se crează o conexiune cu serverul MySQL în care sunt precizate numele conexiunii, numele serverului, portul acestuia și numele utilizatorului cu care ne conectăm.
Figura 4.2 Pagina de conexiune cu serverul MySQL
La început, pentru prima conexiune ne vom loga cu un utilizator prestabilit, acesta fiind utilizatorul admistrator, root, urmând ca odată conectați la serverul MySQL să putem crea o bază de date și noi utilizatori. Serverul este local, numele acestuia fiind localhost. Numărul portului a fost ales astefel încât să nu mai existe nicio altă aplicație care să folosească acel port
Din meniu de management, folosind tabul Users and Privileges, am creat un nou utilizator, cu drepturi de administrator, numit Stefan.
Figura 4.3 Crearea unui nou utilizator și acordarea de privilegii acestuia
Apoi, folosind limbajul SQL, am creat baza de date, numită telecom, cu ajutorul comenzii:
CREATE DATABASE telecom;
După crearea bazei de date a urmat construirea tabelelor enunțate mai sus împreună cu atributele acestora.
Pentru crearea tabelei ANGAJAȚI comenzile SQL au fost următoarele:
Figura 4.4 Crearea tabelei ANGAJAȚI
După cum se poate observa în figura 4.4, am ținut cont și de constrângerile de integritate,astfel încât atributul ID-ANGAJAȚI, care este și cheie primară pentru tabelă, să nu poată fi null.
În continuare sunt prezentate comenzile cu care au create unele din tabelele bazei de date, urmând ca restul comenzilor să fie prezente în anexă.
Figura 4.5 Crearea tabelei ABONAȚI
Figura 4.6 Crearea tabelei PRODUSE
Figura 4.7 Crearea tabelei VÂNZĂRI și a legăturilor cu tabela PRODUSE
Se poate observa în figura 4.7 crearea legăturii între tabelele VÂNZĂRI și PRODUSE prin folosirea cheii străine “id-produs”.
După crearea tabelor în bazya de date, a urmat popularea acestora. Aceste lucru l-am realizat folosind instrucțiunea INSERT. Baza de date într-o companie de telecomunicații are milioane de înregistrări, însă în cazul de față, vom introduce un număr mic înregistrări, deoarece scopul nostru nu este de a demonstra capacitatea de stocare a bazei de date ci de a evidenția modul de administrare a acesteia.
Comenzile folosite pentru popularea tabelelor ANGAJAȚI, ABONAȚI, OFERTE și PRODUSE sunt prezentate în continuare .
Figura 4.8 Populare tabelei ABONAȚI
Figura 4.9 Popularea tabelei ANGAJAȚI
Figura 4.10 Popularea tabelei OFERTE
Figura 4.11 Popularea tabelei PRODUSE
Pentru a putea vizualiza înregistrările introduse, folosim comanda SELECT. De exemplu, pentru a vedea conținutul tabelei PRODUSE, se folosește următoarea comandă: SELECT * FROM telecom.produse; Folosirea simbolului * are ca rezultat afișarea în întregime a tabelei, fără nicio filtrare. Rezultatul comenzii este următorul:
Figura 4.12 Vizualizarea tabelei PRODUSE
4.2 Realizarea aplicației Web folosind PHP
Înainte de a crea paginile web folosind PHP, avem nevoie să instalăm un server Web și anume Apache. Pentru aceasta am folosit aplicația XAMPP ce integrează atât serverul Web Apache cât și serverul MySQL.
.
Figura 4.13 Aplicația XAMPP pentru configurarea serverului Apache
Structura site-ului va fi următoarea: va exista o pagină de start, numită index.php, config.php,
login.php și câte o pagină fiecare tip de utilizator , client.php, angajat.php și admin.php.
În baza de date MySQL, în tabela login, există o coloană în care este trecut tipul fiecărui utiizator: client,angajat sau administrator. În funcție de valorile din această coloană, după autentificare, fiecare utilizator va avea acces la o pagină corespnzătoare. Tabela login din baza de date telecom arată ca în figura 4.14.
Figura 4.14 Tabela login din baza de date telecom
Astfel dacă în pagina de autentificare ne vom loga cu numele de utilizator stefan și parola corespunzătoare vom putea accesa pagina admin.php.
Conexiunea cu serverul MzSQL și alegerea bazei de date s-a realizat în pagina config.php folosind următoarele instrucțiuni:
mysql_connect("localhost","root")or die("Conexiunea cu baza de date nu s-a putut realiza");
mysql_select_db('telecom');
Pagina de start a aplicației Web este prezentată în figura 4.15.
Figura 4.15 Pagina de start a aplicației Web pentru autentificare
Pentru a accesa pagina de start trebuie să introducem în bara de adrese a navigatorului Web adresa : http://localhost/telecom/index.php.
Dacă ne logăm cu un utilizator de tip client,vom avea acces la pagina client.php ce conține informații despre oferte și despre produse ce pot fi cumpărate.
Figura 4.16 Pagina Client
În cazul în care ne logăm cu un utilizator de tip angajat, vom putea vedea informații despre comnzile făcute, despre ofertele activate și despre ce produse au fost vândute.
Figura 4.17 Pagina Angajat
În cele din urmă, dacă ne logăm cu un utilizator de tip administrator, acesta va putea avea acces la o pagină ce conține informații despre angajați, despre abonați dar și despre datele de autentificare a fiecărui utilizator.
Figura 4.18 Pagina Administrator
Concluzii
Scopul acestei lucrări a fost acela de a realiza o bază de date pentru o firmă de telecomunicații la care să poată avea acces mai multe tipuri de utilizatori. Accesul controlat la baza de date este foarte important pentru siguranța datelor. În orice firmă ne dorim ca fiecare angajat să poată accesa doar acele informații de care are nevoie și de aceea am creat acest sistem de securitate multinivel, în care există trei nivele de securitate: client,angajat și administrator, fiecare cu drepturile lui.
Protecția datelor împotriva accesului neautorizat devine din ce în ce mai importantă pe măsură ce crește numărul firmelor ce folosesc sisteme de baze de date pentru memorarea și administrarea datelor. O importantă funcționalitate pe care fiecare sistem de management al bazelor de date (DBMS) ar trebui sa o ofere este abilitatea de a proteja datele și resursele sistemului de modificări nedorite, furturi sau dezvăluiri neautorizate.Din moment ce datele dintr-o bază de date sunt legate între ele prin relații semantice , un prejudiciu adus bazei de date , nu afectează un singur utilizator , ci întreg sistemul. De aceea este important respectarea unor politici mandatorii, fixate de la bun început, ce nu permit utilizatorilor sa își acorde drepturi între ei, drepturile fiind acordate tuturor de către un administrator.
Politicile de securitate multinivel au fost explicate în capitolul 3, urmând ca apoi să fie prezentat în capitolul 4 crearea bazei de date și a aplicației Web ținând cont de una din politicile de securitate și anume cea a matricii de control a accesului, în care fiecărui utiizator îi sunt acordate drepturi pentru fiecare obiect al bazei de date.
În cazul aplicației realizate, aceste drepturi pentru diversele tipuri de utilizatori se rezumă la posbilitatea de a citi anumite informații din baza de date. O viitoare dezvoltare a aplicației poate consta în alocarea de drepturi de scriere în baza de date sau de a modifica datele existente. De exemplu, clientul are acces doar să vizualizeze tabelul ofertelor și a produselor, acesta ar putea să își activeze o anuimită ofertă sau să cumere un produs, iar astfel anumite informații din baza de date, cum ar fi tabelul vânzări, s-ar modifica.
Un impediment este faptul că odată aleasă o politică de securitate de către administrator, această politică fiind vizibilă și în modul de construcție a site-ului este destul de greu să o schimbăm, aceasta trebuie aleasă de la început conform criteriilor de securitate dorite de firmă.
Această aplicație este realizată folosind o bază de date cu un număr de înregistrări relativ mic în comparație cu o bază de date reală a unei firme de telecomunicații, dearece nu am dorit să observăm capacitatea de stocare a informațiilor într-o bază de date ci modul de administrare a acesteia.
O altă posibilă direcție de dezvoltare a aplicației constă în posibilitatea utilizatrilor noi de a se
înregistra pe prima pagină a site-ului,astfel actualizându-se automat anumite secțiuni ale bazei de date, în aplicația Web creată existând doar opțiunea de autentificare cu numele de utilizator și parola deja existente în baza de date.
Pe de altă parte , pagina Web poate fi modificată din punct de vedere al design-ului folosind un program de creare și editare a paginilor web, cum ar fi Adobe Dreamweaver.
Bibliografie
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
[1]
Anexe.cod.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Securitate Multinivel Pentru Baze de Date (ID: 150403)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
