Тази статия обсъжда как да отстранявате проблеми, които могат да възникнат, когато DEFINER атрибутът се използва с MySQL съхранени обекти (изгледи, тригери, функции и съхранени процедури).
Проблем
Може да срещнете проблеми при преглеждането или изпълнението на съхранени обекти в MySQL (изгледи, тригери, функции и съхранени процедури). Например, може да получите следното съобщение за грешка в phpMyAdmin:
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.
Като алтернатива може да получите привидно случайни грешки по време на работа на уебсайта или загуба на функционалност на базата данни.
Причина
ДЕФИНИРЪТ атрибутът се използва за определяне на потребителски акаунт в MySQL, който може да има достъп до конкретен съхранен обект. Въпреки това, могат да възникнат проблеми, когато потребителският акаунт на MySQL е в DEFINER атрибутът не съответства на влезлия в момента потребител на MySQL. Например, това може да се случи при използване на phpMyAdmin на cPanel, който винаги влиза като потребител на основен акаунт (cPanel), а не като потребител на база данни, дефиниран от потребителя.
По подобен начин този проблем може да възникне след миграция на сайт, ако DEFINER атрибутите в базата данни не се актуализират с потребителите на базата данни на новата хостинг среда.
Разделителна способност
За да разрешите този проблем, можете да опитате да влезете в базата данни като потребител на базата данни, който е посочен в DEFINER атрибути. (За да определите правилния потребител на базата данни, може да се наложи да изхвърлите базата данни и да прегледате DEFINER атрибути.) Има няколко начина, по които можете да влезете като различни потребители на база данни:
Метод №1:Използвайте клиентско приложение MySQL
Можете да използвате MySQL клиентско приложение, като MySQL Workbench, за да влезете в базата данни като правилния потребител на базата данни. След това ще можете да редактирате и стартирате съхранени обекти, като използвате правилната самоличност. За информация как да използвате MySQL клиентско приложение за свързване към вашите бази данни, моля, вижте тази статия.
Метод №2:Използвайте програмата за команден ред 'mysql'
Като алтернатива можете да използвате mysql програма от команден ред, за да влезете в базата данни като правилния потребител на базата данни. След това ще можете да редактирате и стартирате съхранени обекти, като използвате правилната самоличност. За информация как да използвате mysql програма за команден ред, моля, вижте тази статия.
Метод №3:Използвайте персонализирана инсталация на phpMyAdmin
Ако не искате да използвате MySQL клиентско приложение или командния ред, можете да създадете самостоятелна инсталация на phpMyAdmin на вашия хостинг акаунт. Тази персонализирана инсталация ви позволява да влезете в базата данни като правилния потребител на базата данни, вместо като потребител на основен акаунт (cPanel). За информация как да създадете персонализирана инсталация на phpMyAdmin, моля, вижте тази статия.
Понякога не можете да влезете в база данни като потребител на базата данни, посочен в DEFINER атрибути. Например сайт, който е мигрирал от друг хостинг доставчик, може да има различни конвенции за именуване на MySQL и може да е невъзможно да се създаде потребител на база данни с правилното име. В този случай трябва да направите следното:
- Изхвърлете цялата база данни във файл. За информация как да направите това, моля, вижте тази статия.
- Използвайте предпочитания от вас текстов редактор, за да актуализирате ръчно DEFINER атрибути за препратка към потребител на база данни, който контролирате.
- Импортирайте модифицираната база данни във вашия акаунт. За информация как да направите това, моля, вижте тази статия.
- Тествайте новата база данни. Вече трябва да можете да редактирате и изпълнявате съхранени обекти, като използвате правилната самоличност.
Повече информация
За повече информация относно дефиниторите, моля, посетете https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.