2009-09-10 7 views
10

mysql ver est 5.0.67autorisations pour créer un déclencheur dans mysql

mon code de déclenchement est:

DELIMITER // 
CREATE TRIGGER upd_price BEFORE UPDATE ON product_price 
FOR EACH ROW BEGIN 
    INSERT INTO update_price_log (product_id, product_price_old, product_price_new) values(OLD.product_id, OLD.product_price, NEW.product_price); 
END 
// 
DELIMITER ; 

erreur est:

# 1227 - Accès refusé; vous avez besoin du privilège SUPER pour cette opération

mon serveur, n'est pas cpanel! c'est: Panneau de configuration Web DirectAdmin. Comment puis-je créer un privilège SUPER et créer mon déclencheur?

Répondre

11

Vous devez disposer des privilèges de racine MySQL pour définir l'autorisation SUPER pour un utilisateur.

GRANT SUPER 
ON '<database>'.'<tablename/*>' 
TO '<username>'@'<host/connection/ip/%>'; 
+0

Ah qui était mon problème. J'ai accordé l'autorisation à l'utilisateur hôte local mais pas à la connexion de mon poste de travail. – Mike

+0

pas plus valide, vous pouvez définir des déclencheurs pour votre propre compte sans droits suuper – Blauhirn

+0

@Blauhirn comment? J'utilise l'hébergement partagé et je ne suis pas en mesure de créer des triggers –

2

Une autre façon de créer détente sans privilège SUPER en ajoutant la ligne suivante à my.cnf ou my.ini log_bin_trust_function_creators = 1

+0

pour régler cela aussi vous avez besoin de super privilèges –

1

Une autre façon autour this bug, si elle est acceptable, est de désactiver binary logging.

Je l'ai fait parce que je n'utilise pas de serveur de réplication, et je ne fais pas de sauvegardes à partir des binlogs pour la récupération. Mais il pourrait ne pas être approprié dans votre situation.

Pour ce faire, tout en commentaire log_bin et log_bin_index lignes dans votre /etc/mysql/my.cnf

déclencheront maintenant privilège fonctionne très bien sans SUPER.

3

J'ai essayé de donner SUPER privilede au niveau database.table, mais il échoue, alors je l'ai

grant super on *.* to 'my_user'@'localhost'; 

a ensuite créé mes déclencheurs. Mais ne pas oublier de le révoquer

revoke super on *.* from 'my_user'@'localhost'; 

Parce qu'il est un privilège dangereux de le laisser dans la base accordé Internet

Questions connexes