Volver a la página principal
viernes 6 diciembre 2024
31

Cómo enumerar permisos en MySQL

Aprender a enumerar permisos en MySQL es esencial para garantizar la seguridad y el control de acceso en bases de datos. Este artículo describe los comandos clave para listar permisos y usuarios, así como cómo acceder a privilegios específicos y funciones definidas.

Comandos para listar permisos

Listar permisos generales o específicos de un usuario

MySQL ofrece el comando SHOW GRANTS para mostrar los permisos asignados:

-- Mostrar los permisos del usuario actual
SHOW GRANTS;

-- Mostrar los permisos de un usuario específico
SHOW GRANTS FOR 'usuario'@'host';

-- Ejemplo: permisos para root en localhost
SHOW GRANTS FOR 'root'@'localhost';

-- Permisos del usuario activo en la sesión actual
SHOW GRANTS FOR CURRENT_USER();

Consultar detalles de usuarios y privilegios

MySQL almacena información sobre usuarios y permisos en la tabla mysql.user. Puedes usar estas consultas para obtener detalles:

-- Obtener todos los usuarios, permisos y hashes
SELECT * FROM mysql.user;

-- Consultar datos específicos de un usuario
SELECT * FROM mysql.user WHERE user = 'root';

-- Listar usuarios con privilegio de archivo
SELECT user, file_priv FROM mysql.user WHERE file_priv = 'Y';

-- Listar usuarios con privilegio de superusuario
SELECT user, Super_priv FROM mysql.user WHERE Super_priv = 'Y';

Listar funciones almacenadas

Las funciones definidas por el usuario también pueden gestionarse para evaluar su seguridad:

-- Listar todas las funciones
SELECT routine_name FROM information_schema.routines WHERE routine_type = 'FUNCTION';

-- Excluir funciones del esquema 'sys'
SELECT routine_name 
FROM information_schema.routines 
WHERE routine_type = 'FUNCTION' AND routine_schema != 'sys';

Ejemplos prácticos

  • Verificar permisos de administrador (root):
SHOW GRANTS FOR 'root'@'localhost';
  • Identificar usuarios con acceso a archivos:
SELECT user FROM mysql.user WHERE file_priv = 'Y';
  • Listar funciones personalizadas excluyendo el sistema:
SELECT routine_name 
  FROM information_schema.routines 
  WHERE routine_type = 'FUNCTION' AND routine_schema != 'sys';
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer