Lenguaje PHP

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.

Eliminar cláusula DEFINER en MySQL Backup
Eliminar cláusula DEFINER en MySQL Backup

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.

Nestor Tapia

Bloggero, amante de la programación PHP, innovador y me fascina compartir información. Desde que conocí el entorno informatico y el internet me llamó la atención la programación, Por tal motivo he creado mi blog BAULPHP.COM para compartir mis experiencias con todos ustedes. ¡Gracias por leerme!.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba