Dzieje się tak często podczas eksportowania widoków/wyzwalaczy/procedur z jednej bazy danych lub serwera do innej, ponieważ użytkownik, który utworzył ten obiekt, już nie istnieje.
Masz dwie opcje:
1. Zmień DEFINIERA
Jest to prawdopodobnie najłatwiejsze do zrobienia podczas początkowego importowania obiektów bazy danych, usuwając dowolny DEFINER oświadczenia ze zrzutu.
Późniejsza zmiana definiującego jest trochę bardziej skomplikowana:
Jak zmienić definicję widoków
-
Uruchom ten kod SQL, aby wygenerować niezbędne instrukcje ALTER
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name'; -
Skopiuj i uruchom instrukcje ALTER
Jak zmienić definicję procedur składowanych
Przykład:
UPDATE `mysql`.`proc` p SET definer = 'example@sqldat.com%' WHERE definer='example@sqldat.com%'
Bądź ostrożny, ponieważ zmieni to wszystkie definiujące dla wszystkich baz danych.
2. Utwórz brakującego użytkownika
Jeśli znalazłeś następujący błąd podczas korzystania z bazy danych MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Następnie możesz rozwiązać ten problem, używając :
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;
Od https://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
To zadziałało jak urok - wystarczy zmienić someuser na nazwisko zaginionego użytkownika. Na lokalnym serwerze deweloperskim możesz zwykle użyć root .
Zastanów się również, czy rzeczywiście musisz przyznać użytkownikowi ALL uprawnień lub czy mogliby zrobić z mniejszymi.