Tengo un usuario de MySQL y quiero que vea SOLO las vistas que quiero y no cualquier otra tabla en la base de datos. Otorgué permisos a este usuario solo en ciertas vistas de la siguiente manera:
GRANT SHOW VIEW ON `myDatabase`.`awesome_view` TO 'thisUser'@'%'
Si hago una show grants;
declaración, solo puedo ver estos permisos como se esperaba. Sin embargo, me gustaría que este usuario consulte SOLO las vistas y no las tablas relacionadas con estas vistas, pero no puedo encontrar la manera de hacerlo. Parece ser que si quiero que el usuario haga una selección en la vista, la selección también debe otorgarse para la tabla, ¿o me equivoco?
Si niego la select
declaración en el resto de las tablas, y en la línea de comando trato de hacer una selección, obtengo lo siguiente:
SELECT * FROM myDatabase.fordibenForYouTable;
ERROR 1142 (42000): SELECT command denied to user 'thisUser'@'localhost' for table 'fordibenForYouTable'
De hecho, eso es lo que quiero, pero también se me niega si selecciono los datos de la vista.
¿Hay alguna manera de poner a disposición del usuario solo las vistas y no las tablas?
fuente
Sé que esto es viejo ahora, pero esto es lo que resolvió este problema para mí ...
La respuesta fue con la sintaxis "SEGURIDAD SQL".
mi definición de vista original tenía la SEGURIDAD de SQL configurada para ser "INVOKER". Esto significaba que el usuario se vio obligado a tener permiso de selección tanto en la vista como en la tabla.
Cuando cambié la SEGURIDAD de SQL para que sea "DEFINER", puedo otorgarle al usuario permiso de selección solo en la vista.
fuente