Autorizzazioni per la creazione di un trigger in mysql
Domanda
mysql ver è 5.0.67
il mio codice trigger è:
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 ;
l'errore è:
# 1227 - Accesso negato; hai bisogno del privilegio SUPER per questa operazione
il mio server, non è cpanel! è: Pannello di controllo Web DirectAdmin.
come posso creare il privilegio SUPER e creare il mio trigger?
Soluzione
È necessario disporre dei privilegi di root di MySQL per impostare l'autorizzazione SUPER per un utente.
GRANT SUPER
ON '<database>'.'<tablename/*>'
TO '<username>'@'<host/connection/ip/%>';
Altri suggerimenti
Ho provato a dare il privilegio SUPER a livello di database.table, ma non ci riesce, quindi l'ho fatto
grant super on *.* to 'my_user'@'localhost';
quindi ha creato i miei trigger. Ma non dimenticare di revocarlo
revoke super on *.* from 'my_user'@'localhost';
Perché è un privilegio pericoloso lasciarlo concesso nel database di Internet
Un altro modo per creare trigger senza privilegio SUPER aggiungendo la seguente riga a my.cnf o my.ini log_bin_trust_function_creators = 1
Un altro modo per aggirare questo errore , se accettabile, è disabilitare registrazione binaria .
L'ho fatto perché non sto usando un server di replica, né sto facendo backup dai binlog per il ripristino. Ma potrebbe non essere appropriato nella tua situazione.
Per farlo, commenta le righe log_bin
e log_bin_index
nelle tue /etc/mysql/my.cnf
Ora il privilegio di trigger funziona bene senza SUPER.