Como sabeis y por seguridad es recomendable que cada aplicacion que tengais sobre php contra una BD de MySQL cada tabla deberia tener su propio usuario y contraseña ignorando por completo el uso de root. Bien pues hay aplicaciones donde los usuarios necesitan crear sus propias tablas y usuarios dentro de las Base de Datos, si creamos un usuario y le asignamos todos los permisos aun sera insuficiente no podra crear usuarios y recibiremos algo como.
mysql> create user prueba@’localhost’ identified by ‘contraseña’;
ERROR 1227 (42000): Access denied; you need the CREATE USER privilege for this operation
Bien necesitamos asignarle a nuestro usuario que por supuesto no es root los privileges de CREATE USER
Ahora si debemos hacernos root y verificar nuestros permisos
mysql> show grants for usuarioprueba;
+——————————————————————————–+
| Grants for usuarioprueba@% |
+——————————————————————————–+
| GRANT USAGE ON *.* TO ‘usuarioprueba’@’%’ IDENTIFIED BY PASSWORD ‘564654654654646’ |
| GRANT ALL PRIVILEGES ON `BD`.* TO ‘usuarioprueba’@’%’ WITH GRANT OPTION |
+——————————————————————————–+
2 rows in set (0.00 sec)
Bien pues segun esto tenemos posibilidad para hacer uso de la base dedatos y realizar operaciones sobre ella pero no podemos crear aun usuarios ya que los permisos
FILE, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, SHOW DATABASES, SHUTDOWN, SUPER, and CREATE USER son permisos que se establecen sobre la BD global es decir si intentais hacerlos sobre la BD en cuestion dara el siguiente error.
GRANT CREATE USER ON `BD`.* TO ‘usuarioprueba’@’%’ IDENTIFIED BY ‘5465465465446454’ WITH GRANT OPTION;
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
Debemos ejecutarlo de la siguiente forma.
GRANT CREATE USER ON *.* TO ‘usuarioprueba’@’localhost’;
Query OK, 0 rows affected (0.00 sec)
Si ahora vemos nuestros permisos tendremos lo siguiente
mysql> show grants for usuarioprueba@’localhost’;
+———————————————————————————————-+
| Grants for usuarioprueba@localhost |
+———————————————————————————————-+
| GRANT CREATE USER ON *.* TO ‘usuarioprueba’@’localhost’ IDENTIFIED BY PASSWORD ‘54544646546546546’ |
+———————————————————————————————-+
1 row in set (0.00 sec)
Si quisieramos qutiar los permisos pues con el comando
REVOKE ALL PRIVILEGES, GRANT OPTION FROM usuarioprueba@’localhost’;
Lo dejaremos muy limpito :=)