Nuestros usuarios inician sesión en la base de datos de producción como un usuario de bajo nivel, con SELECT otorgado a nivel de base de datos, e INSERT/UPDATE/DELETE otorgado en las tablas específicas a las que necesitan acceso.¿Existe alguna forma mejor de asignar permisos a tablas temporales en MySQL?
También tienen permisos para crear tablas temporales (las necesitamos para algunas de las consultas más complicadas). ¡El problema es que, si bien pueden crear las tablas temporales, no tienen acceso a INSERTARlas!
Una solución alternativa que hemos encontrado es crear una tabla "real" (¿persistente?) Del mismo nombre (pero con solo un campo) y otorgar acceso para que se inserten en eso. Luego, cuando la tabla temporal se crea con el mismo nombre, el sistema usará eso, no la tabla persistente.
mysql> CREATE TEMPORARY TABLE `testing` (`id` INTEGER AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(30));
Query OK, 0 rows affected (0.04 sec)
mysql> INSERT INTO `testing` (`name`) VALUES ('testing');
ERROR 1142 (42000): INSERT command denied to user 'stduser'@'office.companyname.co.uk' for table 'testing'
Si intenta conceder acceso a la tabla (en otra sesión, como root), no se puede:
mysql> GRANT INSERT ON testdb.testing TO 'stduser'@'%';
ERROR 1146 (42S02): Table 'testdb.testing' doesn't exist
Así que mi pregunta es, básicamente, podemos conceder INSERT/UPDATE/¿ELIMINAR en tablas temporales sin tener una tabla "persistente" del mismo nombre dando vueltas?
¡Acabo de probar esto en el entorno de prueba, y de hecho está en lo cierto! Es una lástima que hayas otorgado CREAR (no solo CREAR TABLAS TEMPORALES), pero muchas gracias. – Drarok