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.
- 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.
- 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.
- 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.
- EXECUTE: Ejecutar procedimientos almacenados o funciones.
- ALTER ROUTINE: Modificar o eliminar procedimientos almacenados.
- CREATE VIEW: Crear vistas.
- USAGE Permiso básico que no otorga acceso a datos, pero permite conectar al servidor.
- PROXY Permite a un usuario actuar como otro usuario.
GRANT ALL ON *.* TO 'usuario'@'localhost';GRANT SELECT ON mi_base_datos.* TO 'usuario'@'localhost';GRANT INSERT ON mi_base_datos.mi_tabla TO 'usuario'@'localhost';GRANT SELECT (columna1) ON mi_base_datos.mi_tabla TO 'usuario'@'localhost';- 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.
FLUSH PRIVILEGES;- 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.