In cazul n care ntmpinai probleme n timpul procesului de instalare a serverului
MySQL, primul loc unde ar trebui sa cutai o rezolvare este capitolul Problems end Common Errors (Probleme si erori frecvente ) din manualul MySQL, manual disponibil la adresa Web http://www.mysql.com/doc/P/r/Problems.html.
Urmtoarele sunt considerate probleme des ntlnite: o Pe platforma Linux/Unix, permisiuni configurate incorect nu va permit sa pornii serviciul MySQL. In acest caz, asigurai-v c ai schimbat proprietarul si grupurile aa cum prevd instruciunile referitoare la procesul de instalare. o n cazul n care primii mesajul Access denied (Accesul nu este perrnis) n momentul n care ncercai s v conectai la serverul MySQL, asigurai-v c folosii utilizatorul si parola corecta. o n cazul n care mesajul primit este Can't connect to server (Nu va puteti conecta la server), asigurai-v c serviciul MySQL a fost pornit c ruleaz fr probleme. o Atunci cnd definii tabele, dac specificai lungimi pentru cmpuri ale cror tipuri nu cer specificarea unei lungimi, tabela nu va fi creata. De exemplu, nu ar trebui sa specificai o lungime atunci cnd definii cmpuri de tip text (spre deosebire de CHAR sau VARCHAR).
In cazul n care ntmpinai n continuare probleme, chiar si dup ce ai citit manualul i ai verificat toate erorile comune care sunt descrise, trimitei un mesaj e-mail ctre lista de discuii MySQL i cu siguran va fi gsita o rezolvare la problema dumneavoastr. Putei, de asemenea, s achiziionai contracte de asistent de la MySQL AB, la preturi avantajoase.
Considerente fundamentale de securitate Indiferent dac rulai serverul MySQL pe o platforma Windows sau sub Linux Unix i indiferent dac administrai propriul server sau folosii un sistem oferit de furnizorul dumneavoastr de servicii Internet, trebuie sa nelegei considerentele fundamentale de securitate. Daca accesai serverul MySQL prin furnizorul dumneavoastr de servicii Internet exist cteva aspecte ale securitii serverului pe care pe care dumneavoastr ca utilizator non-root trebuie s putei s le modificai sau s le ocolii. Din pcate muli dintre furnizorii de servicii Internet nu acord nici o importan securitii severelor, lsndu-si clienii expui la riscuri, a cror existent, de cele mai multe ori acetia nici nu o cunosc.
Pornirea serverului MySQL Securizarea serverului MySQL ncepe chiar cu procedura de iniializare al acestuia. Daca nu suntei administratorul serverului nu vei putea sa schimbai aceasta procedura, dar putei s o analizai i s sesizai furnizorul dumneavoastr de servicii Internet cu privire la vulnerabilitile identificate de dumneavoastr. Daca instalarea MySQL s-a realizat pe o platforma Linux/Unix- in nici un caz acesta nu ar trebui s fie utilizatorul root. Rularea serviciului sub un utilizator non-root, ca de exemplu mysql sau database, limiteaz posibilitile indivizilor sau voitori de a dobndi acces la server i de a suprascrie fiiere. Puteti verifica proprietarul procesului folosind comanda ps (acronim pentru process status- statutul proceselor) pe sistemul Linux/Unix. Urmtoarele linii va arata ca serverul MySQL ruleaz sub un utilizator non-root (observati primul cuvant de pe linia a doua): #> ps auxw | grep mysqld mysql 153 0.0 0.6 12068 2624 ? S Nov16 0:00 /usr/local/bin/mysql/bin/mysqld --defaults-extra-file=/usr/local/bin/mysql/data/my.conf --basedir=/usr/local/bin/mysql datadir=/usr/local/bin/mysql/data --user=mysql pid-file=/usr/local/bin/mysql/data/mike.pid skip-locking
Urmtoarele linii v arat c serverul MySQL ruleaz sub un utilizator root (asa cum va arta primul cuvnt din cea de-a doua linia): #> ps auxw | grep mysqld root 21107 0.0 1.1 11068 1444 ? S Nov27 0:00 /usr/local/bin/mysql/bin/mysqld --basedir=/usr/local/bin/mysql datadir=/usr/local/bin/mysql/data skip-locking
Dac remarcai c serverul MySQL ruleaz sub utilizator root pe3 sistemul dumneavoastr, contactai de urgenta furnizorul de servicii Internet si reclamai acest lucru. Daca suntei administratorul sistemului, trebuie sa iniializai serviciul MySQL sub un utilizator non-root sau sa specificai utilizatorul in comanda de iniializare: Mysqld user=non_root_usr_name
De exemplu, dac dorii s rulai MySQL sub utilizatorul mysql, folosii comanda: Mysqld user+mysql
Metoda recomandat de iniializare este rularea scriptului seif_mysqld localizat in directorul bin al instalrii aflate pe sistemul dumneavoastr: #> /usr/local/bin/mysql/bin/seif_mysqld &.
Securizarea conexiunii la MySQL Va putei conecta la programul MySQL monitor sau la alt aplicaie in mai multe moduri, fiecare fiind supus unor riscuri de securitate. Daca instalarea serverului se afla pe calculatorul dumneavoastr, avei mai puine griji in comparaie cu utilizatorii care trebuie sa se conecteze la server prin reea. Daca instalarea serverului se afla pe calculatorul dumneavoastr, cea mai mare grija este de a nu lsa calculatorul nesupravegheat, si cu instrumente de administrare, MySQL monitor sau MySQL GUI, pornite si la vedere. Intr-o astfel de situaie oricine trece prin zona poate sa stearga date, sa introduc date false sau s opreasc serverul. Dac trebuie s lsai calculatorul nesupravegheat in zone publice, folosii aplicaii de tipul screen-saver sau mecanisme de blocare cu parola a ecranului. Daca serverul MySQL este instalat pe o unitate din afara reelei dumneavoastr, securizarea conexiunii ar trebui sa fie prima prioritate. Ca orice alta transmisiune de date prin Internet si aceasta ar putea fi interceptata. Daca transmisiunea este necriptat, persoana care o intercepteaz o poate reconstitui si folosi. Sa presupunem ca transmisia necriptat conine informaia de autentificare pentru serverul MySQL. Un individ ruvoitor are acum acces la baza dumneavoastr de date si poate ntreprinde diferite aciuni folosind acreditrile dumneavoastr. O metod sigur de a preveni astfel de ntmplri este s v conectai la serverul dumneavoastr MySQL folosind o conexiune securizata. In loc s v conectai la calculatorul aflat la distanta folosind clasicul Telnet, conectai-v prin intermediul SSH. SSH arat si se comport la fel ca Telnet, doar c transmisiunile de la si ctre calculatorul aflat la distant sunt criptate. De asemenea dac folosii o interfaa de administrare bazat pe tehnologiile Web, cum este cazul phpMyAdmin (pentru mai multe informaii accesai http://phpmyadmin.sourceforge.net) sau orice alte instrumente puse la dispoziie de furnizorul de servicii Internet, avei grij s le accesai prin intermediul unei conexiuni securizate.
Introducere in sistemul de privilegii al MySQL Sistemul de privilegii al MySQL este ntotdeauna pornit. Prima dat cnd ncercai s v conectai si ulterior pentru orice aciune ntreprins, serverul MySQL verifica urmtoarele trei aspecte: De unde accesai serverul (host-ul dumneavoastr); Cine suntei sau pretindei ca a-ti fi (utilizatorul si parola); Ce operaii avei dreptul sa ntreprindei (privilegiile dumneavoastr de comanda). Toate aceste informaii sunt stocate intr-o baza de date numita mysql, care se creeaz automat n momentul instalrii. In aceast baza de date mai multe tabele:
columns_priv - conine informaiile referitoare la privilegiile unui anumit utilizator pentru anumite cmpuri dintr-o tabel; db - conine informaiile referitoare la permisiunile pentru toate bazele de date de pe server; func - conine funciile create de utilizator; host - conine lista tuturor staiilor (host-urilor) de unde sistemul poate accepta conexiuni; tables_priv - conine informaiile cu privire la privilegiile unui anumit utilizator pe tabele specifice dintr-o baz de date; user - conine informaiile referitoare la comenzile pe care un anumit utilizator are dreptul s le execute sau nu.
Aceste tabele vor cpta o mai mare importan ulterior n acest capitol pe masur ce vei aduga exemple de utilizatori de MySQL. Pn atunci trebuie doar s reinei c aceste tabele exist i c ele trebuie s conin datele necesare pentru ca un utilizator s poat ntreprinde o anumit aciune.
Procesul de autentificare in doi pai Asa cum ai aflat deja, serverul MySQL verific trei lucruri n cadrul procesului de autentificare. Aciunile asociate cu aceste trei lucruri sunt efectuate n doi pai:
Serverul MySQL verific staia (host-ul) de unde v conectai, precum i perechea utilizator- parol pe care ai furnizat-o. Dac staia dumneavoastr este autorizat s se conecteze, parola corespunde utilizatorului i utilizatorul este cel asociat staiei respective, serverul MySQL trece la pasul urmtor. Pentru orice comand SQL pe care ncercai s o rulai, serverul MySQL verific dac suntei autorizat s executai respectiva comand asupra bazei de date, tabelei sau cmpului vizat.
Dac sunt ntlnite erori la pasul 1, vei vedea un mesaj care descrie respectivele erori i nu vei putea trece la pasul 2. De exemplu: s presupunem c v conectai la serverul MySQL folosind numele de utilizator student i parola abc123 i c dorii s accesai o baza de date intitulat myDB. Vei primi un mesaj de eroare dac oricare dintre aceste variabile de conectare sunt incorecte, din cauza unuia dintre urmtoarele motive: parola este incorect; utilizatorul student nu exist; utilizatorul student nu are dreptul de a se conecta de pe staia localhost; utilizatorul student are dreptul de a se conecta de pe staia localhost, dar nu are dreptul s utilizeze baza de date myDB.
Exista si posibilitatea sa vedeti o eroare precum cea de mai jos:
#> /usr/local/mysql/bin/mysql -h localhost -u joe -pabc123 test Error 1045: Access denied for user: 'joe@localhost' (Using password: YES)
Dac utilizatorului student cu parola abc123 i este permis conectarea de la statia localhost, precum i utilizarea bazei de date myDB, MySQL va verifica la pasul 2 al procesului de conectare aciunile pe care student are dreptul s le ntreprinda. In scop demonstrativ, s presupunem c student are dreptul de a selecta (SELECT) datele dar nu are dreptul de a introduce (INSERT) date noi. Secvena de evenimente si erori ar arta precum n liniile de cod de mai jos:
#> /usr/local/mysql/bin/mysql -h localhost -u joe -pabc123 test Reading table informat ion for complet ion of table and column names You can turn off this feature to get a quicker startup with -A
Welcome to the MySOL monitor. Commands end with ; or Ig. Your MySOL connection id is 61198 to server version: 4.0.15-10g Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> insert into test_table values (", 'my text'); Error 1044: Access denied for user: 'student@localhost' (Using password: YES)
Permisiunile bazate pe aciuni sunt foarte des ntlnite n aplicaiile cu mai multe nivele de administrare. De exemplu, dac ai creat o aplicaie care contine informaii financiare personale, ai putea alege s oferii personalului normal doar posibilitatea de a selecta (SELECT) date, dar de asemenea ai putea oferi personalului de conducere, care beneficiaz de autorizrile necesare, posibilitatea i de a insera (INSERT) sau terge (DELETE) date.
Lucrul cu privilegiile acordate utilizatori
n cele mai multe cazuri, atunci cnd accesai serverul MySQL prin intermediul furnizorului dumneavoastr de servicii Internet, vei avea la dispoziie doar un utilizator i o singur baz de date. Iniial, acel utilizator va avea acces la toate tabelele din acea baz de date i va fi acreditat s efectueze orice aciune asupra ei. n acest caz, responsabilitatea de a crea prin programare o aplicaie sigura va aparine dumneavoastr ca dezvoltator.
Dac suntei administratorul serverului propriu de baze de date sau sunteti abilitat s adugai oricte baze de date i utilizatori dorii, precum i s modificati drepturile i privilegiile de acces ale utilizatorilor dumneavoastr, atunci urmtoarele seciuni v vor oferi informaii foarte importante despre aceti pai.
Adugarea utilizatorilor
Administrarea serverului dumneavoastr cu ajutorul unui instrument dezvoltat de o ter parte v-ar putea oferi metode foarte simple de adugare a utilizatorilor, cu ajutorul unor procese de tipul utilitarelor de asisten sau a unei interfee grafice specifice. Totui, aduqarea de utilizatori cu ajutorul utilitarului MySQL monitor nu este deloc dificil, mai ales dac suntei deja familiarizat cu conceptele de securitate ale serverului MySQL care v-au fost prezentate anterior.
Cea mai simpl metod de a aduga un utilizator nou este comanda GRANT. Conectndu-v la serverul MySQL ca utilizator root putei s tastai aceast comand care v permite adugarea de noi utilizatori. Cealalt metod este utilizarea comenzii INSERT asupra tuturor tabelelor relevante din baza de date mysql, caz n care este necesar o cunoatere temeinic a cmpurilor i tabelelor in care sunt stocate permisiunile. Metoda comenzilor INSERT succesive produce acelasi rezultat dar este puin mai laborioas i mai complicat dect comanda clasica GRANT.
Sintaxa simpl a comenzii GRANT este urmtoarea:
GRANT privilegii ON baza_de_date.nume_ tabela TO nume_utilizator@host IDENTIFIED BY "parola";
Prilegiile pe care le putei oferi utilizatorilor prin intermediul comenzii GRANT sunt urmtoorele:
ALL - confer utilizatorului toate privilegiile de mai jos; ALTER - utilizatorii pot modifica tabele, coloane i indexuri; CREATE - utilizatorii pot crea baze de date, tabele i indexuri noi; DELETE - utilizatorii pot terge nregistrri din tabele; DROP - utilizatorii pot muta tabele i baze de date; FILE - utilizatorii pot citi i scrie fiiere; procedur folosit la importul i exportul (dump) datelor din baza de date; INDEX - utilizatorii pot aduga sau terge indexuri; INSERT - utilizatorii pot introduce date noi n tabele; PROCESS - utilizatorii pot vizualiza i interaciona cu procesele de sistem, oprindu-le, resetndu-le sau pornindu-le; ca msur de securitate, doar administratorii i utilizatorii de mare ncredere ar trebui s poat beneficia de aceast facilitate; REFERENCES - opiune a nu este utilizat n prezent de ctre serverul MySQL; exist totui n tabelul user o coloan rezervat pentru privilegii privind referinele; RELOAD - utilizatorii pot comanda resetarea serverului (FLUSH); opiunea este recomandat numai administratorilor i utilizatorilor de mare ncredere; SELECT - utilizatorii pot selecta i vizualiza nregistrri din baza de date; SHUTDOWN - utilizatorii pot opri serverul MySQL; opiune recomandat numai administratorilor i utilizatorilor de mare ncredere; UPDATE - utilizatorii pot modifica i actualiza datele din tabelele bazei de date; USAGE - utilizatorii se pot conecta la serverul MySQL, dar nu au nici un alt fel de privilegiu.
Dac, de exemplu, dorii s creai un utilizator numit john cruia s i fie asociat parola 99h iei care s aib privilegiile de a selecta (SELECT) i introduce (INSERT) date n toate tabelele din baza de date numit myDB i dorii, de asemenea, ca acest utilizator s se poat conecta de la orice staie, ar trebui s scriei o comand ca cea de mai jos:
GRANT SELECT, INSERT ON myOB.* TO john@'%" IDENTIFIED BY "99hjc";
Observai utilizarea celor dou caractere generale "joker" * i %. Aceste caractere generale sunt utilizate pentru a nlocui toate valorile posibile. n acest exemplu * nlocuiete ntreaga list de tabele din baza de date myDB, iar % nlocuiete lista tuturor numelor de staii cunoscute n ntreaga lume -list, de altfel, extrem de lung.
Iat un alt exemplu de adugare a unui utilizator pe un server MySQL folosind comanda GRANT, de aceast dat pentru a aduga un utilizator numit jane cu parola 45sdg11, care s aib toate (ALL) privilegiile pentru o tabel numit employees din baza de date numit myCompany. Acest nou utilizator se va putea conecta doar de la o staie predefinit: GRANT ALL ON myCompany.employees TO jane@janescomputer.company.com IDENTIFIED BY "45sdg11";
n cazul n care tii c staia janescomputer.company.com are adresa de IP 63.124.45.2, putei nlocui aceast adres n poriune a din comanda GRANT dedicat numelui staiei (hostname), la fel ca n exemplul de mai jos: GRANT ALL ON myCompany.employees TO jane@'63.124.45.2 IDENTIFIED BY "45sdg11";
Trebuie avut n vedere un amnunt foarte important cu privire la adugarea de utilizatori: folosii ntotdeauna parole i avei grij ca aceste parole s ndeplineasc cerinele generale de securitate! Serverul MySQL v permite s adugai utilizatori fr a le defini o parol, dar acest lucru las ua deschis acelor indivizi rau intenionai care pot deduce un nume de utilizator din sistemul dumneavoastr care are toate privilegiile asociate.
In cazul n care folosii comanda GRANT pentru a aduga utilizatori, modificrile vor intra imediat n vigoare. Pentru a v asigura complet de acest lucru, putei comanda FLUSH PRIVILEGES din interfaa MySQL monitor, care duce la reincarcarea tabelei de privilegii
Revocarea privilegiilor Revocarea privilegiilor este la fel de simpl ca i adugarea lor; singura deosebire este c n locul comenzii GRANT vom utiliza comanda REVOKE. Sintaxa comenzii REVOKE este urmtoarea: REVOKE privileges ON nume_baza_de_date . nume_ tabela FROM nume_utilizator@nume_host;
De asemenea, n acelai mod n care putei conferi privilegii utiliznd comanda INSERT la nivelul tabelelor de sistem, le putei i revoca folosind comanda DELETE pentru a terge nregistrrile aferente din tabelele de sistem din baza de date mysql. Totui aceast metod presupune o foarte bun cunoatere a tabelelor i cmpurilor aferente fiecrui privilegiu, de aceea recomandm utilizarea comenzii REVOKE, aceasta oferind o metod mult mai uoar i mai sigur de revocare a privilegiilor.
Pentru a revoca abilitatea utilizatorului john de a introduce nregistrri noi n baza de date myCompany, ar trebui s utilizai comanda REVOKE, aa cum v este ea prezentat n exemplul de mai jos: REVOKE INSERT ON myDB.* FROM john@%;
Modificrile fcute cu ajutorul comenzii REVOKE intr n vigoare imediat, dar pentru ca serverul s afle despre aceste modificri trebuie s utilizai n interfaa MySQL monitor comanda FLUSH PRIVILEGES.
Concluzii: Instalarea serverului MySQL pe platforma Windows este extrem de simpl datorita unei metode de instalare bazat pe utilitare de asisten. MySQL AB pune la dispoziia utilizatorilor sistemului de operare Windows o interfa grafic de administrare, numit WinMySQLadmin. Utilizatorii de Linux/Unix nu beneficiaz de o instalare bazat pe utilitare de asisten, dar nu este foarte dificil s urmeze o succesiune simpl de instruciuni care despacheteaz i instaleaz fiierele binare ale serverului i clientului MySQL. Utilizatorii unui sistem de operare de tipul Linux/Unix pot folosi i pachete RPM pentru instalarea serverului MySQL.
Securitatea este ntotdeauna o prioritate i exist o succesiune predefinit de pai pe care putei s o urmai pentru a v asigura c dispunei de o instalare sigur i securizat. Chiar dac nu suntei administratorul serverului, ar trebui sa fii capabil s testai i s identificai eventualele bree de securitate, pe care s le sesizai ulterior administratorului serverului dumneavoastr MySQL. Serviciul de server MySQL nu ar trebui s ruleze sub utilizatorul root. De asemenea utilizatorii nregistrai pe serverul MySQL ar trebui s aib ntotdeauna o parola iar privilegiile lor de acces ar trebui s fie ntotdeauna foarte bine definite. MySQL folosete tabelele de privilegii ntr-un proces n doi pai pentru fiecare solicitare fcut. MySQL trebuie s tie cine suntei i de unde v conectai si fiecare poriune de informaie pe care o oferii n cadrul acestui proces trebuie s se corespund cu informaiile stocate n baza de date mysql, n tabelele de privilegii. De asemenea, utilizatorul trebuie s beneficieze de permisiuni explicite pentru a executa un anumit tip de comand. Putei aduga utilizatori prin intermediul comenzii GRANT, care utilizeaz o sintax simpl pentru a aduga intrri n tabela user din baza de date mysql. Comanda REVOKE, cu o sintax la fel de simpl, se folosete pentru a terge aceste privilegii.