Para controlar qué bases de datos puede ver o acceder un usuario en MySQL, se gestionan los privilegios de acceso mediante la instrucción GRANT o la manipulación directa de los permisos en las tablas de privilegios.
Pasos para otorgar o restringir acceso a bases de datos en MySQL:
Crear el usuario (si aún no existe): Si el usuario aún no existe, puedes crearlo con la siguiente instrucción:
Código:
CREATE USER 'usuario'@'host' IDENTIFIED BY 'contraseña';
usuario: Nombre del usuario.
host: Puede ser localhost, % (para cualquier host), o una IP específica.
contraseña: La contraseña del usuario.
Otorgar acceso a una base de datos específica: Para otorgar acceso a una base de datos específica, puedes usar la instrucción GRANT:
Código:
GRANT ALL PRIVILEGES ON nombre_base_de_datos.* TO 'usuario'@'host';
Esto le dará al usuario acceso completo a la base de datos nombre_base_de_datos. Si solo deseas otorgar permisos específicos, como SELECT, puedes hacer algo como:
Código:
GRANT SELECT ON nombre_base_de_datos.* TO 'usuario'@'host';
Revocar el acceso a otras bases de datos: Si el usuario tiene acceso a otras bases de datos y deseas quitárselo, utiliza REVOKE:
Código:
REVOKE ALL PRIVILEGES ON otra_base_de_datos.* FROM 'usuario'@'host';
Esto revoca todos los privilegios del usuario en la base de datos otra_base_de_datos.
Verificar los privilegios del usuario: Para ver los privilegios de un usuario, puedes usar la siguiente instrucción:
Código:
SHOW GRANTS FOR 'usuario'@'host';
Ocultar bases de datos que no tienen permisos: Si has configurado correctamente los privilegios, el usuario solo verá las bases de datos a las que tiene acceso. En versiones más antiguas de MySQL, a veces un usuario puede ver el nombre de una base de datos aunque no tenga permisos para accederla, pero no podrá interactuar con ella. Sin embargo, versiones más recientes y configuraciones adecuadas ocultan por completo las bases de datos a las que un usuario no tiene acceso.
recordar ejecutar el FLÜSH PRIVILEGES despues de GRANT o PRIVILEGES
Código:
FLUSH PRIVILEGES;
Aquí tienes una lista de los privilegios más comunes que puedes conceder:
Privilegios Generales (a nivel de servidor o base de datos):
ALL PRIVILEGES: Concede todos los privilegios excepto GRANT OPTION. Se puede aplicar a nivel de servidor, base de datos, tabla, etc.
ALTER: Permite alterar la estructura de tablas o bases de datos (modificar, añadir, eliminar columnas, etc.).
ALTER ROUTINE: Permite alterar o eliminar rutinas almacenadas (procedures y functions).
CREATE: Permite crear bases de datos y tablas.
CREATE ROUTINE: Permite crear rutinas almacenadas (procedures y functions).
CREATE TEMPORARY TABLES: Permite crear tablas temporales.
CREATE USER: Permite crear, eliminar y renombrar usuarios.
CREATE VIEW: Permite crear vistas.
DELETE: Permite eliminar registros de tablas.
DROP: Permite eliminar bases de datos, tablas o vistas.
EVENT: Permite crear, modificar y eliminar eventos en el programador de eventos.
EXECUTE: Permite ejecutar rutinas almacenadas (procedures).
FILE: Permite leer y escribir archivos en el servidor (útil para operaciones como LOAD DATA INFILE).
INDEX: Permite crear y eliminar índices.
INSERT: Permite insertar registros en tablas.
LOCK TABLES: Permite bloquear tablas para la lectura o escritura.
PROCESS: Permite ver y gestionar los procesos en ejecución.
REFERENCES: Permite crear claves foráneas y realizar operaciones de referencia entre tablas.
RELOAD: Permite recargar las tablas de privilegios y vaciar logs.
REPLICATION CLIENT: Permite al usuario consultar el estado de la replicación.
REPLICATION SLAVE: Permite a los esclavos de replicación conectarse al servidor maestro.
SELECT: Permite leer datos de tablas y vistas.
SHOW DATABASES: Permite al usuario ver la lista de todas las bases de datos.
SHOW VIEW: Permite consultar las definiciones de vistas.
SHUTDOWN: Permite apagar el servidor MySQL.
SUPER: Permite ejecutar operaciones administrativas como detener procesos y modificar variables de sistema.
TRIGGER: Permite crear, eliminar o invocar triggers.
UPDATE: Permite actualizar registros en tablas.
USAGE: No concede ningún privilegio, pero crea el usuario.
Privilegios a nivel de tabla/columna:
SELECT (nombre_columna): Permite leer datos solo de las columnas especificadas.
INSERT (nombre_columna): Permite insertar datos solo en las columnas especificadas.
UPDATE (nombre_columna): Permite actualizar datos solo en las columnas especificadas.
Privilegios Especiales:
GRANT OPTION: Permite al usuario conceder a otros usuarios los privilegios que posee.