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 = '[email protected]%' WHERE definer='[email protected]%'
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 http://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.