Cambiando el Definer de un Procedure en Mysql

En el día de ayer, nos tocó hacer un deploy en un VPS.

Hubo un pequeño error a causa de la falta de control (tanto de nuestro lado como del de los implementadores), y cuando se importó la base de datos, se crearon los Procedure con un usuario propietario que no era el mismo que teníamos para acceder a la base de datos.

Luego de lidiar un rato, logramos que nos facilitaran el usuario root de Mysql, y ahí fue otro cantar.

Antes de conseguir el usuario, uno de los caminos era arreglar el script sql y mandarlo nuevamente para que se borrara la base de datos y se volviera a importar.

Si bien cumple su cometido, hay otro aún más sencillo e igual de efectivo.

Ya con un usuario con los permisos necesarios, para conocer qué Procedures tenemos definidos en nuestras bases de datos dentro de Mysql, sólo es necesario correr ésta consulta.

SELECT * FROM mysql.proc;

Así veremos todos los que tengamos definidos, sin importar ninguna condición.

Para el problema que se había presentado, había que modificar el propietario (Definer) de esas funciones. Por suerte, nada que un par de queries no puedan arreglar.

Lo primero es aislar el set de registros que vamos a modificar, al menos, como seguridad.

Para eso, corremos esta consulta.

SELECT * FROM mysql.proc WHERE definer = 'usuario1@dominio1';

Vamos a ver todos las funciones que están definidas con ese usuario como propietario.

Ahora, para cambiarlo, alcanza con hacer un update a esos registros. En nuestro ejemplo, correríamos ésta otra consulta.

UPDATE mysql.proc SET definer = 'usuario2'@'dominio2' WHERE definer = 'usuario1@dominio1';

Y para finalizar, hacemos efectivos los cambios en los privilegios.

FLUSH PRIVILEGES;

Asunto resuelto, ya tenemos arreglado este pequeño problema de permisos.