Administrarea MySQL

Administrarea oricarui sistem de gestiune a bazelor de date relationale (SGBDR) necesita putina munca. Fiecare sistem are propriile metode pentru administrare si propriile dificultati cand vine vorba de adaugarea si stergerea de conturi ale utilizatorilor, backup si asigurarea securitatii. Administarea server-ului MySQL nu este dificila per ansamblu, dar poate speria la inceput.

Administrarea utilizatorilor

Tabelele de grant
Drepturile utilizatorilor MySQL sunt stocate in cateva tabele care sunt create automat la instalarea MySQL. Aceste tabele apartin bazei de date mysql:

	mysql> use mysql
    Database changed
    mysql> show  tables;
    +-------------------+
    | Tables in mysql   |
    +-------------------+
    | columns_priv      |
    | db                |
    | func              |
    | host              |
    | tables_priv       |
    | user              |
    +-------------------+
    6 rows in set (0.00 sec)
	

Fiecare dintre aceste tabele corespunde controlului unui nivel de acces. Poti crea un oricati utilizatori care pot accesa MySQL de pe diferite gazde. Pentru fiecare combinatie utilizator/gazda, acorzi acces la o intreaga baza de data, la anumite tabele, sau la anumite coloane dintr-o tabele. Aditional, aceste tabele acorda privilegii de administrare. Utilizatorilor le poate fi dat dreptul de a adauga/sterge baze de date sau de a acorda altor utilizatori drepturi de administare.

In practica, nu ar trebui sa acorzi mai multe drepturi decat e necesar pentru a proteja datele de curiosi sau de incompetenti. Pentru asta trebuie sa stii ca drepturile sunt acordate intr-un mod ierarhic. Cele acordate pe tabela user sunt universale: daca un utilizator are privilegiu de stergere(drop) in tabela user, acesta poate sterge orice tabela din rocie baza de date din MySQL. Tabela db acorda privilegii asupra unei intregi baze de date. Pentru o tabela/set de tabele foloseste tables_priv. Tabela columns_priv acorda drepturi asupra unor anumite colobne dintr-o tabela.

Tabela user
Orice utilizator care vrea sa lucreze in MySQL trebuie sa fie inscris in acesta tabela. Drepturile pot fi acordate in alta parte, dar fara o inscriere aici, utilizatorului nu i se va permite conectarea la server.

mysql> show	columns from user;
+-------------------+---------------+-------+-------+-----------+-------+
| Field             | Type          | Null  | Key   |   Default | Extra |
+-----------------------------------------------------------------------+
| Host              | char(60)      |       |   PRI |           |       |
| User              | char(16)      |       |   PRI |           |       |
| Password          | char(16)      |       |       |           |       |
| Select_priv       | enum(‘N’,’Y’) |       |       | N         |       |
| Insert_priv       | enum(‘N’,’Y’) |       |       | N         |       |
| Update_priv       | enum(‘N’,’Y’) |       |       | N         |       |
| Delete_priv       | enum(‘N’,’Y’) |       |       | N         |       |
| Create_priv       | enum(‘N’,’Y’) |       |       | N         |       |
| Drop_priv         | enum(‘N’,’Y’) |       |       | N         |       |
| Reload_priv       | enum(‘N’,’Y’) |       |       | N         |       |
| Shutdown_priv     | enum(‘N’,’Y’) |       |       | N         |       |
| Process_priv      | enum(‘N’,’Y’) |       |       | N         |       |
| File_priv         | enum(‘N’,’Y’) |       |       | N         |       |
| Grant_priv        | enum(‘N’,’Y’) |       |       | N         |       |
| References_priv   | enum(‘N’,’Y’) |       |       | N         |       |
| Index_priv        | enum(‘N’,’Y’) |       |       | N         |       |
| Alter_priv        | enum(‘N’,’Y’) |       |       | N         |       |
+-------------------+---------------+-------+-------+-----------+-------+
17 rows in  set (0.00 sec)

