6. DCL - Control d'usuaris
Fins ara hem fet servir només l'usuari root, que és l'administrador, i que disposa de tots els privilegis en MySQL. Però no convé que tots els usuaris tinguen tots els permisos.
MySQL permet definir usuaris i assignar-los permisos. Vorem només algunes opcions de les sentències sobre usuaris i permisos, encara que MySQL en permet moltes més.
Començarem explicant com crear usuaris i com esborrar-los. Després vorem com assignar-los permisos (de fer select, update, delete) sobre quins objectes (camps, taules, bases de dades...). Finalment vorem la creació de rols (grups de permisos) per a poder-los assignar a usuaris (en compte de permisos solts).
6.1. Usuaris
Creació d'usuaris
| SQL | |
|---|---|
Nota
També es podrien crear d'estes formes:
-
Amb la mateixa sentència que serveix per a donar permisos:
SQL -
Fent un insert en la taula on es guarden els usuaris:
Obrir sessió en un usuari
Una volta hem creat l'usuari, podrem obrir una sessió MySQL amb eixe usuari (però encara no podrà vore cap BD ja que encara no li hem donat permisos).
-
Des de consola:
SQL -
O bé, en el gestor Workbench, obrint una sessió amb l'usuari que siga.
Esborrar usuaris
Consultar usuaris existents
| SQL | |
|---|---|
Noms d'usuaris
Quan creem un usuari, quan l'esborrem, o quan li donem o llevem permisos, estarem indicant un nom d'usuari. Eixe nom pot estar format per dos parts, separats pel signe @:
| Text Only | |
|---|---|
El nom_maquina indica des de quina màquina (host) tindrà eixe usuari els permisos que se li donen. El nom_maquina pot ser localhost o una IP. Esta IP també admet el comodí %.
Exemples:
| SQL | |
|---|---|
L'usuari alumne només pot connectar-se des d'un ordinador amb eixa IP.
| SQL | |
|---|---|
L'usuari alumne només pot connectar-se des del mateix ordinador on està executant-se el servidor de MySQL.
| SQL | |
|---|---|
L'usuari alumne podrà connectar-se des de qualsevol màquina. És l'opció per defecte si no s'indica el @nom_maquina.
| SQL | |
|---|---|
L'usuari alumne podrà connectar-se des de màquines amb una adreça IP compresa entre 192.168.1.1 i 192.168.1.255.
Estos són exemples de creació d'usuaris indicant el host des d'on es pot accedir, però quan s'assignen permisos a un usuari (ho vorem a l'apartat següent) també podrem indicar el host en eixe usuari, per a dir des de quin host té eixe usuari eixos permisos.
Noms d'usuaris en entorns Mac
En alguna versió pot donar problemes la gestió d'usuaris si no indiquem el host o si posem el comodí %. Per tant, usarem sempre: nomUsuari@localhost
6.2. Permisos
Concedir permisos
La sintaxi resumida per a concedir permisos és:
Veiem què podem posar en cada apartat:
| Permisos que volem donar | Sobre què donem els permisos | A qui li donem els permisos |
|---|---|---|
SELECT Per a fer consultes de taules (permet especificar columnes) |
nom_bd.nom_taula Sobre una taula |
TO usuaris |
INSERT Per a inserir dades en una taula (permet especificar columnes) |
nom_bd.* Sobre una base de dades |
WITH GRANT OPTION (opcional): li donem permís per a que puga donar eixos permisos |
UPDATE Per a modificar dades d'una taula (permet especificar columnes) |
*.* Sobre totes les bases de dades |
|
DELETE Per a esborrar dades d'una taula |
||
CREATE Per a crear taules |
||
DROP Per a eliminar taules |
||
ALTER Per a modificar l'estructura de les taules |
||
ALL Tots els permisos |
||
USAGE Cap permís (és altra forma de crear usuaris) |
Exemples
Estem donant permís a l'usuari alumne per a fer selects sobre la taula assignatures (de la BD institut).
Si ara obrim una sessió amb l'usuari alumne, veiem què passa si fem...
Els permisos d'un usuari es poden saber amb:
| SQL | |
|---|---|
| SQL | |
|---|---|
| SQL | |
|---|---|
Estem donant als usuaris alumne i paremare permís per a consultar (fer select) els camps assig, ava i nota de la taula notes de la BD institut. I també per a modificar el domicili i tel d'eixa taula de notes. També donem permís a alumne i paremare per a que donen eixos permisos a qui vulguen.
Permís que indica "cap permís". És altra forma de crear un usuari. Si creem un usuari amb CREATE USER... també es crea eixe permís.
La sintaxi de GRANT, un poc més detallada
| SQL | |
|---|---|
Al mateix temps que donem un permís es pot canviar la contrasenya de l'usuari.
Per tant, hem vist que hi ha distints tipus de permisos en MySQL:
-
Globals: s'apliquen a totes les BD d'un servidor.
SQL -
De base de dades: per a una BD individual (i per a tots els seus objectes).
SQL -
De taula: per a una taula o vista individual (i per a totes les seues columnes).
SQL -
De columna: per a una columna d'una taula concreta.
-
De files: per a unes files d'alguna taula. Ho farem amb les vistes.
-
De rutina: Ja vorem que MySQL permet crear funcions i procediments, i podrem donar permisos per a poder-los executar, etc.
Revocar permisos
Per a revocar (llevar) permisos s'usa la sentència REVOKE.
Estem llevant a l'usuari alumne el permís per a vore la nota en la taula assignatures.
Estem llevant als usuaris pep i pepa els permisos per a inserir, modificar o esborrar de la taula assignatures.
Veiem ara uns casos especials:
-
Revocar tots els permisos, llevat de GRANT OPTION:
SQL -
Revocar el GRANT OPTION:
SQL -
Revocar tots els permisos, inclòs el GRANT OPTION:
SQL Nota
En este cas no es posa el
ON *.*.
6.3. Rols
Un rol és un conjunt de permisos. Vegem la utilitat.
Suposem que cada alumne ha de tindre el seu usuari però volem que tots tinguen els mateixos permisos. A vegades n'afegirem o en llevarem, però volem que tots els alumnes tinguen sempre els mateixos permisos.
La solució és crear un rol alumne i assignar-li (o llevar-li) tots els permisos que ha de tindre qualsevol alumne. Després només haurem d'indicar quins usuaris tindran el rol alumne.
Nota
La gestió de rols en MySQL està a partir de la versió 8. Per vore la versió que tens instal·lada recorda que has d'executar:
| SQL | |
|---|---|
Vegem amb exemples què es pot fer amb els rols:
Creació de rols
Esborrar rols
| SQL | |
|---|---|
Assignar permisos a un rol
| SQL | |
|---|---|
Assignar rols a usuaris
| SQL | |
|---|---|
Crear usuaris amb algun rol ja assignat
| SQL | |
|---|---|
Podem passar permisos d'usuari a rol, rol a usuari, usuari a usuari o usuari a rol
| SQL | |
|---|---|
Exercicis sobre usuaris i permisos (BD lliga1213)
-
Crea els usuaris
entrenador,jugador,aficionat,provaiprova2, que tinguen com a clau la mateixa que el nom d'usuari. -
Canvia el password de l'entrenador i posa-li:
mister. -
Esborra l'usuari
prova2. -
Dóna permís a l'usuari
entrenadorper a vore totes les dades de la BD, de forma queentrenadortambé puga donar eixos permisos a qui vullga. -
Mostra els permisos de l'usuari
entrenador. -
Dóna permís a l'usuari
aficionatper a vore les dades de la vistaclassif2. -
Dóna permís de lectura a
provasobre la taulaequipsper a vore totes les dades excepte del pressupost.Notes
- No podem donar permís de lectura a tota la taula en general, sense especificar columnes (
grant select on equips) i després llevar-li permís de lectura però només del pressupost (revoke select(pressupost) on equips) ja que només es pot fer revoke del mateix grant que s'havia fet. - Podríem pensar en donar permís de lectura a tota la taula equips, després tornar a donar permís de lectura del pressupost i després llevar la lectura del pressupost, però no seria correcte ja que encara tindrem permís per a vore el pressupost, ja que haurem llevat el segon grant, però no el grant primer de lectura de totes les columnes.
- Per tant, l'única solució serà donar permís camp a camp de totes les columnes d'equips excepte del pressupost.
- No podem donar permís de lectura a tota la taula en general, sense especificar columnes (
-
Dóna permís a
entrenadorper a modificar ellloci elnomdels jugadors. -
Dóna permís a
entrenadorper a esborrar jugadors, golejadors i porters. -
Lleva tots els permisos a l'usuari
prova. -
Dóna permís a
provaper a vore només les dades dels partits del Barça. Esta té truc. -
Crea el rol
proves. Fes que l'usuariprovatinga eixe rol. Dona al rolprovespermís per a consultar el pressupost de la taulaequips. Comprova que l'usuariprovapot consultar eixe camp pressupost.