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.
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)
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)
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)
GRANT privilegii [coloane] ON obiect TO utilizator [IDENTIFIED BY ‘parola’] [WITH GRANT OPTION]
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 |
REVOKE privilegii [(coloane)] ON item FROM utilizator
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