3 min. de lectura (aproximado)

Privilegios de MySQL: usuarios, permisos y seguridad

(3 min. de lectura) Los privilegios de MySQL son permisos que se otorgan a usuarios o roles para realizar operaciones específicas en una base de datos, como leer, modificar, eliminar o administrar objetos (tablas, vistas, procedimientos, etc.). A continuación, se explica los conceptos clave sobre los privilegios en MySQL:

Tipos de privilegios

  • Privilegios Administrativos: controlan operaciones globales o de administración del servidor.
    • ALL PRIVILEGES Otorga todos los privilegios disponibles en el ámbito especificado.
    • GRANT OPTION Permite otorgar o revocar privilegios a otros usuarios.
    • SUPER Permite realizar tareas administrativas como matar procesos, cambiar configuraciones del servidor, etc.
    • SHUTDOWN Permite apagar el servidor.
    • RELOAD Permite recargar configuraciones o privilegios.
  • Privilegios a Nivel de Base de Datos: afectan a una base de datos específica.
    • CREATE Crear bases de datos, tablas o índices.
    • DROP Eliminar bases de datos o tablas.
    • ALTER Modificar la estructura de tablas.
    • INDEX Crear o eliminar índices.
  • Privilegios a Nivel de Tabla controlan operaciones sobre tablas específicas.
    • SELECT Leer datos de una tabla.
    • INSERT Insertar datos en una tabla.
    • UPDATE Modificar datos en una tabla.
    • DELETE Eliminar datos de una tabla.
    • TRIGGER Crear o eliminar triggers.
  • Privilegios a Nivel de Columna permiten operaciones específicas sobre columnas individuales de una tabla (por ejemplo, SELECT, INSERT, UPDATE).
  • Privilegios para Objetos Específicos
    • EXECUTE: Ejecutar procedimientos almacenados o funciones.
    • ALTER ROUTINE: Modificar o eliminar procedimientos almacenados.
    • CREATE VIEW: Crear vistas.
  • Privilegios de Conexión
    • USAGE Permiso básico que no otorga acceso a datos, pero permite conectar al servidor.
    • PROXY Permite a un usuario actuar como otro usuario.
Ámbitos de los privilegios Los privilegios pueden aplicarse a diferentes niveles:
  • Global: Afecta a todas las bases de datos.

    GRANT ALL ON *.* TO 'usuario'@'localhost';
  • Base de datos: Afecta a una base de datos específica.

    GRANT SELECT ON mi_base_datos.* TO 'usuario'@'localhost';
  • Tabla: Afecta a una tabla específica.

    GRANT INSERT ON mi_base_datos.mi_tabla TO 'usuario'@'localhost';
  • Columna: Afecta a columnas específicas.

    GRANT SELECT (columna1) ON mi_base_datos.mi_tabla TO 'usuario'@'localhost';
  • Procedimientos/Funciones almacenados: Afecta a objetos específicos como procedimientos almacenados.

Gestión de Privilegios

  • GRANT: Otorga privilegios a un usuario.

    //Otorga privilegios a un usuario.
    GRANT SELECT, INSERT ON mi_base_datos.mi_tabla TO 'usuario'@'localhost';
    
    //Otorgar todos los privilegios en una base de datos:
    GRANT ALL ON mi_base_datos.* TO 'usuario'@'localhost';
    
  • REVOKE: Revoca privilegios previamente otorgados.

    REVOKE SELECT ON mi_base_datos.mi_tabla FROM 'usuario'@'localhost';
    

FLUSH PRIVILEGES

Recarga los privilegios desde las tablas del sistema (necesario tras cambios manuales en las tablas de privilegios).

FLUSH PRIVILEGES;

Usuarios y Autenticación

  • Los usuarios en MySQL se identifican con un nombre y un host "'usuario'@'host'". Por ejemplo, "'juan'@'localhost'" y "'juan'@'%'" son usuarios diferentes.
  • Usar roles: Desde MySQL 8.0, ze pueden crear roles para agrupar privilegios y asignarlos a usuarios, facilitando la gestión.

    CREATE ROLE 'rol_lectura';
    GRANT SELECT ON mi_base_datos.* TO 'rol_lectura';
    GRANT 'rol_lectura' TO 'usuario'@'localhost';
  • Restringir el host: Usar 'localhost' o direcciones IP específicas en lugar de '%' para limitar el acceso.
  • Revisar los privilegios regularmente: Usa SHOW GRANTS para auditar permisos.

Notas Adicionales

MySQL 8.0 y superiores introducen mejoras como roles y autenticación más robusta (por ejemplo, caching_sha2_password). Los privilegios no se aplican automáticamente a nuevos objetos creados después de un GRANT. Usar "ON FUTURE " (en versiones compatibles) para privilegios dinámicos.