Como crear usuarios en MySql y MariaDB, tienen sus diferencias



MySql y MariaDB son muy similares pero tienen sus diferencias a la hora de trabajar con ellas, eEn este artículo nos centramos en cómo se crea un usuario y se le asigna permisos ...








Las pruebas están hechas con Ubuntu 24.04, MySql 8.0.44 y MariaDB 10.11.13 en un entorno dockerizado.

1) Como crear usuarios en MySql y MariaDB

Para crear un usuario en MySql y MariaDB se utiliza la siguiente instrucción:

CREATE USER 'user01'@'localhost' IDENTIFIED BY 'password';

donde:
  • user01 - es el usuario
  • localhost - es desde donde se podrá conectar el usuario user01
  • password - el password de acceso

Tanto a MySql como a MariaDB podemos añadir el tipo de autentificación que queremos utilizar, pero cuidado, no son las mismas para

En MySql de la siguiente forma

CREATE USER 'user02'@'localhost' 
IDENTIFIED WITH mysql_native_password
BY 'password';

Esto creará un usuario con autenticación mysql_native_password

En MariaDB para crear el mismo usuario con la misma autentificación hay que utilizar la siguiente instrucción

CREATE USER 'user02'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('password');

Cuidado porque en MySql y MariaDB no son los mismo plugins de autentificación, algunos si. Tipos de usuarios que podemos crear, bueno, más que tipos es desde donde pueden conectarse y básicamente son tres:
  • localhost, solo se conecta desde el propio servidor
  • %, permite conexiones desde cualquier sito, cuidado en producción
  • IP, desde una IP determinada

Por ejemplo

CREATE USER 'user01'@'localhost' IDENTIFIED BY 'password';

Ahora user01 no solo accede desde el propio servidor sino que puede acceder desde cualquier sitio.

Para ver los usuarios que tenemos usamos la base de datos mysql y puedes utilizar esta consulta:

select user, host, authentication_string, plugin from user;



2) Como dar permisos en MySql y MariaDB

Ahora que tenemos a los usuarios creados o por lo menos ya sabemos cómo crearlos vamos a otorgar permisos a cada usuario por separado.

Otra opción es crear roles y utilizar los roles para asignar permisos a un grupo de usuarios pero este es otro tema.

A la hora de asignar permisos hay diferentes formas de hacerlo:
  • A todo, permiso para todo “en este mundo” con GRANT ALL PRIVILEGES
  • Permisos a poder realizar determinadas acciones, por ejemplo solo consultas con GRANT SELECT, UPDATE ...

Vamos a ver algunas de ellas

Para conceder permisos se utiliza la sentencia:

GRANT  ON base_de_datos.tabla TO 'usuario'@'IP'

Expliquemos esto un poco
  • Permisos son desde ALL PRIVILEGES a filtrar por acción a realizar SELECT,UPDATE,..
  • base_de_datos.tabla poco a decir, solo que se pueden sustituir por *.* y dan permiso a todo. Y, si, se ha de crear una sentencia por cada tabla.
  • 'usuario'@'IP' donde IP puede ser localhost para permisos en local, una IP o % para cualquier sitio del mundo.

Ejemplos

GRANT ALL PRIVILEGES ON basedatos.* TO 'user01'@'localhost';

Estás sentencia da privilegios al usuario user01 desde la máquina local a la base de datos basedatos y a todas sus tablas.

GRANT ALL PRIVILEGES ON *.* TO 'user01'@'localhost';

Con esta otra hemos dado permisos a todo al usuario user01 desde localhost.

Pero si accedemos desde una máquina remota nos dará este error:

Error acceso a MySql desde maquina remota

Pero si ahora le damos acceso a mi IP solo a consultas y actualizaciones pero antes de darle permisos hay que crearlo

CREATE USER 'user01'@'172.33.0.1' IDENTIFIED BY 'password';
GRANT SELECT, UPDATE ON *.* TO 'user01'@'172.33.0.1';
FLUSH PRIVILEGES;

Para a los que después de hacer esto no les funcione recordaros que MySql y MariaDB bloquea las IP externas de serie y hay que comentar esta linea: bind-address = 127.0.0.1 en el fichero

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf


Y después reiniciar el servicio de MySql sudo service mysql restart

Ahora si probáis ya podréis acceder sin problemas pero solo podréis consultar y actualizar.

Si intentáis borrar o insertar os dará un error como este

mysql> delete from genders where id = 5;
ERROR 1142 (42000): DELETE command denied to user 'user01'@'172.33.0.1' for table 'genders'


Para MariaDB es lo mismo salvo que el fichero a modificar para quitar el bind-address = 127.0.0.1 es

/etc/mysql/mariadb.conf.d/50-server.cnf


Para ver los permisos de los usuarios puedes utilizar esta consulta:

SHOW GRANTS;

O

SHOW GRANTS FOR 'user01'@’localhost’ :



3) Como quitar permisos y borrar usuarios en MySql y MariaDB

Los permisos los podemos quitar poco a poco igual que los damos para determinadas acciones en determinadas bases de datos y tablas de la siguiente manera: Si antes dimos permisos de SELECT y UPDATE en todas las bases de datos ahora quitamos el permiso de actualizar

REVOKE UPDATE ON *.* FROM 'user01'@'172.33.0.1';


Quitar permisos parciales a MySql o MariaDB

O podemos quitar todos los permisos de golpe

REVOKE ALL PRIVILEGES ON *.* FROM 'user01'@'172.33.0.1';


Quitar permisos  a MySql o MariaDB

En MariaDB el proceso es el mismo. Para borrar usuarios utilizamos el comando DROP de la siguiente forma:

DROP USER 'user01'@'?localhost?';

Este es un usuario que he creado mal y si os fijáis en la imagen he puesto la secuencia de borrado.

Y he creado mal el usuario porque siempre va entre comillas simples, a veces al hacer copy & paste se puede pegar otra cosas como acentos y se creará mal el usuario.

Borrar usuarios en  MySql o MariaDB

Recordar que después del ON viene la base de datos (un * para todas) y la tabla (un * para todas) si quereis dar permisos en un base de datos a varias tablas tiene que hacerse una a una:

GRANT SELECT, UPDATE ON appdb.clientes     TO 'user01'@'172.33.0.1';
GRANT SELECT, UPDATE ON appdb.pedidos      TO 'user01'@'172.33.0.1';
GRANT SELECT, UPDATE ON appdb.facturas     TO 'user01'@'172.33.0.1';
GRANT SELECT, UPDATE ON appdb.direcciones  TO 'user01'@'172.33.0.1';

En MariaDB es igual el proceso.

4) Conclusión

Como se puede ver trabajar con usuarios y darles permisos es bastante sencillo y solo hay que tener en cuenta las diferencias entre MySql y MariaDB que no son muchas.

Recordar también que los usuarios y los permisos que se les otorga son unitarios es decir … a un usuario se le asigna una cosa que puede hacer o todas, por ejemplo …

Este usuario que hemos creado 'user01'@’172.33.0.1’ solo puede acceder desde esa IP y por ejemplo el usuario 'user01'@’localhost’ solo podrá acceder desde la propia máquina y además podemos asignarle un password diferente. Son dos usuarios diferentes aunque tengan el mismo nombre.

Con los permisos pasa igual a cada usuario se le pueden asignar permisos diferentes.


... y esto es todo amig@s!!! hasta la próxima ...
Saludos
Alex
:-)
/

Suscríbete a nuestra newsletter

Sin spam. Solo contenido útil para profesionales de bases de datos.