MySQL identifica un utilizator dupa combinatia user-host. Prin urmare, un utilizator poate avea cate un set de drepturi diferite pentru fiecare gazda (host) pe care o foloseste pentru a se conecta la MySQL. Drepturile setate pe Y (yes) sunt acodate pentru toate tabele din orice baza de date. Alte drepturi:
- File_priv acorda dreptul de a scrie si citi fisiere de pe disc.
- process_priv acorda dreptul de a vedea si de a termina toate comenzile si threrad-rile in curs de executie(poti vedea ce fac si ce tasteaza ceilalti utilizatori !!).
- Grant_priv da dreptul de a putea acorda mai departe privilegiile proprii altor utilizatori.
- Reload_priv e folosit, in special pentru a face comenzi flush
- Shutdown_priv da dreptul de a opri server-ul folosind mysqladmin shutdown.

Tabela db

  mysql> show	columns from db;
+---------------------------------------------------------------------------+
| Field             | Type          | Null  | Key   |   Default |   Extra   |
+---------------------------------------------------------------------------+
| Host              | char(60)      |       |   PRI |           |           |
| Db                | char(32)      |       |   PRI |           |           |
| User              | char(16)      |       |   PRI |           |           |
| Select_priv       | enum(‘N’,’Y’) |       |       |       N   |           |
| Insert_priv       | enum(‘N’,’Y’) |       |       |       N   |           |
| Update_priv       | enum(‘N’,’Y’) |       |       |       N   |           |
| Delete_priv       | enum(‘N’,’Y’) |       |       |       N   |           |
| Create_priv       | enum(‘N’,’Y’) |       |       |       N   |           |
| Drop_priv         | enum(‘N’,’Y’) |       |       |       N   |           |
| Grant_priv        | enum(‘N’,’Y’) |       |       |       N   |           |
| References_priv   | enum(‘N’,’Y’) |       |       |       N   |           |
| Index_priv        | enum(‘N’,’Y’) |       |       |       N   |           |
| Alter_priv        | enum(‘N’,’Y’) |       |       |       N   |           |
+---------------------------------------------------------------------------+
13 rows in  set (0.01 sec)
 

Drepturile specificate aici merg doar pentru baza de date specificate in coloana db_column.

Tabelele tables_priv si columns_priv
Ofera drepturi asupra unei tabele sau asupra unor coloane dintr-o tabela.

mysql> show	columns from	tables_priv;
+-------------------------------------------------------------------+
| Field         | Type          | Null  | Key   |   Default | Extra |
+-------------------------------------------------------------------+
| Host          | char(60)      |       | PRI   |           |       |
| Db            | char(60)      |       | PRI   |           |       |
| User          | char(16)      |       | PRI   |           |       |
| Table_name    | char(60)      |       | PRI   |           |       |
| Grantor       | char(77)      |       | MUL   |           |       |
| Timestamp     | timestamp(14) | YES   |       | NULL      |       |
| Table_priv    |set(‘Select’,’Insert’,’Update’,            |       |
|               |   ‘Delete’,’Create’,’Drop’,’Grant’,       |       |
|               |   ‘References’,’Index’,’Alter’)           |       |
|               |               |       |       |           |       |
|   Column_priv |   set(‘Select’,’Insert’,      |           |       |
|               |   ‘Update’,’References’)      |           |       |
+-------------------------------------------------------------------+
8 rows in set   (0.00 sec)

Controlul accesului


MySQL foloseste tabelele de privilegii pentru a determina ce are si ce nu are un utilizator dreptul sa faca in doi pasi:
  1. Verificarea conexiunii: MySQL verifica daca ai voie sa te conectezi la server bazandu-se pe numele de utilizator (blank insemna orice utilizator), numele de gazda si pe parola. Pentru numele gazdei poti folosi caracterul wildcard '%' ca semnificand orice gazda.
  2. Verificarea cererii: MySQL verifica in toate tabele de drepturi daca ai drepturile necesare pentru a obtine informatiile dorite.

Comenzile GRANT si REVOKE

Tabele descrise mai sus sunt tabele normale MySQl si pot fi modificate cu comenzile invatate. De exemplu, pentru a crea un nou utilizator:
INSERT INTO user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv) VALUES (‘localhost’, ‘juan’, ‘password’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’, ‘N’)
Nu este insa ce si-ar dori sa fac administratorul de fiecare data. Din fericire, MySQL ofera cateva comenzi care fac lucrul cu utilizatorii mult mai usor:

