La tarea de crear un usuario en MySQL o en MariaDB y asignarle privilegios para poder acceder a una base de datos específica y poder escribir información en ella es una tarea muy habitual que es necesario realizar cada vez que instalamos una aplicación destinada a correr sobre plataforma LAMP. Ya sea un simple WordPress, o una aplicación más compleja desarrollada a medida, de un modo u otro siempre vas a tener que llevar a cabo estos pasos en algún momento antes de poder ponerla en funcionamiento.
Estos comandos son válidos para ser ejecutados tanto desde la consola o línea de comandos del cliente genérico de MySQL como desde cualquier herramienta que nos permita ejecutar comandos SQL sobre una instalación de MySQL como phpMyAdmin o MySQL Workbench. También sirven para conseguir el mismo objetivo en MariaDB.
1. Creación de la base de datos
mysql> CREATE DATABASE `mibd`;
2. Creación del usuario
mysql> CREATE USER 'miusuario'@localhost IDENTIFIED BY 'mipassword';
3. Conceder permisos para poder acceder y usar el servidor MySQL
Para sólo permitir el acceso local desde el propio servidor (localhost). Esta será la configuración más segura y más habitual que usaremos para una aplicación web:
mysql> GRANT USAGE ON *.* TO 'miusuario'@localhost IDENTIFIED BY 'mipassword';
Para permitir el acceso desde cualquier otra máquina que tenga acceso al servidor MySQL desde la red:
mysql> GRANT USAGE ON *.* TO 'miusuario'@'%' IDENTIFIED BY 'mipassword';
En MySQL 8 o superior no pondremos la parte IDENTIFIED BY ‘mipassword’.
4. Conceder todos los privilegios sobre la base de datos al usuario
MySQL 5.7 y versiones anteriores:
mysql> GRANT ALL privileges ON `mibd`.* TO 'miusuario'@localhost IDENTIFIED BY 'mipassword';
MySQL 8 y versiones superiores:
mysql> GRANT ALL ON `mibd`.* TO 'miusuario'@localhost;
Al igual que en punto anterior, si queremos que el usuario pueda trabajar con la base de datos desde cualquier ubicación tendremos que sustituir localhost por ‘%’.
5. Aplicar los cambios realizados
Para que sean efectivos los nuevos permisos que hemos asignado debemos finalizar con el siguiente comando:
mysql> FLUSH PRIVILEGES;
6. Verificar que nuestro nuevo usuario tiene los permisos correctos
mysql> SHOW GRANTS FOR 'miusuario'@localhost;
+--------------------------------------------------------------+
| Grants for miusuario@localhost |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'miusuario'@'localhost' |
| GRANT ALL PRIVILEGES ON `mibd`.* TO 'miusuario'@'localhost' |
+--------------------------------------------------------------+
2 rows in set (0,00 sec)
Si nos hemos equivocado en algún punto podemos deshacer todos los pasos ejecutando los siguientes comandos, teniendo la precaución de sustituir localhost por ‘%’ si también lo cambiaste en los pasos anteriores. Luego podrás volver de nuevo a crear tu usuario MySQL volviendo al principio:
DROP USER miusuario@localhost;
DROP DATABASE midb;
A continuación dejo un pequeño script muy simple para Bash que nos permite hacer esto en Linux de una forma mucho más rápida y directa, cambiando simplemente el nombre de nuestro usuario y de nuestra base de datos:
#! /bin/bash
newUser='testuser'
newDbPassword='testpwd'
newDb='testdb'
host=localhost
#host='%'
# MySQL 5.7 and earlier versions
#commands="CREATE DATABASE \`${newDb}\`;CREATE USER '${newUser}'@'${host}' IDENTIFIED BY '${newDbPassword}';GRANT USAGE ON *.* TO '${newUser}'@'${host}' IDENTIFIED BY '${newDbPassword}';GRANT ALL privileges ON \`${newDb}\`.* TO '${newUser}'@'${host}' IDENTIFIED BY '${newDbPassword}';FLUSH PRIVILEGES;"
# MySQL 8 and higher versions
commands="CREATE DATABASE \`${newDb}\`;CREATE USER '${newUser}'@'${host}' IDENTIFIED BY '${newDbPassword}';GRANT USAGE ON *.* TO '${newUser}'@'${host}';GRANT ALL ON \`${newDb}\`.* TO '${newUser}'@'${host}';FLUSH PRIVILEGES;"
echo "${commands}" | /usr/bin/mysql -u root -p



Comentarios
Enviar comentario