Guía de gestión de usuarios de MariaDB: cómo crear usuarios, conceder privilegios y corregir errores comunes

目次

Introducción

1.1 ¿Quieres aprender a crear usuarios en MariaDB?

¿Alguna vez has querido crear un nuevo usuario en MariaDB y configurar los privilegios adecuados?
Por ejemplo, puede que te hayas encontrado con las siguientes situaciones:

  • Ejecutaste CREATE USER pero no puedes iniciar sesión
  • Concediste privilegios usando GRANT, pero no se aplicaron
  • No estás seguro de cómo configurar los permisos correctos en un entorno de producción
  • Quieres eliminar de forma segura usuarios innecesarios

Si estás enfrentando estos problemas, este artículo te ayudará a comprender completamente todo el proceso, desde la creación de usuarios hasta la gestión de privilegios y la eliminación de usuarios en MariaDB.

1.2 Qué aprenderás en este artículo

Este artículo ofrece una explicación detallada de los siguientes aspectos de la gestión de usuarios en MariaDB:

  • Cómo crear y eliminar usuarios en MariaDB
  • Cómo conceder y administrar privilegios (mejores prácticas para una configuración adecuada de permisos)
  • Errores comunes y cómo resolverlos
  • Mejores prácticas operativas para entornos de desarrollo y producción

Todos los temas se explican con ejemplos de SQL amigables para principiantes, lo que te permite aprender y practicar al mismo tiempo.

1.3 Público objetivo

Este artículo está dirigido a:

  • Principiantes: quienes aprenden la gestión de usuarios en MariaDB por primera vez
  • Ingenieros: quienes desean configurar permisos adecuados en entornos de desarrollo
  • Administradores de bases de datos: quienes buscan reforzar la seguridad en entornos de producción

Aunque seas nuevo en MariaDB, esta guía brinda información práctica que puedes aplicar con confianza en operaciones reales.

Creación de usuarios en MariaDB

2.1 Comando básico para crear usuarios

En MariaDB, creas un nuevo usuario usando el comando CREATE USER.
Puedes especificar un nombre de usuario y una contraseña con la siguiente sintaxis:

CREATE USER 'username'@'hostname' IDENTIFIED BY 'password';

Por ejemplo, para crear un usuario llamado yamada en localhost con la contraseña password123:

CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';

Después de ejecutar este comando, el usuario yamada será creado y podrá iniciar sesión solo desde localhost (el inicio de sesión está permitido únicamente en el propio servidor).

2.2 Ejemplos de creación de usuarios según el caso de uso

Al crear usuarios en MariaDB, puedes especificar desde dónde se permiten las conexiones usando el campo hostname.
Es importante configurar los ajustes de manera adecuada según tu caso de uso.

CaseCommand ExampleDescription
Local Environment (Development)CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password';User dedicated to development environment
Allow Remote ConnectionsCREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';Allow connections from any host (security caution required)
Allow Connection from Specific IPCREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password';Restrict access to a specific IP address only
Allow Connection from Specific SubnetCREATE USER 'network_user'@'192.168.1.%' IDENTIFIED BY 'password';Allow only machines with IP addresses in the 192.168.1.x range

Usar '%' permite conexiones desde todos los hosts, pero
esto representa un riesgo de seguridad significativo y no se recomienda para entornos de producción.
En producción, lo mejor es especificar direcciones IP o configurar el acceso a través de una VPN.

2.3 Notas importantes al crear usuarios

Existen varias consideraciones importantes al crear usuarios.

(1) Verificar usuarios existentes

Antes de crear un usuario, es importante confirmar que no exista ya un usuario con el mismo nombre.
Puedes listar los usuarios registrados actualmente con el siguiente comando:

SELECT user, host FROM mysql.user;

Salida de ejemplo:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
+---------+-----------+

Si ya existe un usuario con el mismo username@hostname, ejecutar CREATE USER producirá un error.

(2) Qué hacer si el usuario ya existe

En MariaDB, no puedes sobrescribir un usuario existente recreándolo.
Si el mismo usuario ya existe, utiliza una de las siguientes opciones:

  • Cambiar la contraseña del usuario existente
    ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
    
  • Eliminar el usuario innecesario y crear uno nuevo
    DROP USER 'yamada'@'localhost';
    CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';
    

