sql >> Base de Datos >  >> RDS >> Mysql

Otorgar derechos a bases de datos MySQL adicionales que causan problemas

MySQL identifica a un usuario tanto por el nombre de usuario como por el host. Cuando MySQL realiza la autenticación al iniciar sesión, MySQL primero busca un nombre de host que coincida exactamente. Si no encuentra una coincidencia exacta, busca un host que contenga un comodín '%'.

Cuando hizo GRANT ... TO [email protected] , MySQL creó un nuevo usuario (sin contraseña, porque no había IDENTIFIED BY dado en la declaración.

Entonces, ¿qué pasó cuando intentaste iniciar sesión como myuser? desde el host local, mysqld intentó encontrar una entrada que coincidiera con 'myuser'@'localhost' en la tabla mysql.user y lo encontró. Y la sesión obtuvo los privilegios asignados a ese usuario.

(Para ser un poco más precisos, mysqld realmente no mira el contenido de la tabla mysql.user, lo que realmente mira es la estructura en memoria, que se completó a partir de la tabla cuando se construyó. Una reconstrucción de la la estructura de la memoria se activa mediante una instrucción GRANT, REVOKE o FLUSH PRIVILEGES).

Lo que estaba sucediendo ANTES de que agregara ese nuevo usuario, mysqld estaba buscando una coincidencia exacta en el nombre de usuario y host, y no encontró ninguna. Pero encontró una entrada con el comodín '%', por lo que coincidió con eso, por lo que la sesión obtuvo todos los privilegios otorgados al usuario 'miusuario'@'%'.

Los dos usuarios 'u'@'%' y 'u'@'localhost' son independientes y distintos entre sí. Los privilegios se deben otorgar a cada usuario individualmente. Cualquier privilegio otorgado a 'u'@'%' aplicar SOLO a ese usuario y NO a 'u'@'localhost' .