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” 486 Parteaa Ill-a Administrarea sistemului MySQL 0 enigma cu privilegii (Partea a II-a) fn capitolul 11, in sectiunea .O enigma cu privilegi (Partea I)*, am examinat o situatie [de acordare a privilegilor in care privilegile nu aveau efectul scontat. Pentru 2 ne eaminti rapid contextul respectiv, 0 problem’ care se produce frecvent cu instalisile oj ale sistemului MySQL este aceea ci administratorul doreste 5% adauge 0 intrare [pentru un utilizator, inrare care si-i permita aceseuia si se conecteze de la mai multe gazde. Modalitatea evident de a proceda consti in utilizarea unui specificator al Jaumelui gazdei care confine caracterul de inlocuire %, astfel tncdt administratorul ereeazi un utiizator folosind o instructiune care seamini cu aceasta: GRANT ALL ON samp_db.* TO frede\.snake.net IDENTIFIED BY “cécao" Se ivdmpli ex fred abi un con pe gazda serveru, det elinceart st se conecteze % mysql -u fred -peacto samp_db ERROR 1045: Access denied for user: ‘fred@locathost' (Using password: YES) [De ce? Pentru a ingelege ce se intimpli, trebuie si examin3m atie modul in care nysqi_instal1_ob configureazi tabelele de acordare inpile, cit si modul in care serverul foloseste intirile din tabelul user pentru a stabili echivalenge cu parametrii conexiunilor client. Cand vi initializati bazcle de date prin rularea programului nysal_instalt_ob, acesta creeazd inti in tabelul user eu valori in coloana User i Hast astfel ost User Lovalnost root | Bit-viper-snake.net root ‘ocaihos Bitevipe".snake.netroot Primele doud intriti permit utilizatorului root si se conecteze la gazda localé speci- ficind fie tocatnost, fie numele gazdei. Celelalte doua permit stabliea unor conexiuni anonime de la gaéda local. La adfugarea intrieii pentru utilizatorul tred, tabelul va Jcongine urmitosrele inteicis tiost ser Locainost root root free | Cind serverul porneste,citegte intitle si le sortearS (mai itil ta funeyie de gands, poi in functie de uilizatora! gazde),incepind dela valorle mai specifice si erminind |excele mai generale Capitolul 12 Securiste 48" Host “Tvser Locainost root | Iocalhost pit-siper.snake.net root Pit-viper-snake.net A.sneke.netroot trea Cele doui intriri cu locstnost sunt sortate aur, ir apoi inerarea pentru root est inserat® prima, deoarece este mai specified decit valoares vidi. Intririle cu pit Viper. snate net sunt sortate alituri int-un mod similar. Toate aceste intriri au valor literale in coloana Host, far% caractere de inlocuir, deci toate vor fi soreate anterio intriit pentru utlizatorel ted, caze foloseste un caracter de inlocuie. In pariculay inerivile pentru utilizatori anonimi aw priositate fapé de intrarea utiizatorului fred i ordinea de sortare Rentals ace srnd cin tregincearc se coneceze dela sazialocl va re intrisile cu nume de utilizator vid este echivalenté cu parametrii de conexiun inwarit respective este vidi, deoarece wtlizatori enonimi presabillt me au parol: Deoarece “red a specifica o parolé arunci cind s-a conectat, a apirut o neconcordany {ntre parole si conexiunca a eyuat. . ‘Aici wrebule retinut ci, desi este foarte convenabils wilizarea caracterelor de inloovit entra a specifica gazdele de la care se pot conecta utilizatori, puteyi avea probleme conexiunile de la gazda local, atitatienp cit List in tabelul user intratile aferente vt lizatorilor anonimi. —_ fin genersh vi recomand si stergeti intririle pentru utilizatorii anonimi. Veti avea ag mai usoari: hysql DELETE FROM user WHERE User: Dack doris sifpi mai concret, sterget toate intrirleaferente utilizatorilor anonies di | celelalte tabele de acordare. Tabelele care confin coloane user sunt db, tables_priv coluans_riv | ea in accastésegtiune a abordat o snumitk sinaie, dar contine o le Enigma p-ezenatd fn accastl setiv ; com este de doit, examina abel de acordare, pent 2 vedeadack exist reo tra care i canfind in colana Host valos care un caracter mal specific deci inrarea als ext utliatorl in chestune scare vor corespunde parametilos conesiunl solicits de acel welizator. Dac aceasta ste sivai, ay ist expliatia probleme, Poae cls necesat sifii mai concret in ceea ce privesteintrarea aferentd uilizatorului (sau si ad io alckintrare, pentru a acoperi situatia eu un caracter mai particular). CAPITOLUL 13 fntretinerea si repararea bazelor de date fner-un model ideal, MySQL ruleazi firi probleme incepind cu momentul in care # instalafi. Dar uneosi se produc si probleme, dintr-o varietate de motive, dela cideri de tensiune gi defecriuni ale componentelor hardware $i pand la o inchidere in conditi inadecvate a serverului MySQL (cum ar fi oprirea executiei acestuia folosind comanda ki1 -9 sau cind calculatorul suferi 0 cldere). Circumstange precum acestea, din care multe depigese posibilitatea dumneavoastré de control, pot avea ca rezultat deveriorati ale tabelelor din bazele de date, cauzate in mod caracteristc de scrier! incomplete care se produc in cursul modificrii unui tabel. ‘Acest capitol se concentreazi asupra derectiri i rezolvisii problemelor care pot apirea la talele dumneaveass indfrene de modul in er se produc aceste probleme, Pentru verifcarea si repararea tabelelos, cei mai buni prieteni ai administratorului MySQL sunt utltarelemyisanenk si isarchk. Aceste doul programe dispun de numeroase caractersti Deja am discutat despre modul de utilizare a acestora pentru efectuares analizei distribusie! cheilor de index, precum si pentru dezactivarea si reactivarea indexvlui in capitolul 4, ~Optimizarea interogirilor". De asemenes, le puteyi folosi pentru verificarea tabelelor si ‘eparareeacelora care prezints probleme, fap care vi permite si remediat| pagubeleinainte ca acestea si se agraveze, ducind chiar la imposiblitatea de uilizare a tabelelor. Pentru o iss complet a optiunilor acceptate de ayisanchk gi isanchk, consultayi Anexa E, wReferingi de programe MySQL“. Pentru informagii suplimentare, consultafi capitolul ‘lntretinerea unei installa sistemului MySQL* din manualul de referingi MySQL. Verificarea si remedierea tabelelor din bazele de date Procedura general pentru devectarea pagubelor aduse unui tabel si pentru remedierea acestora este urmitoarea: 4. Verificagi tabelul pentru a detecta eventualele erori. Daci tabelul nu prezined erori, ati verminat. In exz contray, trebuie si-l reparati. 2, Executafi copii ale figierelor din tabel inainte de a incepe reparatile, pentru orice eventualitate, a 5. Incercai sk reparaitabell 4. Daci operagia de reparare esues24, restauray tabelul pornind de lacopiile de sigurany ale bari de date s dela jurnalele de acnalizare. eles Capitolul 13 Intretinerea sireperarea bazelor de date 489 Etapa finali a procedurii prezentate anterior presupune cd afi efectuat copii de sigurants ale bazei de date si c3 ai activat caracteristica de consemnare in jurnalele de actualizare. Dac nu este aga, atunci ducesi o existent periculoast, Citi capitolul 11, ,Administra~ rea generali a dstemulut MySQL", pentru a afla modul in care putes folosi nysalduen si modul de activare a consemairii in urnal. Nu dorigi sé va aflayi vreodatS in situayia de 2 pierce un tabel £irk posibilitatea de a- recupera, flindcd v-a fost lene 8X executati copit de siguranti. fnainte de a folosi mpisanchi sau Aseachk pentru a verifiea sau repara tabele, este nect~ sark satisfacerea unor cerinte preliminasi: '# Instituiti proceduri de executaresistematicd a copiilor de siguranya a bazelor de date si activagi consemnarea in jurnalele de actualizare, in cazul in care slul devine gi mai ru siun tabel ese atit de deteriora, int mu nisi poate fi reparat. N-am,mai spus asta? «© Parcutgeti in rotalitateaceastlsecgiune inaince de a incerea vreuna dintre procedurile descrise. In particular, nw trebuie si folosigi instructiunile prezentate aici inainte de a Fi citt sectiunes ,Evitarea interacriunilor cu serverul MySQL". Secgiunea respectiva trated despre problemele care apar in cazal ‘n care serarul flozepte un tbel in acelag timp in care dumneavoaste3incercati si-i aplicafi tabelului proveduri de verifi- care sau reperare. De asemenea, secjiunea descrie modul de a preveni aparitia acestor probleme prin pistrarea serverului in stare de repaus in timp cs uerayi © Cand efecrungi verficarea sau repararea tabelelor, trebuie si fiti conectat sub contul folosit pentrs a rula nysald, deoarece averi nevoie de acces de tip citie gi seriere le fisierele abd. Sintaxa de invocare a utilitarelor myisamehk si isamchk Uniltarele MySQL nyisanchk gi Asanchk sunt foarte aseminitoare si se u acelasi mod in majoritatea cazurilor. Principala diferenyé dintre acestea consti in tipul de tabele pentru care este folosit fiecare utilicar. Pentru tabelcle MyISAM se foloseyte ryisanchk, iar pentru tabelele ISAM se foloseste isanchk. Se poate determina tipul for- imatului de stocare folosit de fiecate tabel in functie de extensia numelui de figier al fisierului index al abelului, Extensia *.vt" indicd un tabel MyISAM, in timp ce exten- sia *. 19H" ind.cl un tabel ISAM. Pentru a folos: oricare din acesteutiitae, indicat-i acestuia tabelele pe care doriti si le ‘verficagi sau le reparai,alituri de opfiunile care specific tipul operatiel care va fi efecruatic ‘% mylsanchkc optiuni nune_tabod ‘% Asamenk options nune_cabel ‘Un argument nune_tabel poate fi numele unui tabel sau numele figierului index al unui tabel. Daed specifica mai multe tabele, putey folosi un model de nuume de fisier pencra a selecta toate fisierele relevante dintr-un catalog: ‘ ayisanchk optiuni * mvt % Asanchk optiuni 18M

You might also like