2010-07-08 43 views
23

Tengo alrededor de cien rutinas almacenadas en mi base de datos MySQL con la mayoría de ellas con 'root' como definidor.Cambiar el definidor de procedimiento almacenado

Tengo otra cuenta de mysql llamada 'abc', cómo cambiar el definidor de todas las rutinas a 'abc'.

¿Es posible hacer lo mismo si tengo acceso al servidor MySQL sólo como usuario 'abc' y no como 'root'

Respuesta

2

En lo que a saber: Usted tendría que obtener el texto de la escritura de todos ellos y soltar/recrearlos como abc. No podría hacer esto como abc a menos que abc tenga permiso para abandonar/crear procedimientos.

+2

@Mithun respuesta a continuación deben marcarse como la respuesta. – hellowahab

72

Para ver los definidores:

show procedure status; 

puede cambiarlos como esto:

UPDATE `mysql`.`proc` p SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore' 

Por ejemplo:

UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%' 

tener cuidado, porque esto va a cambiar todos los definidores para todas las bases de datos

+0

"mostrar estado del procedimiento" no funciona para mí, pero la actualización funciona. Gracias. –

+0

DEFINER se crea de manera predeterminada cuando creo un procedimiento de almacenamiento en el host compartido godaddy en mysql db. Muestra: CREATE DEFINER = 'sis' @'% 'PROCEDURE' SP_Login'() ¿Cómo eliminar DEFINER? Por favor, ayúdame a resolver este problema, me estoy rompiendo la cabeza durante los últimos 2 días. – Sensa

+0

esto me salvó después de una limpieza de usuario – deltree

-1
alter procedure old_proc_name 
delimiter // 
create PROCEDURE new_proc_name (parameter) 
begin 
Your Sql Statement; 
end// 
delimiter ; 
+0

que manera tan inusual –

1

exportar todos los procedimientos de la base de datos: <DB>

mysqldump --single-transaction --no-data --no-create-info --routines \ 
    --skip-triggers <DB> >routines.sql 

Editar routines.sql y volver a crearlos:

cat routines.sql | mysql <DB> 

Especificar -u y -p interruptores si es necesario.

8

Puede actualizar el definidor en la tabla mysql.proc contra la mesa/db requerido ...

update mysql.proc set definer='[email protected]' where name='t_p'; 
Cuestiones relacionadas