¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)
Cómo crear usuarios en MySQL con validaciones y errores personalizados (ejemplo práctico)
Anuncios
Publicidad

Cómo crear usuarios en MySQL con validaciones y errores personalizados (ejemplo práctico)

En este tutorial aprenderás a crear un procedimiento almacenado en MySQL que permite generar usuarios de forma segura.
El procedimiento incluye:

Validaciones con expresiones regulares para evitar caracteres no permitidos.
Manejo de errores personalizados mediante SIGNAL SQLSTATE.
Creación dinámica del usuario con PREPARE y EXECUTE.
Comprobación previa para evitar duplicados en la tabla de usuarios de MySQL.


1. Usar la base de datos

Aunque el usuario no se crea dentro de una base de datos específica, trabajaremos en tiendaonline como ejemplo:

USE tiendaonline;

2. Eliminar el procedimiento si ya existe

DROP PROCEDURE IF EXISTS crearUsuario;

3. Crear el procedimiento crearUsuario

Aquí está el procedimiento completo:

DELIMITER //
CREATE PROCEDURE crearUsuario(
    IN p_nombre VARCHAR(30),
    IN p_contrasena VARCHAR(30)
)
DETERMINISTIC
BEGIN
    -- Validar caracteres no permitidos en el nombre de usuario
    IF p_nombre REGEXP '[^a-zA-Z0-9_]' THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'El nombre de usuario contiene caracteres no permitidos';
    END IF;

    -- Validar que la contraseña no tenga espacios
    IF p_contrasena REGEXP '[[:space:]]' THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'La contraseña no debe contener espacios';
    END IF;

    -- Verificar si el usuario ya existe
    IF NOT EXISTS (
        SELECT 1 
        FROM mysql.user
        WHERE user = p_nombre AND host = '%'
    ) THEN
        -- Construir sentencia CREATE USER de forma segura
        SET @sentenciasql = CONCAT(
            'CREATE USER \'', REPLACE(p_nombre, '''', ''''''), 
            '\'@\'%\' IDENTIFIED BY \'', REPLACE(p_contrasena, '''', ''''''), '\''
        );

        -- Preparar y ejecutar el comando dinámico
        PREPARE comandoDinamico FROM @sentenciasql;
        EXECUTE comandoDinamico;
        DEALLOCATE PREPARE comandoDinamico;

    ELSE
        -- Error personalizado si el usuario ya existe
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'El usuario ya existe en la base de datos';
    END IF;
END //
DELIMITER ;

4. Ejecutar el procedimiento

Creamos un usuario nuevo, por ejemplo Juan con la contraseña 12345:

CALL crearUsuario('Juan','12345');

5. Verificar si el usuario fue creado correctamente

SELECT user, host 
FROM mysql.user 
WHERE user = 'Juan';

6. Prueba de error personalizado

Si intentas volver a ejecutar el procedimiento con el mismo usuario:

CALL crearUsuario('Juan','12345');

Obtendrás el siguiente error personalizado:

ERROR 1644 (45000): El usuario ya existe en la base de datos

Con este procedimiento almacenado logras:

  • Crear usuarios en MySQL de forma controlada.
  • Evitar errores comunes de seguridad (caracteres especiales, contraseñas con espacios).
  • Lanzar mensajes personalizados para el usuario final.
  • Asegurar que no se creen duplicados en la tabla de usuarios.

Es una forma mucho más profesional y segura de manejar cuentas en MySQL que hacerlo manualmente con CREATE USER.


Crear usuarios en MySQL con validaciones y manejo de errores personalizados
Crear usuarios en MySQL con validaciones y manejo de errores personalizados

GRANT ALL PRIVILEGES ON tiendaonline.* TO 'Juan'@'%';

Procedimiento para crear usuarios en MySQL con validaciones y manejo de errores personalizados

Preguntas frecuentes (FAQ)

1. ¿Por qué usar expresiones regulares para validar?
Porque permiten restringir los caracteres que puede contener el nombre de usuario y la contraseña. Así se evitan inyecciones SQL o errores de formato.

2. ¿Qué hace SIGNAL SQLSTATE '45000'?
Permite lanzar un error personalizado con un mensaje definido por el programador.

3. ¿Por qué se usa PREPARE y EXECUTE?
Porque MySQL no permite concatenar directamente cadenas dinámicas en comandos como CREATE USER. Con PREPARE se construye y ejecuta de manera segura.

4. ¿Qué pasa si quiero que el host sea diferente a %?
Puedes cambiar '%’ por otro valor, como 'localhost', o incluso recibirlo como parámetro en el procedimiento.

5. ¿Puedo añadir permisos al usuario creado?
Sí. Después de crearlo, puedes ejecutar dentro del mismo procedimiento:

Te puede interesar:

Seguir leyendo:

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)

Deja una respuesta

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)
error: Content is protected !!
Hablemos de informática
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.