Permisos de usuario en MySQL y MariaDB

Aprendemos a gestionar usuarios en bases de datos relacionales como MySQL y MariaDB, desde la consola de comandos en GNU/Linux. Esta entrada es la respuesta a una petición de un usuario, que recientemente me planteaba la duda, de como asignar permisos de un usuario sobre una base de datos en concreto.


Lo cierto es que en todos estos años he tratado en una veintena de entradas temas sobre motores de base de datos como MySQL y MariaDB, pero me faltaba explicar esta tarea básica.

La mejor forma de decir, es hacer, por lo que veamos poco a poco, en sencillos pasos como asignar permisos de usuario sobre una base de datos.

Asignar permisos de usuario en MySQL y MariadB

Primero de todo, mediante el usuario ‘root’, he creado un un usuario de prueba, llamado Pedro Vázquez, totalmente ficticio, y una vez hecho esto, también he creado una serie de bases de datos. Antes de nada accedemos al gestor:

[root@servnagios ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 18
Server version: 10.3.17-MariaDB MariaDB Server
 
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement

He creado el usuario utilizando las típicas abreviaturas utilizadas por las empresas, como por ejemplo «userpvazquez»

CREATE USER userpvazquez@localhost IDENTIFIED BY 'contrasea1';

Una vez hecho esto, tal y como os expliqué, en una entrada anterior, podemos listar los usuarios actuales, con la siguiente sentencia:

SELECT * FROM mysql.user;

Ahora creamos una serie de bases de datos de test:

CREATE DATABASE testdb01;
CREATE DATABASE testdb02;
CREATE DATABASE testdb03;

Si listamos las bases de datos actuales:

MariaDB [(NONE)]>; SHOW DATABASES;
+--------------------+
| DATABASE           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| testdb01           |
| testdb02           |
| testdb03           |
+--------------------+
6 ROWS IN SET (0.000 sec)

Ahora sí, asignamos permisos del usuario sobre la primera de las bases de datos de test:

GRANT ALL PRIVILEGES ON testdb01.* TO 'userpvazquez@'localhost';

Si ahora, en cambio, accedemos al servidor de MariaDB con nuevo usuario, veremos únicamente las bases de datos que este tiene asignadas:

Primero accedemos:

[root@servnagios ~]# mysql -u userpvazquez -p

Y listamos las bases de datos disponibles:

MariaDB [(NONE)]> SHOW DATABASES;
+--------------------+
| DATABASE           |
+--------------------+
| information_schema |
| testdb01           |
+--------------------+
2 ROWS IN SET (0.000 sec)

Si en cambio, queremos eliminar un usuario, utilizaremos la sentencia DROP, como se ve en el ejemplo:

DROP USER 'usuario'@'localhost';

En cambio, si queremos modificar sus permisos usaremos la orden REVOKE:

REVOKE UPDATE, DELETE ON *.* FROM 'usuario'@'localhost';

De esta manera el usuario en cuestión no podrá ni editar ni borrar datos en las tablas.

Si queremos quitarle todos los permisos:

REVOKE ALL PRIVILEGES ON *.* FROM 'usuario'@'localhost';

Para saber más, os recomiendo que consultéis la documentación oficial, aquí:

Create new user with MariaDB

User account management in MariaDB<