GNU/Linux, Open Source, Cloud Computing, DevOps y más...

Cómo crear un usuario en MySQL/MariaDB y concederle permisos para una base de datos desde la línea de comandos

5 comentarios

Logos de MariaDB y MySQLLa 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 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' 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';

4. Conceder todos los privilegios sobre la base de datos al usuario

mysql> GRANT ALL privileges 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:

DROP USER miusuario@localhost;
DROP DATABASE midb;

A continuación dejo un pequeño script muy simple para Bash que nos permite hacer esto 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='%'

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}';FLUSH PRIVILEGES;"

echo "${commands}" | /usr/bin/mysql -u root -p


 

Sobre el autor

Daniel López Azaña
Arquitecto de soluciones Cloud

Emprendedor, generador de ideas y mente inquieta. Apasionado de las nuevas tecnologías, especialmente de los sistemas Linux y del software libre. Me gusta escribir además sobre actualidad tecnológica, Cloud Computing, DevOps, seguridad, desarrollo web y programación, SEO, ciencia, innovación, emprendimiento, etc.

DanielCómo crear un usuario en MySQL/MariaDB y concederle permisos para una base de datos desde la línea de comandos

Artículos relacionados

5 comentarios

Unirte a la conversación
  • Ch - 25/07/2018 responder

    En versiones más recientes este código tal vez funcione mejor, saludos

    Tuyo:
    GRANT ALL privileges ON `mibd`.* TO ‘miusuario’@localhost;

    Mío:
    GRANT ALL PRIVILEGES ON mibd.* TO ‘miusuario’@’%’ WITH GRANT OPTION;

    Aldair - 15/08/2018 responder

    Muchas gracias a ambos, al del post y a Ch.

    Luis - 25/10/2018 responder

    NO utilizar “WITH GRANT OPTION” ya que le dara todos los privilegios de root al otro usuario.

  • José - 31/10/2018 responder

    Muchas gracias por el artículo. Me gustaría saber qué lenguaje utilizar si quiero crear usuarios dinámicamente. Gracias desde ya.

    Daniel - 08/11/2018 responder

    Cualquier lenguaje que disponga de un driver o extensión para acceder a MySQL, y eso en la práctica es cualquier lenguaje de programación, pues MySQL es una base de datos ampliamente extendida.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

 

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.