Conceder permisos a los usuarios de MySQL y MariaDB

En algún momento, cuando diferentes usuarios necesitan trabajar con las bases de datos, de un sistema MySQL o MariaDB, necesitaremos concederles permisos. Ya sea para que puedan modificar, puedan únicamente realizar consultas o simplemente listar las bases de datos.

Conceder permisos a los usuarios de MySQL y MariaDB

Sin  utilizar ningún gestor gráfico, desde la consola de comandos, estamos habituados a utilizar el usuario de root para hacer todos tipo de tareas, pero eso, cuando hay muchas bases de datos diferentes, con diferentes usuarios asignados, se complica. Ya que, como es obvio, no daremos permisos de root al primero que pasa.

El formato para asignar los permisos es el siguiente:

GRANT permiso ON basededatos.tabla TO 'usario'@'localhost';

En esta lista os dejo las opciones más habituales:

  • ALL – permite el acceso completo a una base de datos específica. Si no se especifica una base de datos, permite el acceso completo a la totalidad de MySQL.
  • CREATE – permite que un usuario cree bases de datos y tablas.
  • DELETE – permite que un usuario elimine filas de una tabla.
  • DROP – permite que un usuario elimine bases de datos y tablas.
  • EXECUTE – permite que un usuario ejecute rutinas almacenadas.
  • GRANT OPTION – permite que un usuario conceda o elimine los privilegios de otro usuario.
  • INSERT – permite que un usuario inserte filas de una tabla.
  • SELECT – permite que un usuario seleccione datos de una base de datos.
  • SHOW DATABASES – permite que un usuario vea una lista de todas las bases de datos.
  • UPDATE – permite que un usuario actualice filas en una tabla.

Por ejemplo utilizando CREATE, para todas las bases de datos y para todas las tablas:

GRANT CREATE ON *.* TO 'usuariotest'@'localhost';

Usar un asterisco (*) en lugar de la base de datos o tabla es una opción completamente válida e implica todas las bases de datos o todas las tablas.

Para otorgar a un usuario la capacidad de eliminar tablas en la base de datos específica, usaremos DROP:

GRANT DROP ON basededatos.* TO 'usuariotest'@'localhost';

Cuando terminemos de realizar los cambios de permiso, es una buena práctica volver a cargar todos los privilegios con el comando flush.

FLUSH PRIVILEGES;

Verificar permisos de usuario

Una vez hayamos asignado los permisos, los tenemos que verificar:

SHOW GRANTS FOR 'usuariotest'@'localhost';

Esto es un pequeño resumen, que como viene siendo habitual,os servirá tanto a vosotros como a mi, ya que utilizo las entradas en la web para mis apuntes, como bien es sabido 🙂

En la web hemos hablado largo y tendido sobre MySQL y MariaDB,  podéis consultar las entradas.

Siempre podéis consultar la guía de referencia oficial:

MYSQL 8.0 Reference Manual – GRANT Statement

Entradas consultadas

Stackoverflow – Grant a user permission to only view a mysql view

Liquid web – Grant permissions to a MySQL User on Linux via command line