Eliminar cláusula DEFINER en MySQL Backup
Eliminar cláusula DEFINER en MySQL Backup. Cuando creamos una copia de seguridad en MySQL ya sea con PHP o desde el gestor phpMyAdmin genera automáticamente la siguiente sintaxis en las vistas.
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW
Esta línea SQL por lo general no es ningún problema porque está invocando al usuario root de MySQL. Por lo tanto, la copia de seguridad restauraría también los usuarios con sus privilegios. y por lo que no sería un problema.
Ahora, el detalle radica cuando deseamos llevarlo a otro servidor con otro nombre de usuario, ahí se es un problema porque genera error a la hora de importar las sentencias SQL de Vistas y Triggers.
¿Cuál sería la solución a este problema?
Existen 2 formas para solucionar el problema de usuario al importar las consultas SQL.
Primera forma: Eliminar al usuario de la línea SQL
Básicamente es quitar el usuario al momento de crear la vista, nos quedaría de la siguiente manera
CREATE ALGORITHM=UNDEFINED SQL SECURITY DEFINER VIEW
Segunda forma: Reemplazar por usuario
En esta forma solo debemos de cambiar a CURRENT_USER
CREATE ALGORITHM=UNDEFINED DEFINER=CURRENT_USER SQL SECURITY DEFINER VIEW
Reemplazar definer usuario al crear backup con PHP
Si estas creando una copia de seguridad con PHP puede usar la función str_replace()
para reemplazar el usuario root por el usuario actual, veamos un ejemplo.
$sql = str_replace("`root`@`localhost`","CURRENT_USER",$sql);
La variable $sql almacena toda la cadena de generación de la copia de seguridad y podemos filtrar para cambiar los valores específicos.