Gestión Completa de Usuarios y Permisos en MySQL

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 4,95 KB

Gestión de Usuarios y Privilegios en MySQL

Comandos Fundamentales de Usuario

  • Crear usuario: CREATE USER 'usuario'@'localhost' IDENTIFIED BY 'contraseña';
  • Eliminar usuario: DROP USER 'usuario'@'localhost';
  • Renombrar usuario: RENAME USER 'usuarioantiguo'@'localhost' TO 'usuarionuevo'@'localhost';

Administración de Contraseñas y Límites de Cuenta

  • Añadir o cambiar contraseña (método SET): SET PASSWORD FOR 'usuario'@'localhost' = PASSWORD('contraseña');
  • Añadir contraseña (método GRANT): GRANT USAGE ON *.* TO 'usuario'@'localhost' IDENTIFIED BY 'contraseña';
  • Cambiar límites de una cuenta: GRANT USAGE ON `nombre_bd`.* TO 'usuario'@'localhost' WITH MAX_QUERIES_PER_HOUR 100;

Gestión de Permisos

  • Visualizar permisos de un usuario: SHOW GRANTS FOR 'usuario'@'localhost';
  • Refrescar privilegios: FLUSH PRIVILEGES; (Necesario después de modificar las tablas de permisos manualmente).

Niveles de Almacenaje de Permisos

Los permisos en MySQL se estructuran jerárquicamente en los siguientes niveles:

  • Nivel global: Se aplican a todas las bases de datos de un servidor. Se almacenan en la tabla mysql.user. Ejemplos: GRANT ALL ON *.* y REVOKE ALL ON *.*.
  • Nivel de base de datos: Se aplican a todos los objetos dentro de una base de datos específica.
  • Nivel de tabla: Se aplican a todas las columnas de una tabla específica.
  • Nivel de columna: Se aplican a columnas (campos) individuales dentro de una tabla.

Mecanismo de Control de Acceso

Cuando un cliente intenta conectar a un servidor MySQL, este acepta o rechaza la conexión basándose en la identidad y la clave proporcionada. El proceso de autenticación se fundamenta en:

  • El nombre de la máquina cliente (o su dirección IP) desde donde se origina la conexión.
  • El nombre de usuario de MySQL.
  • La contraseña proporcionada.

El servidor verifica esta información contra la tabla mysql.user. La conexión solo se establece si encuentra una fila donde las columnas Host y User coinciden con los datos del cliente y la contraseña es correcta.

El Servidor MySQL y Herramientas Relacionadas

  • mysqld: Es el programa principal, también conocido como el demonio de SQL (el servidor MySQL). Debe estar en ejecución para que los clientes puedan acceder a las bases de datos.
  • mysqld-max: Una versión extendida del servidor MySQL que incluye características adicionales.
  • mysql_install_db: Script utilizado para inicializar el directorio de datos de MySQL y crear las tablas de permisos con los privilegios por defecto.
  • mysql_fix_privilege_tables: Script que se ejecuta después de una actualización de MySQL para asegurar que las tablas de permisos tengan la estructura más reciente.

Opciones de Conexión y Ejemplos

Ejecución de Consultas desde la Terminal

Es posible ejecutar una consulta directamente sin entrar a la consola interactiva de MySQL usando la opción -e. Al ejecutar el comando, el sistema solicitará la contraseña.

mysql -u root -p -e "SELECT User, Host FROM mysql.user;"
mysql -u usuario_app -p -e "SELECT idmascota, nombre FROM zoologico.mascota;"

Nota: Las opciones como -hlocalhost y -h localhost son equivalentes.

Archivos de Registro (Logs) de MySQL

MySQL utiliza varios archivos de registro para monitorizar su actividad:

  • Registro de errores (Error Log): Registra problemas encontrados al iniciar, ejecutar o detener mysqld. Es fundamental para la depuración de problemas del servidor.
  • Registro general de consultas (General Query Log): Registra cada conexión de cliente establecida y todas las sentencias SQL que ejecutan.
  • Registro binario (Binary Log): Registra todas las sentencias que modifican datos (INSERT, UPDATE, DELETE). Es esencial para operaciones de replicación y recuperación de datos a un punto en el tiempo.
  • Registro de consultas lentas (Slow Query Log): Registra todas las consultas SQL que tardan más tiempo en ejecutarse que el valor definido en la variable del sistema long_query_time.

Entradas relacionadas: