You are on page 1of 132
482 Partéaalika _Administrarea sistomului MySQL Cand serverul cteste continueal tabelului user, sorteaz’ intsirle in functie de valorile din coloanele Host si User. Valoarea Host este valoare dominanti (intritile cu aceeasi va~ loare Host sunt sortate impreund, apoi ordonate in functie de valoazea din coloana User) Totugi, sortarea n se exccutd in ordine lexicografici, ci numai partial. Principiul care teebuie resinut este acela ei valorilelierale sunt preferate in detsimentul modelelor, Aceasta inseamai ci, dack vi conectati de la boa. snake.net si exist’ intriri cu valocile boa.snake.net si %.snake.net in coloana Host, prima intrare va fi preferatd. Similac, ‘esanake.net este preferatd faph de ‘net, care la rindul siu este preferati fad de %. Suabilirea corespondenjelor pentru numerele IP funcrioneaza in acelasi mod. Pentru un client care se conectesza de la 0 gazdi cu un mumir IP 192.168.9.14, vor corespunde intririle 192.168.9.14, 192.168.3.4, 192. 168.5, 192.% gi in aceasté ordine Riscuri de evitat in ceea ce priveste tabelele de acordare Aces serine dese nel misuri de precae care weuie late i consderare tun cand acordati privilegi, precum si riscurile care insoyese opfiunile nechibzuite. In general cstede doris piviegile de super-uliator st fe ror cu csonomie Cue vane, au activayi privilgile din intririle tabelului user. Usilizagi in schimb celelale tabele de acordaes, pentru a limite privilegile utilizatorilor la anumite baze de date, tabele sau coloane. Privilegile din tabelul user permit utilizatorului si influenyeze operarea server- Joi dumneavoastrs,respectiv si obtind accesul la orice tabel din orice bazi de date. ‘Nu acordari privilegi pentru baza de date nysq. Un utilizator cu privilegiiasupra bazei de date care contine tabelele de acordare poate fi capabil si modificetabelele pentra a dobindi privilegi si asupra oricirei alte baze de date, Prin acordarea privlegillor care permit unui utilizator si modificetabelele din baza de date aysql, utilizatorul respectiv, dobindeste efectiv un privilegiu GRant global. Daci utlizarorul poate modifica tabelele jn mod direct, acest lucru este aproape echivalent cu posiblitatea de a emite orice instructiune GRANT care fi trece prin cap respectivulu. Privilegiul FILE este deosebic de periculos; mu-l acordapi cu uguringl. Ia un exemplu de acfiune pe care o poate executa un utilizator cu privilegiul FILE: CREATE TABLE ote parle (pwi_entey TEXT); LOAD DATA INFILE "/etc/passad* INTO TARIE ate_parole: SELECT * FROM ete_perole; Dupi ce a emis acesteinstructiun, utilizatorul dispune de consinucal figerului dumnea- voastr cu parole. De fapt, continutul orcivuifiscr care poate fi citt public din server este accesibil prin refea de eitre orice utilizator ca privilegial FILE, ‘De asemenea, privilegiul FILE poate fi exploatar pentru a compromite bazele de date pe sisteme care nu sunt configurate cu permisiuni de figier suficient de restrictive. Acesta este ua motiv pentru care trebuie si decided ca aumai serverul si poatd citi confinurul catalogului de date. Daca fisierele corespunzitoare tabelelor din bazele de date pot fi citite de oricine, atunci por fi citite mu numai de citre orice utilizator cu un cont pe gazda servecului, dar si de orice utilizator al programelor client cu privilegiul FILE care se poate conecta prin reqea! Urmitoarea procedurl demonstreazi cum se poate lucra: Capitolul 12 Securtats 483 © Creati un bel cu 0 coloani LovseLos USE test CREATE TABLE tap (b LONGBLOB) © Folosititakelul pentru a citi in acesta conyinutul fiecieuifisier corespunzitor tabelu- lui pe care dorigi sil furayi, dupi care seriesi conginutul tabelului intr-un figer din propria dumneavoastri bazi de date LORD DATE INFILE *. /other_cb/x.fra" INTO TABLE tmp FIELDS ESCAPED BY ** LINES TERMINATED BY ** SELECT * FROM tmp INTO OUTFILE *y.tra* FIELDS ESCAPED SY ** LINES TERMINATED BY “* OELETE FrOW ¢mp LOAD DATA INFILE */.other_db/x.180" INTO TABLE tap FIELDS ESCAPED BY ** LINES TERMINATED BY ** SELECT + FROW tmp INTO OUTFILE “y.160" FIELDS ESCAPED BY ** LINES TERMINATED BY ** DELETE FROM tep LOAD DATA INFILE "/.other_cb/x. ISM" INTO TABLE tmp FIELDS ESCAPED SY ** LINES TERMINATED BY ** SELECT * FROM tap INTO OUTFILE *y. 15H" FIELDS ESCAPED BY ** LINES TERMINATED BY ** ‘© in acest moment, aveFi un nou tabel y, care include continucul tabelului oth iar dumnecvoastri aveyi acces total la acesta. Pentru a evita si figiatacat fn acest mod, stabiliti permisiunile asupra confinutului eata- logului dumneavoastri de date in conformitate cu instrucfiunile din secyiunes jSecuritate interni: securizarea accesului la catalogul de date*. De asemenea, puteyi folosi optiunea --skip-show-databese atunci cind pornifi serverul, pentru a limite folosirea instuctiunilor SHOW DATABASES si SHOW TABLES de citre utilizarori pentru baze de date la care acegtia nu au acces. Astfel, utilizatorii nu mai pot afla despre existenta ‘nor baze de date, respectiv tabele, a care nu trebuie s8 aibi acces. Pivilegiul ALTER poate fi folosit in moduri pe care nu le imaginai. SX presupnem Govim es udizatfal goer) st pout abn accel ls abe darn ln aben8, Une ator cu privilepiul LvER vi poate derurna intentia folosind ALTER TABLE pentru a redenumi tazel2 cu numele tabelt Fiqiatent Ja privilegiul G2ANT. Doi utilzatori cu privie privilegiul eran, igi pot miri reciproc puterea drepturilor de acces ale fieciruia, abo, diferie, care dispun ambii de Configurarea utilizatorilor fara instructiunea GRANT Daci dispunti deo versiune a sistemalui MySQL anterfoari versiunii 3.22.11, nu pueti folostinstructiunile GRANT sau REVOKE pentru a configura uilizatori si prvilegi de acces, dar puteji aduce modificiri ia mod direct conyinutului tabelelor de acordare. © bunt parte din aceste operagil sunt mai simple daci inyelegoyi cum acfioneazit instructiunes Grant pentru a modifica tabelele de acordare. Apoi, pute proceda in acelasi mod prin 484 ParteaallkaAdminisrarea sistemului MySQL jterca shanvali ainstrucriunilor INSERT, (Instrucyiunea INSERT poate fi dizgraioasi gi dificil de introdus corect, dar aceasta este o alt problema. ,Urifenia" instructiunii INSERT este de fapt, unul dintre motivele pentru care instrucyiunea GRANT este cu mult ‘mai simplu de utilizat) Cand emiteti o,instructiune GRANT, specificafi un nume de utiizator si un nume de ga7di, eventual o paroli. Pentru utilizaor este ereatio intrare in tabelul user, ia aceste valori sunt inregistrate in coloanele User, Host gi Password ale intririi, Daca specificayi privilegi globale in instructiunea GRANT, aceste prvilegi sunt inregisrate in coloanele cu privilegi ale inesici, Trebuie sifigiatene la faprul cl instructiunea GRANT cripteazi paro~ Ja automat, dar INSERT mu exccuts accastk operat; va trebui si folosigi functia PASS- WoRO() pentru a cripta parolele in instructiunile dumneavoastrd INSERT. Daci ayi specificat privilegii a nivel de bazi de date, numele de utilizator si numele gazdei sunt inregistrate in coloanele User si Host ale unc! intriri din tabelul ab, Baza de date pentru care afi acordat privilegi este inregistrati in coloana bb, iar privilegile pe care le-ari acordat sunt inregistrate in coloanele pentru privilegi Pentru privilegile la nivel de tabel, respectiv la nivel de coloand, efecele sunt asemini- toare. Sunt create intriti in tabelele ratles_oriy si coluans_priv pentra a inregistra sumele de utilizatos, numele gazdei si baza de date, precum si tabelul, respectiv tabelul coloane, daca este necesar Privilegile acordate sunt inregistrate tn coloana cu privilegi. Dact ati retinut descrierea anterioari, trebuie si puteti executa operatile efecruate de instructiunea GRANT chiar in absenga acesteia. Rejineti ci, atunci cind modifica in mod direct abelele de acordare, va trebui si indicai serveruluisile reincarce, deoarece in caz contrar acesta nu va sesiza modificivile, Puteti forts o reincircare executind © comand nysqladnin flush-privileges sau aysaladsin reload. Daci omitefi acest lueru, vi veti intrebs de ce serveral nu se comporta age cur orf Urmitoarea instructiune GRANT creeazi un super-utilizator dotat cu toate privilegile, inclusiv capacitatea de a acorda privilegiialtorusilizatori ‘GRANT ALL ON *.* TO elonaéloceihost IDENTIFIED BY “oa WITH GRANT OPTION Instructiunea va ereao intrare pentru elena@locelnost in tabelul user si va activa toate privilegile din tabelul respectiv, deosrece acolo sunt stocate privilegile de super uti lizator (globale). Pentru a face acelasi lucru cu INSERT, instrucfiunea este: INSEAT INTO user VALUES (‘localhost "elena* PASSHOAD(“cafea”)), ye Rasa ha ays Wayetcy Rey cesta cyan) Asta este 0 instructiune INSEAT uritd de-a binelea! Puteri chiar descoperi ci nu functio- neazi, in functie de versiunea dumneavoastri a sistemului MySQL. Poate cd structura tabelelor de acordare s-a modifcat cu 0 anummitk ocazie si s-ar putea si nu aveyi 14 coloane cu privilegii in tabelul dumneavoastrd user. Folosigi SHO" COLUINS pentru a afla care sunt coloanele cu privilegié pe eare le contine fiecare tabel de acordare si modificayi ‘n consecingl instrucriunile dumneavoastr3 INSERT. Urmitoarea instructiune GRANT mai creezzi un utilizator eu statut de super-utlizator, dar numai pentru un singur privilegi GRANT RELOAD GN *,* Flush@localhost IDENTIFIED BY *flushpass* Capitolul 12 Seouritate 485 Poste vi reamintipi de aceasti instructiune din capitolul 11, eind am creat utilizatorul ‘lush, Instructiunes INSERT pentru acest exemplu este ceva mai simpli deeét pentru exem- plu anterior, ste mai simplu si se mentioneze numele coloanelor sisi se specifice singu- +a coloani cu privilegii. Toate celelaite coloane vor primi in mod prestailitvaloarea "W": INSEAT 2K70 user (Host User, Password, Reload. priv) \VALUES(*Jocalhost* ,*Flush* ,PASSHORD(*flushpass")"Y") Privilepile la nivel de baz de date sunt acordatefolosind o clauzi ON nune_baza_de.. fn loc den +." GRANT ALL ON sémp_do.* TO boris@localnost IDENTIFIED BY "rubin* ‘Aceste privilegii nu sunt globale, deci nu vor fi stocate in tabelul user. Trebuie si creim @ inte in abel user ee ‘tide utilizaroral sf se poatl conecta), dar trebule si mai creim o intrare gi in tabelul 6, pentru a invegistra privilege la nivel de bazd de dace: INSERT INTO user (Host User, Password) VALUES! "Locadhest","boris* ,PASSWORD( rubsn*)) INSERT INTO ab VALUES(*Localhost' ,"sanp_db", "boris", FE SY YE TEES HES AYES YD Coloana cu valoarea *N* este cea afecenti privilegivlui RANT; pentru o instructiune GaN la nivel de biz’ de date insoyii de optiunea WITH GRANT OPTION, valoarea din aces coloani ar fi fost *Y". : Pentru a cont gua prvilegi la nivel de tabel sau la nivel de coloani,folosiyinstrucyioni INSET pentru tabelele tables_priv sau columns_priv. Desigus, daci nu dispunesi de instrucsiunea SRANT, nt veti beneficia nici de aceste tabele, deoarece toate au apirut to MySQL in aelas timp. Daci aves tabelele si dor ste manipulasi manval dintrun an mit moti etineyi cl nu se activeazi prvilegilefolosind coloane individuale. Pentru aceasta configurai fie coloana tables_priv. c fo valoare Se aleituici din privilegile pe care dorg ole activa. De exempla, pent a active eile INSERT si SELECT pentra un tabel, vet atribui in coloana Tabte_priv o valoare ‘Select, Insert” ip intrarearelevanté din tabelul tables. priv. Dac doriti sf modificati privilegile pentru un utiizator al clrui cont MySQL exist! Gua, folong urbe in locde eernneas fapt este valabilindiferent dacd adugeri sat revocati priviegi, Pentru a elimina complet un utlizatoy, folosigi DELETE pentru 4 eli ‘mina intririle aferente utlizatorului din fiecare tabel de acordare, Daca preferazi si mu emiteyi interogéri pentru a modifica tabelele de acordare in, moc direct, pute; examina scripturile nysalaccess si aysql_setpermissions care sun incluse in distributia MySQL. 200%, bie_priv, fie coloana colunns_priv .Colunn_priv Ie”

You might also like