Gestión de privilegios en MariaDB

3.1 Conceder privilegios

Sintaxis básica

En MariaDB, puedes otorgar privilegios a un usuario utilizando el comando GRANT.

GRANT privilege ON database_name.table_name TO 'username'@'hostname';

Por ejemplo, para otorgar todos los privilegios en test_db al usuario yamada:

GRANT ALL PRIVILEGES ON test_db.* TO 'yamada'@'localhost';

Significado de este comando:

  • ALL PRIVILEGES : Otorga todos los privilegios
  • test_db.* : Se aplica a todas las tablas en la base de datos test_db
  • 'yamada'@'localhost' : Se aplica al usuario yamada que inicia sesión desde localhost

3.2 Privilegios Comúnmente Usados

En MariaDB, puedes otorgar privilegios como los siguientes:

PrivilegeDescription
ALL PRIVILEGESGrant all privileges
SELECTRead data
INSERTInsert data
UPDATEUpdate data
DELETEDelete data
CREATECreate new tables or databases
DROPDrop databases or tables
GRANT OPTIONGrant privileges to other users
ALTERModify table structure
EXECUTEExecute stored procedures or functions
RELOADReload server settings

Si solo quieres permitir operaciones específicas, se recomienda otorgar privilegios individualmente en lugar de otorgar todo.

3.3 Configuraciones de Privilegios por Caso de Uso

Es importante asignar los privilegios adecuados para cada situación.

SituationRecommended PrivilegesCommand Example
WordPress OperatorSELECT, INSERT, UPDATE, DELETEGRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost';
Developer (Development Environment)ALL PRIVILEGESGRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%';
Read-Only UserSELECT onlyGRANT SELECT ON analytics_db.* TO 'readonly'@'localhost';
Database Administrator (Production Environment)ALL PRIVILEGES (restricted)GRANT ALL PRIVILEGES ON production_db.* TO 'admin'@'localhost';

En entornos de producción, evita otorgar ALL PRIVILEGES demasiado fácilmente.

3.4 Verificar Privilegios Otorgados

Para verificar los privilegios otorgados, utiliza el comando SHOW GRANTS.

SHOW GRANTS FOR 'username'@'hostname';

Por ejemplo, para verificar los privilegios del usuario yamada:

SHOW GRANTS FOR 'yamada'@'localhost';

Salida de ejemplo:

+-----------------------------------------------------------------------------------+
| Grants for yamada@localhost                                                       |
+-----------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'yamada'@'localhost'                |
+-----------------------------------------------------------------------------------+

Esto muestra los privilegios actualmente otorgados al usuario.

3.5 Revocar Privilegios (Eliminar Permisos)

Para revocar privilegios específicos de un usuario, utiliza el comando REVOKE.

Sintaxis Básica

REVOKE privilege ON database_name.table_name FROM 'username'@'hostname';

Por ejemplo, para revocar el privilegio UPDATE del usuario yamada:

REVOKE UPDATE ON test_db.* FROM 'yamada'@'localhost';

Revocar Todos los Privilegios

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

3.6 Qué Hacer Cuando los Cambios de Privilegios No Tienen Efecto

En MariaDB, los cambios de privilegios pueden no aplicarse inmediatamente. Si eso sucede, ejecuta el siguiente comando:

FLUSH PRIVILEGES;

Ejecutar este comando obliga a MariaDB a recargar las tablas de privilegios para que tus cambios tengan efecto inmediatamente.

Eliminación de Usuarios en MariaDB

4.1 Eliminar un Usuario

Para eliminar un usuario de MariaDB, utiliza el comando DROP USER.

Sintaxis Básica

DROP USER 'username'@'hostname';

Por ejemplo, para eliminar el usuario yamada de localhost:

DROP USER 'yamada'@'localhost';

Después de ejecutar este comando, el usuario yamada será completamente eliminado del sistema MariaDB.

4.2 Qué Verificar Antes de Eliminar un Usuario

Antes de eliminar un usuario, hay algunas verificaciones importantes que debes realizar.
Ten cuidado de no eliminar usuarios necesarios por error.

