Tutorial completo de MySQL 8: instalación, administración, tipos de datos y backup (2026)

MySQL tiene su propio sistema de autenticación y privilegios, independiente del sistema operativo. Cada usuario se identifica por su nombre y el host desde el que conecta (usuario@host). Un mismo nombre de usuario con distintos hosts son cuentas distintas. La gestión correcta de usuarios y privilegios es fundamental para la seguridad de la base de datos.

En este capítulo cubrimos crear, modificar y eliminar usuarios, asignar y revocar privilegios, y las buenas prácticas de seguridad para cuentas de base de datos.

Crear usuarios

-- Crear un usuario que solo puede conectar desde localhost
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'contraseña_fuerte';

-- Usuario que puede conectar desde cualquier host (menos seguro)
CREATE USER 'appuser'@'%' IDENTIFIED BY 'contraseña_fuerte';

-- Con IF NOT EXISTS (no falla si ya existe)
CREATE USER IF NOT EXISTS 'appuser'@'localhost' IDENTIFIED BY 'contraseña_fuerte';

-- Cambiar la contraseña de un usuario
ALTER USER 'appuser'@'localhost' IDENTIFIED BY 'nueva_contraseña';
-- o para el usuario actual:
ALTER USER CURRENT_USER() IDENTIFIED BY 'nueva_contraseña';

GRANT: asignar privilegios

-- Privilegios sobre una base de datos completa
GRANT SELECT, INSERT, UPDATE, DELETE ON tienda.* TO 'appuser'@'localhost';

-- Todos los privilegios sobre una base de datos (no dar GRANT OPTION)
GRANT ALL PRIVILEGES ON tienda.* TO 'appuser'@'localhost';

-- Privilegios sobre una tabla específica
GRANT SELECT, INSERT ON tienda.clientes TO 'readonly_user'@'localhost';

-- Privilegios sobre columnas específicas
GRANT SELECT (nombre, email), UPDATE (ciudad) ON tienda.clientes TO 'partial'@'localhost';

-- Privilegios globales (sobre todas las bases de datos) — solo para admins
GRANT RELOAD, PROCESS ON *.* TO 'dbadmin'@'localhost';

-- Aplicar los cambios inmediatamente
FLUSH PRIVILEGES;

Tipos de privilegios

Privilegio

Qué permite

SELECT

Leer filas

INSERT

Insertar filas

UPDATE

Modificar filas

DELETE

Eliminar filas

CREATE

Crear tablas y bases de datos

DROP

Eliminar tablas y bases de datos

INDEX

Crear y eliminar índices

ALTER

Modificar la estructura de tablas

EXECUTE

Ejecutar procedimientos almacenados

SUPER

Administración avanzada del servidor

ALL PRIVILEGES

Todos los privilegios anteriores

Ver los privilegios de un usuario

-- Ver mis propios privilegios
SHOW GRANTS;

-- Ver los privilegios de otro usuario
SHOW GRANTS FOR 'appuser'@'localhost';

-- Ver todos los usuarios
SELECT user, host, authentication_string, plugin
FROM mysql.user;

REVOKE: quitar privilegios

-- Quitar el privilegio DELETE al usuario de la aplicación
REVOKE DELETE ON tienda.* FROM 'appuser'@'localhost';

-- Quitar todos los privilegios sobre una base de datos
REVOKE ALL PRIVILEGES ON tienda.* FROM 'appuser'@'localhost';

Eliminar usuarios

DROP USER 'appuser'@'localhost';
DROP USER IF EXISTS 'appuser'@'localhost';

Roles (MySQL 8+)

-- Crear un rol con un conjunto de privilegios
CREATE ROLE 'app_readonly';
GRANT SELECT ON tienda.* TO 'app_readonly';

-- Crear un rol con acceso de lectura/escritura
CREATE ROLE 'app_rw';
GRANT SELECT, INSERT, UPDATE, DELETE ON tienda.* TO 'app_rw';

-- Asignar el rol a un usuario
GRANT 'app_rw' TO 'appuser'@'localhost';
-- El usuario debe activar el rol en su sesión o establecerlo por defecto:
SET DEFAULT ROLE 'app_rw' TO 'appuser'@'localhost';

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP