En el mundo de la gestión de bases de datos, controlar el acceso de los usuarios es crucial para mantener la integridad y la seguridad de los datos. Esta publicación de blog lo guiará a través de un escenario real de configuración de permisos de usuario de MySQL, incluido el proceso, los posibles errores y los pasos de depuración.
Imagínate que eres administrador de bases de datos de una empresa que tiene varias bases de datos:
Su tarea es configurar permisos para un usuario llamado 'analista' con los siguientes requisitos:
Vamos a profundizar en cómo podemos lograr esto usando las declaraciones GRANT y REVOKE de MySQL.
Primero, necesitamos conectarnos al servidor MySQL con una cuenta administrativa:
mysql -h hostname -P port -u admin -p
Reemplace 'nombre de host', 'puerto' y 'admin' con los detalles reales de su servidor y el nombre de usuario de administrador.
Si el usuario aún no existe, debemos crearlo:
CREATE USER 'analyst'@'%' IDENTIFIED BY 'password';
Reemplace 'contraseña' con una contraseña fuerte y segura.
Ahora, otorguemos los permisos necesarios:
-- Grant SELECT on original databases GRANT SELECT ON products.* TO 'analyst'@'%'; GRANT SELECT ON customers.* TO 'analyst'@'%'; GRANT SELECT ON orders.* TO 'analyst'@'%'; GRANT SELECT ON analytics.* TO 'analyst'@'%'; -- Grant all privileges on copy databases GRANT ALL PRIVILEGES ON products_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON customers_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON orders_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON analytics_copy.* TO 'analyst'@'%'; -- Grant global privileges GRANT PROCESS, SHOW DATABASES ON *.* TO 'analyst'@'%'; -- Apply the changes FLUSH PRIVILEGES;
Después de configurar los permisos, es fundamental verificarlos:
SHOW GRANTS FOR 'analyst'@'%';
En nuestro escenario, inicialmente encontramos un problema en el que el 'analista' tenía demasiados privilegios:
mysql> SHOW GRANTS FOR 'analyst'@'%'; --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | Grants for analyst@% | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO "analyst"@"%" WITH GRANT OPTION | | GRANT REPLICATION_APPLIER,ROLE_ADMIN ON *.* TO "analyst"@"%" WITH GRANT OPTION | ... ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Para solucionar este problema, revocamos todos los privilegios y luego otorgamos solo los necesarios:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'analyst'@'%'; GRANT PROCESS, SHOW DATABASES ON *.* TO 'analyst'@'%'; -- Then re-grant the specific permissions as shown in Step 3
Después de corregir los privilegios excesivos, notamos que faltaban los permisos para copiar las bases de datos:
mysql> SHOW GRANTS FOR 'analyst'@'%'; ----------------------------------------------------- | Grants for analyst@% | ----------------------------------------------------- | GRANT PROCESS, SHOW DATABASES ON *.* TO "analyst"@"%"| | GRANT SELECT ON "products".* TO "analyst"@"%" | | GRANT SELECT ON "customers".* TO "analyst"@"%" | | GRANT SELECT ON "orders".* TO "analyst"@"%" | | GRANT SELECT ON "analytics".* TO "analyst"@"%" | -----------------------------------------------------
Agregamos las subvenciones que faltaban para las bases de datos de copia:
GRANT ALL PRIVILEGES ON products_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON customers_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON orders_copy.* TO 'analyst'@'%'; GRANT ALL PRIVILEGES ON analytics_copy.* TO 'analyst'@'%'; FLUSH PRIVILEGES;
Después de aplicar todos estos cambios y correcciones, las subvenciones finales deberían verse así:
mysql> SHOW GRANTS FOR 'analyst'@'%'; ----------------------------------------------------- | Grants for analyst@% | ----------------------------------------------------- | GRANT PROCESS, SHOW DATABASES ON *.* TO "analyst"@"%"| | GRANT SELECT ON "products".* TO "analyst"@"%" | | GRANT SELECT ON "customers".* TO "analyst"@"%" | | GRANT SELECT ON "orders".* TO "analyst"@"%" | | GRANT SELECT ON "analytics".* TO "analyst"@"%" | | GRANT ALL PRIVILEGES ON "products_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "customers_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "orders_copy".* TO "analyst"@"%"| | GRANT ALL PRIVILEGES ON "analytics_copy".* TO "analyst"@"%"| -----------------------------------------------------
Configurar permisos de usuario MySQL adecuados puede ser complicado, pero es un aspecto crucial de la gestión de bases de datos. Si utiliza cuidadosamente las declaraciones GRANT y REVOKE y siempre verifica los resultados, puede crear un entorno seguro y funcional para sus usuarios.
Recuerda estos puntos clave:
Si sigue estas pautas y los pasos descritos en esta publicación, estará bien equipado para administrar los permisos de usuario de MySQL de manera efectiva.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3