(1) Verificar si el Usuario Objetivo Existe

En MariaDB, intentar eliminar un usuario inexistente causará un error.
Ejecuta el siguiente comando para confirmar que el usuario objetivo existe:

SELECT user, host FROM mysql.user;

Salida de ejemplo:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
| admin   | 192.168.1.100 |
+---------+-----------+

Si el usuario yamada aparece en esta lista, el usuario puede ser eliminado.

(2) Verificar si el Usuario Está Actualmente Conectado

En MariaDB, si el usuario que estás eliminando tiene actualmente una sesión activa,
la eliminación puede no tener efecto inmediatamente para esa sesión.
Verifica si el usuario está activo utilizando el siguiente comando:

SELECT user, host FROM information_schema.processlist;

Salida de ejemplo:

+---------+-----------+
| user    | host      |
+---------+-----------+
| yamada  | localhost |
| root    | localhost |
+---------+-----------+

En este ejemplo, el usuario yamada está actualmente activo, por lo que debe terminar la sesión antes de eliminarlo.

(3) Forzar la terminación de una sesión

Puede forzar la terminación de una sesión específica usando el comando KILL.

  1. Primero, verifique el ID del proceso (la columna ID):
    SELECT id, user, host FROM information_schema.processlist;
    

Salida de ejemplo:

+----+---------+-----------+
| id | user    | host      |
+----+---------+-----------+
| 10 | yamada  | localhost |
| 11 | root    | localhost |
+----+---------+-----------+
  1. Si yamada tiene el ID de proceso 10, termínela con:
    KILL 10;
    

4.3 Limpieza después de la eliminación

Después de eliminar un usuario, puede quedar información residual de privilegios en la base de datos.
En esos casos, ejecute FLUSH PRIVILEGES para actualizar las tablas de privilegios.

FLUSH PRIVILEGES;

Ejecutar esto garantiza que la información del usuario eliminado se elimine completamente del sistema de bases de datos.

4.4 Notas importantes al eliminar usuarios

Tenga en cuenta los siguientes puntos al eliminar usuarios:

  1. Los usuarios eliminados no pueden ser restaurados * Una vez que ejecute DROP USER, el usuario eliminado no puede recuperarse. * Si se elimina por error, debe recrear el usuario usando CREATE USER.

  2. Los privilegios pueden necesitar ser transferidos * Si el usuario eliminado era responsable de operaciones críticas de la base de datos, debe transferir los privilegios necesarios a otro usuario apropiado con antelación.

  3. Tenga cuidado en entornos de producción * En entornos de producción, una eliminación repentina puede causar tiempo de inactividad del sistema o errores. * Se recomienda encarecidamente analizar el impacto con anticipación y crear una copia de seguridad.

Errores comunes y soluciones (FAQ)

Al gestionar usuarios en MariaDB, puede encontrarse con varios errores.
Esta sección explica los errores más comunes, sus causas y cómo resolverlos.

5.1 Preguntas frecuentes para principiantes

P1: ¿Cuál es la diferencia entre la gestión de usuarios en MariaDB y MySQL?

MariaDB y MySQL generalmente usan la misma sintaxis, pero existen algunas diferencias de funcionalidades.

Comparison ItemMySQLMariaDB
CREATE USERSupportedSupported
SHOW GRANTS FORSupportedSupported
DROP USERSupportedSupported
CREATE ROLEMySQL 8.0 and laterMariaDB 10.0 and later

MariaDB soporta CREATE ROLE, lo que permite la gestión de usuarios basada en roles.

P2: ¿Cuál es la diferencia entre localhost y %?

En la gestión de usuarios de MariaDB, especificar el nombre de host es fundamental.

  • localhost : Permite conexiones solo desde la máquina local
  • % : Permite conexiones desde cualquier host (riesgo de seguridad)
  • 192.168.1.100 : Permite conexiones solo desde una dirección IP específica
  • 192.168.1.% : Permite conexiones solo desde una subred específica (192.168.1.*)

5.2 Solución de problemas

P3: ¿Cómo corregir «ERROR 1396 (HY000): Operación CREATE USER falló»?

Causa: El usuario especificado ya existe, por lo que no se puede crear un nuevo usuario.

Solución: Verifique si el usuario existe y elimínelo o modifíquelo si es necesario.

  1. Verificar usuarios existentes
    SELECT user, host FROM mysql.user WHERE user='yamada';
    
  1. Eliminar si no es necesario
    DROP USER 'yamada'@'localhost';
    
  1. Cambiar la contraseña en su lugar
    ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
    

P4: Los privilegios otorgados con GRANT no se aplican

Causa: La caché de privilegios de MariaDB no se ha actualizado.

Solución: Ejecute FLUSH PRIVILEGES para recargar los privilegios.

FLUSH PRIVILEGES;

P5: No se puede conectar de forma remota incluso usando %

Causa: Las conexiones remotas pueden estar restringidas en el archivo de configuración de MariaDB.

Solución:

  1. Edite el archivo de configuración /etc/mysql/my.cnf (o /etc/mysql/mariadb.conf.d/50-server.cnf) y cambie el valor de bind-address a 0.0.0.0.
    bind-address = 0.0.0.0
    
  1. Reinicie MariaDB
    sudo systemctl restart mariadb
    
    GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';
    

Q6: Obtención del error «Access denied for user ‘user’@’host'»

Causa: El usuario no tiene los privilegios adecuados, o la contraseña es incorrecta.

Solución:

  1. Verificar los privilegios actuales
    SHOW GRANTS FOR 'user'@'host';
    
  1. Conceder los privilegios apropiados
    GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
    
  1. Verificar que está iniciando sesión con la contraseña correcta
    mysql -u user -p
    

Conclusión

La gestión de usuarios en MariaDB es esencial para mejorar la seguridad de la base de datos y la eficiencia operativa.
En este artículo, cubrimos en detalle creación de usuarios, gestión de privilegios, eliminación de usuarios y errores comunes con sus soluciones.

6.1 Resumen

① Creación de usuarios en MariaDB

  • Crear nuevos usuarios usando el comando CREATE USER
  • Restringir el acceso usando @'hostname'
  • Siempre verificar los usuarios existentes antes de crear nuevos

② Gestión de privilegios en MariaDB

  • Usar GRANT para asignar los privilegios mínimos necesarios
  • Usar SHOW GRANTS para verificar los privilegios actuales
  • Usar REVOKE para eliminar privilegios innecesarios
  • Aplicar los cambios con FLUSH PRIVILEGES

③ Eliminación de usuarios en MariaDB

  • Eliminar usuarios usando el comando DROP USER
  • Verificar sesiones activas antes de la eliminación
  • Limpiar la caché de privilegios usando FLUSH PRIVILEGES

④ Errores comunes y soluciones

  • ERROR 1396 (HY000)Verificar usuarios existentes y eliminar si es necesario
  • Cambios de privilegios no aplicados → Ejecutar FLUSH PRIVILEGES
  • Access denied for userVerificar privilegios y contraseña
  • No se puede conectar de forma remota con %Ajustar la configuración bind-address

6.2 Mejores prácticas para la gestión de usuarios en MariaDB

  • Conceder solo los privilegios mínimos requeridos
  • Evitar conceder casualmente ALL PRIVILEGES
  • Restringir a los usuarios de producción a SELECT, INSERT, UPDATE, DELETE cuando sea posible
  • Siempre verificar los cambios de privilegios
  • Usar SHOW GRANTS para confirmar que las configuraciones son correctas
  • Analizar el impacto antes de eliminar usuarios
  • Ser cauteloso en producción y crear copias de seguridad
  • Aplicar prácticas de seguridad robustas
  • Aplicar restricciones de IP para conexiones remotas
  • Establecer una contraseña fuerte para el usuario root
  • Eliminar regularmente usuarios y privilegios innecesarios

6.3 Reflexiones finales

A través de esta guía, ha aprendido todo, desde los conceptos básicos hasta técnicas avanzadas de gestión de usuarios en MariaDB.
Utilice este conocimiento para lograr una administración de bases de datos segura y eficiente.

Continuaremos compartiendo información útil relacionada con MariaDB, ¡así que manténgase atento! 🚀