2009-09-10 7 views
10

mysql ver ist 5.0.67Berechtigungen für das Erstellen eines Triggers in mysql

meine Trigger-Code ist:

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 ; 

Fehler ist:

# 1227 - Zugriff verweigert; Sie benötigen die SUPER-Berechtigung für diese Operation

mein Server, ist nicht cpanel! ist es: DirectAdmin Web Control Panel.

Wie kann ich SUPER Privilegien erstellen und meinen Trigger erstellen?

Antwort

11

Sie müssen über MySQL-Root-Berechtigungen verfügen, um die SUPER-Berechtigung für einen Benutzer festzulegen.

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

Ah gewährt zu lassen, das mein Problem war. Ich habe dem lokalen Hostbenutzer die Berechtigung erteilt, nicht jedoch der Verbindung von meiner Arbeitsstation. – Mike

+0

nicht mehr gültig, können Sie Trigger für Ihr eigenes Konto ohne Suuper Rechte setzen – Blauhirn

+0

@Bluhirn wie? Ich benutze Shared Hosting und ich bin nicht in der Lage, Trigger zu erstellen –

2

Ein anderer Weg Trigger ohne Berechtigung SUPER zu erstellen, indem die folgende Zeile Hinzufügen binary logging my.cnf oder my.ini log_bin_trust_function_creators = 1

+0

verwendet, um dies auch zu setzen, Sie benötigen Super-Privilegien –

1

Ein anderer Weg, um this bug, wenn annehmbar, zu deaktivieren ist.

Ich habe dies getan, weil ich nicht einen Replikationsserver verwende, noch mache ich Backups von den binlogs für die Wiederherstellung. Aber es ist vielleicht nicht in Ihrer Situation angebracht.

es zu tun, nur kommentieren Sie log_bin und log_bin_index Linien in Ihrem /etc/mysql/my.cnf

Jetzt Privileg auslösen funktioniert ohne SUPER gut.

3

Ich versuchte SUPER privilede auf database.table Ebene zu geben, aber es funktioniert nicht, so habe ich

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

dann meinen Trigger erstellt. Aber vergessen Sie nicht, zu widerrufen,

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

Weil es ein gefährliches Privileg es in der Internet-Datenbank

Verwandte Themen