Това обикновено се случва при експортиране на изгледи/задействания/процедури от една база данни или сървър на друг, тъй като потребителят, създал този обект, вече не съществува.
Имате две опции:
1. Променете DEFINER
Това вероятно е най-лесно да направите, когато първоначално импортирате обектите на базата данни, като премахнете всеки DEFINER извлечения от сметището.
Промяната на дефинера по-късно е малко по-трудна:
Как да промените дефинера за изгледи
-
Изпълнете този SQL, за да генерирате необходимите ALTER изрази
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name'; -
Копирайте и изпълнете операторите ALTER
Как да промените дефинера за съхранени процедури
Пример:
UPDATE `mysql`.`proc` p SET definer = 'example@sqldat.com%' WHERE definer='example@sqldat.com%'
Бъдете внимателни, защото това ще промени всички дефинери за всички бази данни.
2. Създайте липсващия потребител
Ако сте открили следната грешка, докато използвате MySQL база данни:
The user specified as a definer ('someuser'@'%') does not exist`След това можете да го решите, като използвате следното:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
От https://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Това работи като чар - трябва само да промените someuser на името на липсващия потребител. На локален сървър за разработчици обикновено може да използвате просто root .
Също така помислете дали наистина трябва да предоставите на потребителя ALL разрешения или дали биха могли да направят с по-малко.