Donar permisos a un usuari en MySQL

// 22 de juliol de 2011 // Linux

MySQLÚltimament, per motius de feina, estic treballant prou amb bases de dades MySQL. I gràcies a la magnifica instal·lació elèctrica que tenim a la universitat, últimament se m’ha corromput diverses vegades la base de dades amb què estava treballant. A més, també he hagut de fer unes quantes instal·lacions de la BD amb usuaris nous en altres equips. I al crear el nou usuari, m’he trobat amb el següent problema:

Suposem que partim d’aquest codi

create database prova;
grant all on prova.* to 'usuari'@'%' identified by 'contrasenya';

La primera línia ens crea una base de dades, anomenada prova. Amb la segona, estem donant-li tots els permisos a l’usuari usuari es connecte des d’on es connecte (amb el comodí de MySQL, %), i que la seva contrasenya serà contrasenya. Fins ara sembla tot prou senzill i clar, no?

Doncs no funciona, i aquest és l’error que ens torna el MySQL quan intentem connectar-nos al MySQL des del terminal

mysql -u usuari -pcontrasenya
ERROR 1045 (28000): Access denied for user 'usuari'@'localhost' (using password: YES)

Per què ens dona aquest error? Perquè encara que li hem donat permisos a l’usuari usuari per a connectar-se a MySQL “des de qualsevol lloc”, açò inclou tots els llocs possibles excepte localhost. És a dir, des de qualsevol altra màquina del món ens podrem connectar a eixa base de dades, però no des de la mateixa on està instal·lat el servidor!

Per a solucionar-ho, només cal que afegim una tercera ordre al codi original, donant permís explícit per a connectar-se a la nostra base de dades des de localhost.

create database prova;
grant all on prova.* to 'usuari'@'%' identified by 'contrasenya';
grant all on prova.* to 'usuari'@'localhost' identified by 'contrasenya';

Potser a algú li vinga bé aquesta entrada, i segurament d’aci alguns mesos, quan haja de crear un nou usuari de MySQL i m’isca aquest error, no m’hauré de tirar hores pensant/buscant per internet la solució.

Deixeu una resposta