web-dev-qa-db-fra.com

Modifier le définisseur de procédure stockée

J'ai environ une centaine de routines stockées dans ma base de données MySQL avec la plupart d'entre elles ont 'root' comme définisseur.

J'ai un autre compte mysql nommé 'abc', comment changer le définisseur de toutes les routines en 'abc'.

Est-il possible de faire de même si j'ai accès au serveur MySQL uniquement en tant qu'utilisateur 'abc' et non en tant que 'root'

28
Mithun Sreedharan

Pour autant que je sache: vous devrez obtenir le texte du script de tous et les déposer/recréer en tant qu'abc. Vous ne seriez pas en mesure de le faire en tant qu'abc, sauf si abc est autorisé à supprimer/créer des procédures.

6
Fosco

Pour voir les définisseurs:

show procedure status;

Vous pouvez les changer comme ceci:

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

Par exemple:

 UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

Soyez prudent, car cela changera tous les définisseurs pour toutes les bases de données.

86
gibzaki

Vous pouvez mettre à jour le definer dans la table mysql.proc par rapport à la table/db requise ...

update mysql.proc set definer='root@localhost' where name='t_p';
10
Darshan Patil

Exportez toutes les procédures de la base de données <DB>:

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

Éditer routines.sql et les recréer:

cat routines.sql | mysql <DB>

Spécifiez -u et -p change si nécessaire.

1
x-yuri