GRANT
GRANT privilegii [coloane]
ON obiect
TO utilizator [IDENTIFIED BY ‘parola’]
[WITH GRANT OPTION]
Niveluri de drepturi
grant all on *.*Acorda drepturi universale
grant all on database.*Acorda drepturi asupra tuturor tabelelor din baza de date
grant all on database.table_name Drepturi pentru o singura tabela
grant all(col1, col2) on database.table_name Drepturi pentru anumite coloane dintr-o tabela

mysql> grant all on guestbook.* to ion@localhost identified by “parola1”;
Prima parte a comenzii poate fi all sau alta optiune din tabela user. Partea a doua a comenzii (on guestbook) arata unde se vor aplica drepturile (vezi tabelul de mai sus). Partea a treia arata cui i se acorda drepturile (utilizator@gazda), iar ultima parte arata parola cu care este identificat utilizatorul.
grant select, update, insert on guestbook2k.guestbook to adi@localhost identified by “parola2”;
Acesta comanda permite lui adi sa vada, sa modifice, sa actualizeze si sa insereze inregistrari in tabela 'guestbook' din baza de date 'guestbook2k'.
grant select, update (nume, email) on guestbook2k.guestbook to monica@localhost identified by “Mel12068”;
Monica poate vedea si actualiza doar campurile 'nume' si 'email'.
grant all on *.* to marius@localhost identified by “xxx456”;
Marius are drepturi depline (poate chiar acorda privilegii altor utilizatori).

REVOKE

Daca vrei sa anulezi drepturile acordate unui utilizator poti folosi comanda REVOKE:
REVOKE privilegii [(coloane)]
ON item
FROM utilizator

Comanda revoke Shutdown on *.* from cosmin@localhost; revoca dreptul de shutdown al lui Cosmin. Daca vrei sa stergi un utilizator de tot trebuie sa-l stergi din tabela 'user':
delete from user where user=’user’ and host=’host’

Afisarea drepturilor
Din versiunea 3.23.4 MySQL a introdus comanda show grants care permite vizualizarea drepturilor acordate la un moment dat:

mysql> show grants for jayg@localhost;
+------------------------------------------------------------- +
| Grants for ion@localhost                                     |
+------------------------------------------------------------- +
| GRANT ALL PRIVILEGES ON testul1.* TO ‘ion’@’localhost’       |
+------------------------------------------------------------- +
1 row in set (0.00 sec)

Reincarcarea drepturilor
MySQL citeste automat tabelele de privilegii cand e pornit si cand sunt date comenzi GRANT sau REVOKE. Modificarile facute manual tabelelor de drepturi nu iau efect decat daca se restarteaza MySQL. Ca sa functioneze aceste modificari reincarca tabelele:
flush privileges
sau
mysqladmin flush-privileges
sau
mysqladmin reload


Backup-ul bazelor de date


Pentru a face un backup complet al bazelor de date:
mysql> mysqldump --tab=/cale/director --opt --full
sau
mysql> mysqlhotcopy database /path/director
Poti, de asemenea copia toate fisierele tabelelor (`*.frm', `*.MYD', and `*.MYI' files) cat timp serverul nu actualizeaza nimic. Poti face si backup-uri selective cu SELECT * INTO OUTFILE 'nume_fisier' FROM nume_tabela si sa restaurezi datele cu LOAD DATA INFILE 'nume_fisier' REPLACE ... Pentru a evita inregistrarile duplicat (inregistrarile noi le inlociesc pe cele mai vechi daca sunt identice in cazul comenzii REPLACE) ai nevoie de o cheie primara sau de o cheie unica.

Securitatea in MySQL


Securitatea e foarte importanta, in special cand vei conecta baza ta de date MySQL la site-ul Web. Cand rulezi MySQL ia in considerare urmatoarele sfaturi:

Optimizarea MySQL

InapoiInainte


Home Introducere Instalarea Utilizare MySQL Limbajul MySQL Administarea MySQL Configurarea MySQL MySQL si PHP Quiz MySQL Linkuri utile Contacteaza-ma..