web-dev-qa-db-fra.com

Accès refusé; vous avez besoin d'au moins un des privilèges SUPER pour cette opération.

J'essaye donc d'importer un fichier SQL en rds (1G MEM, 1 CPU). Le fichier SQL est comme 1.4G

mysql -h xxxx.rds.amazonaws.com -u utilisateur -ppass --max-allowed-packet = 33554432 db <db.sql

Il s'est coincé à:

ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

Le contenu actuel de SQL est:

/*!50003 CREATE*/ /*!50017 DEFINER=`another_user`@`1.2.3.4`*/ /*!50003 TRIGGER `change_log_BINS` BEFORE INSERT ON `change_log` FOR EACH ROW
IF (NEW.created_at IS NULL OR NEW.created_at = '00-00-00 00:00:00' OR NEW.created_at = '') THEN
        SET NEW.created_at = NOW();
END IF */;;

another_user n'existe pas dans les répertoires, je fais donc:

GRANT ALL PRIVILEGES ON db.* TO another_user@'localhost';

Toujours pas de chance.

47
kenpeter

Supprimez l'instruction DEFINER=.. de votre fichier sqldump ou remplacez les valeurs utilisateur par CURRENT_USER.

Le serveur MySQL fourni par RDS n'autorise pas la syntaxe DEFINER à un autre utilisateur (d'après mon expérience).

Vous pouvez utiliser un script sed pour les supprimer du fichier:

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i oldfile.sql
91
hjpotter92