Administrare server open source

Platforma de hosting cu software liber, gratuit, open source.

Sistemele de gestiune a conturilor de hosting cum ar fi cPanel, PLESK sau Virtualmin ne usureaza mult munca preluand gestiunea utilizatorilor MySQL si a privilegiilor acestora. Daca totusi avem un server unmanaged trebuie sa stim cateva comenzi de baza pentru a ne descurca. In principiu, cand avem de-a face cu serverul MySQL, trebuie sa stim cum putem adauga un utilizator, cum il putem sterge, cum putem sa ii dam privilegii si cum ii putem modifica parola.

Inainte de a ne pune pe treaba trebuie sa ne asiguram ca avem acces la server prin ssh si ca avem parola utilizatorului root din MySQL. Daca le avem, ne conectam pe ssh si rulam comanda mysql pentru a ne conecta la consola serverului MySQL din care se poate face gestiunea utilizatorilor. Pentru inceput vom crea o baza de date pentru test cu numele lamp.

[user@localhost ~]$ mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 94509
Server version: 5.0.77 FreeBSD port: mysql-server-5.0.77_1
 
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
 
mysql> CREATE DATABASE lamp;

Dupa ce am creat-o trebuie sa cream un utilizator caruia ii vom da numele lampuser si va avea parola pass1423.

mysql> CREATE USER 'lampuser'@'localhost' IDENTIFIED BY 'pass1423';

Userului i se va permite sa se conecteze la serverul MySQL doar de pe sistemul local (localhost), direct la consola sau din cadrul unui script sau al unei aplicatii. Daca dorim ca utilizatorul sa se poata conecta de la o anumita adresa IP vom inlocui localhost cu adresa IP de la care se va conecta utilizatorul. Daca userul va trebui sa se poata conecta de oriunde, inlocuim localhost cu semnul procent (%) care ii va permite autentificarea indiferent de locul din care se face conexiunea.

Bun, am creat utilizatorul, dar daca ne conectam la serverul MySQL observam ca nu are nici un drept asupra bazei de date create. Pentru a-i asigura dreptul de utilizare pe baza de date lamp va trebui sa rulam comanda GRANT.

mysql> GRANT ALL PRIVILEGES ON lamp.* TO 'lampuser'@'localhost' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> SHOW GRANTS FOR 'lampuser'@'localhost';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'lampuser'@'localhost' IDENTIFIED BY PASSWORD '*E6DAA05BF4662E995CBB3826D1903B16D83A4886' |
| GRANT ALL PRIVILEGES ON `lamp`.* TO 'lampuser'@'localhost' WITH GRANT OPTION                                    |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql>

Dupa cum se poate observa, utilizatorul lampuser are toate privilegiile asupra bazei de date lamp.

In cazul de fata ne interesa un utilizator care sa aiba drepturi depline asupra bazei de date, dar e bine sa stim ca putem impune foarte multe limite cu ajutorul directivei GRANT. Ii putem da un grup restrans de privilegii daca, de exemplu, inlocuim ALL cu SELECT,INSERT,UPDATE – caz in care utilizatorul va avea doar privilegiile de preluare a informatiilor, se inserare si de updatare nu si dreptul de a sterge inregistrari sau tabele. La fel putem impune limita maxima de conexiuni intr-o ora cu ajutorul directivei MAX_CONNECTIONS_PER_HOUR, limita maxima de query-uri intr-o ora cu directiva MAX_QUERIES_PER_HOUR etc. O lista completa de privilegii ce pot fi setate unui utilizator se poate gasi in pagina de manual a directivei GRANT.

Am vazut cum se creaza un utilizator si cum ii setam privilegiile, dar sa vedem cum ii modificam parola in cazul in care e necesar. Exista doua metode de a updata parola unui utilizator, si ambele folosesc functia de criptare PASSWORD().

Prima metoda foloseste cererea „SET PASSWORD”.

mysql> SET PASSWORD FOR 'lampuser'@'localhost' = PASSWORD('passNew');
mysql> FLUSH PRIVILEGES;

Dupa rularea acestei cereri, parola utilizatorului va fi passNew. A doua metoda foloseste o cerere UPDATE pentru a modifica in tabela user din baza de date mysql parola asociata utilizatorului.

mysql> USE mysql;
mysql> UPDATE user SET Passowrd=PASSWORD('passUpdate') WHERE User='lampuser' AND Host='localhost';
mysql> FLUSH PRIVILEGES;

Dupa cum presupuneti, parola noua a utilizatorului va fi passUpdate.

Ati observat ca dupa fiecare cerere se ruleaza cererea FLUSH PRIVILEGES. Folosind cererea FLUSH PRIVILEGES serverul MySQL sterge cache-ul creat pentru privilegii. Este necesara rularea acestei cereri pentru ca modificarile sa fie active fara un restart al serverului MySQL.

Cu cererile de mai sus, dupa cum se poate vedea, putem gestiona utilizatorii serverului MySQL. Singura actiune care mai trebuie sa o stim e cea de stergere a unui utilizator care nu il mai folosim. Resursele consumate de un utilizator inactiv sunt neglijabile dar e bine sa stergem ocazional utilizatorii nefolositi pentru a limita posibilitatile de atac asupra serverului.

Daca pentru crearea unui utilizator am folosit CREATE USER pentru stergerea lui vom folosi DROP USER.

mysql> SHOW GRANTS FOR 'lampuser'@'localhost';
+-----------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+-----------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'lampuser'@'localhost' IDENTIFIED BY PASSWORD '*E6DAA05BF4662E995CBB3826D1903B16D83A4886' |
| GRANT ALL PRIVILEGES ON `lamp`.* TO 'lampuser'@'localhost' WITH GRANT OPTION                                    |
+-----------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)
 
mysql> DROP USER 'lampuser'@'localhost';
Query OK, 0 rows affected (0.10 sec)
 
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.08 sec)
 
mysql> SHOW GRANTS FOR 'lampuser'@'localhost';
ERROR 1141 (42000): There is no such grant defined for user 'lampuser' on host 'localhost'
mysql>

Prima data am verificat privilegiile pentru a ne asigura ca utilizatorul exista – se poate sari peste acest pas. Folosind cererea DROP USER ‘lampuser’@’localhost’; utilizatorul a fost sters din sistem. Am rulat FLUSH PRIVILEGES; pentru a sterge cache-ul si apoi am verificat din nou privilegiile utilizatorului. Eroarea care am primit-o ne confirma ca utilizatorul lampuser nu mai exista in sistem.

Flexibilitatea care ne-o ofera serverul MySQL este foarte mare. Ce am prezentat aici sunt doar cateva cereri de baza care trebuie sa le stim pentru a putea utiliza serverul MySQL. Pentru mai multe detalii va recomand sa cititi pagina de manual Account Management Statements de pe site-ul oficial al serverului MySQL.

MySQL

One Response so far.

  1. Lucian says:

    Foarte bun acest tutorial.