1. ホーム
  2. mysql

[解決済み] この操作を行うには、少なくとも1つのSUPER権限が必要です。

2022-02-11 02:36:21

質問事項

そこで、SQLファイルをrds(1G MEM、1CPU)にインポートしようとしました。sqlファイルは、1.4Gのようです。

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

で引っかかった。

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

実際のsqlの中身は

/*!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 はrdsに存在しないので、そうしています。

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

まだダメなのか。

どうすればいいですか?

を削除するか DEFINER=.. ステートメントを使用するか、ユーザー値を CURRENT_USER .

RDSが提供するMySQLサーバーでは DEFINER の構文を別のユーザーで使用することができます(私の経験では)。

を使用することができます。 sed スクリプトを使用してファイルから削除することができます。

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