2010-07-08 15 views
23

Ho un centinaio di stored procedure nel mio database MySQL con la maggior parte di esse ha come utente principale 'root'.Cambia il definer della procedura memorizzata

Ho un altro account mysql chiamato 'abc', come cambiare il definitore di tutte le routine in 'abc'.

E 'possibile fare lo stesso se ho accesso al server MySQL solo come utente 'abc' e non come 'root'

risposta

2

Per quanto ne so: Si dovrà ottenere il testo dello script di li tutti e rilascia/li ricrea come abc. Non sarebbe possibile farlo come abc, a meno che abc non abbia il permesso di eliminare/creare procedure.

+2

@Mithun risposta qui sotto dovrebbe essere contrassegnato come la risposta. – hellowahab

72

Per vedere i definitori:

show procedure status; 

Queste potranno essere modificate in questo modo:

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

Ad esempio:

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

Attenzione, perché questo cambierà tutti i definitori per tutti i database.

+0

"show procedure status" non funziona per me, ma l'aggiornamento funziona. Grazie. –

+0

Per impostazione predefinita DEFINER sta creando quando creo la procedura di archiviazione nell'host condiviso di godaddy in mysql db. Esempio: CREATE DEFINER = 'sis' @'% 'PROCEDURE' SP_Login'() Come rimuovere DEFINER? Per favore aiutami a risolvere questo problema mi sto rompendo la testa per gli ultimi 2 giorni. – Sensa

+0

questo mi ha salvato dopo una pulizia dell'utente – deltree

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

che modo insolito –

1

Export tutte le procedure di database <DB>:

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

Modifica routines.sql e ricrearli:

cat routines.sql | mysql <DB> 

Specificare -u e -p interruttori, se necessario.

8

È possibile aggiornare il definer nella tabella mysql.proc contro il tavolo/db richiesto ...

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