Więc próbuję importować plik sql na rds (1G MEM, 1 CPU). Plik SQL jest jak 1.4GOdmowa dostępu; potrzebujesz (przynajmniej jeden) uprawnienia SUPER dla tej operacji
mysql -h xxxx.rds.amazonaws.com -u użytkownik -ppass --max-wolno-pakiet = 33554432 db < db.sql
on utknął w:
ERROR 1227 (42000) at line 374: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
rzeczywista zawartość SQL jest:
/*!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
nie istniał w RDS, więc robię:
GRANT ALL PRIVILEGES ON db.* TO [email protected]'localhost';
Nadal nie ma szczęścia.
Jesteś poprawne. Powodem, dla którego nie działa, jest to, że określenie innego użytkownika jako "DEFINER", gdy zalogowany użytkownik nie ma uprawnienia "SUPER" (które samo nie jest dozwolone w RDS) pozwoliłoby na arbitralne eskalowanie uprawnień - przechowywane programy uruchamiane z referencje i przywileje ich 'DEFINERU '(domyślnie w przeciwieństwie do użytkownika wywołującego - ich" INVOKER "). Również [w Server Fault] (https://serverfault.com/a/555983/153161). –
Człowiek, który jesteś ratunkiem życia. Gdyby moja firma hostingowa powiedziała mi uszkodzoną bazę danych po wyeksportowaniu i nic, co można by zrobić, aby przywrócić. Idealne rozwiązanie. – Woody
Z jakiegoś powodu musiałem użyć * zamiast +: '' '' sed 's/\ sDEFINER = '[^'] * '@' [^ '] *' //' -i oldfile.sql''' ' –