#1449 — phpMyAdmin (пользователь, указанный в качестве определителя (‘***’@’localhost’), не существует)

#php #mysql #phpmyadmin

#php #mysql #phpmyadmin

Вопрос:

В настоящее время я переношу все свои «просмотры» с VPS, размещенного с 123-reg, на другой VPS, предоставляемый Heart Internet.

Вот представление:

 CREATE ALGORITHM=UNDEFINED DEFINER=`etd`@`localhost` SQL SECURITY DEFINER VIEW `vShoppingCart` AS SELECT `VCoursesUOC`.`Distributor` AS `Distributor`,`VCoursesUOC`.`Company` AS `Company`,`VCoursesUOC`.`Title` AS `Title`,`VCoursesUOC`.`Price` AS `Price`,(`VCoursesUOC`.`Price` / 5) AS `VAT`,(`VCoursesUOC`.`Price` * 1.2) AS `WithVAT`,(sum(`VCoursesUOC`.`Price`) * 1.2) AS `Total`,count(`VCoursesUOC`.`CourseId`) AS `NoOfCourses` FROM `VCoursesUOC` WHERE (`VCoursesUOC`.`Payment` = 'Unpaid') GROUP BY `VCoursesUOC`.`Title`,`VCoursesUOC`.`Distributor`,`VCoursesUOC`.`Company`,`VCoursesUOC`.`Price`
  

Каждый раз, когда я пытаюсь запустить это, я получаю следующую ошибку:

 #1449 - The user specified as a definer ('etd'@'localhost') does not exist
  

Я попытался изменить etd root и имя пользователя базы данных в базе данных MySQL, но это не исправляет ошибку.

Что я могу попробовать?

Я вошел в phpMyAdmin как пользователь root.

Комментарии:

1. пользователь отсутствует ??

2. Но ‘etd’ никогда не существовал на новом VPS, так как же он узнает, что это за пользователь? Я попытался изменить ‘etd’ на имя пользователя, связанное с базой данных, в которой я его запускаю, и это все еще не работает.

3. попробуйте создать нового пользователя, затем попробуйте

4. Но откуда он etd берется? :S

5. Выполните следующие действия: 1.Перейдите в phpMyAdmin 2. Выберите свою базу данных 3.Выберите свою таблицу 4. В верхнем меню нажмите «Триггеры» 5.Нажмите «Редактировать», чтобы отредактировать триггер 6.Измените определитель с [user@localhost] на root@localhost

Ответ №1:

Просто подключите свою базу данных к MySQL workbench и выполните следующие действия —

  1. Перейдите на вкладку Администрирование
  2. Нажмите на Пользователи и привилегии
  3. Нажмите на кнопку Добавить учетную запись
  4. На странице добавления учетной записи на вкладке входа в систему добавьте пользователя с тем же именем пользователя и паролем
  5. Перейдите на вкладку Административные роли, выберите роль администратора базы данных и нажмите кнопку Применить, и все готово.

введите описание изображения здесь

Ответ №2:

Пользователь не существует, поэтому вам нужно либо создать его, либо использовать другого пользователя, который существует и имеет необходимые привилегии.

etd — это пользователь, используемый в исходном источнике в качестве определителя.

Комментарии:

1. Как мне создать пользователя?

2. @user6618037, пожалуйста, прочтите эту статью, в конце вы должны иметь возможность создать пользователя: dev.mysql.com/doc/refman/5.7/en/create-user.html

Ответ №3:

Это DEFINER необязательно в CREATE VIEW инструкции MySQL.

Вы можете попробовать изменить инструкцию, чтобы удалить DEFINER = 'user'@'host' из инструкции.

Это было бы эквивалентно указанию DEFINER = CURRENT_USER в инструкции.

Учитывая SQL SECURITY DEFINER , это повлияет на контекст безопасности представления.


Если вы хотите указать a DEFINER в определении представления (в CREATE VIEW инструкции), указанный пользователь должен существовать в MySQL.

Обратите внимание, что «пользователь» в MySQL идентифицируется как именем пользователя, так и хостом.

То есть, 'etd'@'%' это другой пользователь, чем 'etd'@'localhost' .

Чтобы создать пользователя, вы можете выполнить инструкцию, подобную этой:

 GRANT USAGE ON *.* TO 'etd'@'localhost' IDENTIFIED BY 'mysecretpassword'
  

Этому же пользователю также должны быть предоставлены соответствующие привилегии ВЫБОРА в таблицах, лежащих в основе представления,


Чтобы создать пользователя в экземпляре MySQL, где вы хотите «скопировать» определение из другого экземпляра MySQL в другой…

В «исходном» экземпляре (где 'etd'@'localhost' существует пользователь, которого мы хотим «скопировать», мы можем выполнить оператор, подобный этому:

  SHOW GRANTS FOR 'etd'@'localhost'
  

Строки, возвращаемые этим, являются довольно хорошим представлением инструкций, которые нам нужно было бы выполнить в другом экземпляре MySQL, чтобы создать там пользователя.

Комментарии:

1. @spenser7593 В ПОКАЗЕ ГРАНТОВ показано: РАЗРЕШИТЬ ИСПОЛЬЗОВАНИЕ . ДЛЯ ‘etd’ @’localhost’, ИДЕНТИФИЦИРУЕМОГО ПАРОЛЕМ ‘* RANDOMCODE’

2. @user6618037: вы можете взять выходные данные из инструкции SHOW GRANTS (выполняемой в экземпляре «source», из которого вы хотите скопировать пользователя), перенести их в другой экземпляр базы данных и выполнить эти инструкции (добавить точки с запятой) для создания пользователя. (Я хотел бы отметить, что «не удается заставить его работать» не особенно описывает поведение, которое вы наблюдаете, поскольку помогает выявить проблему.)

Ответ №4:

   select user, host from mysql.user; 
  

Вы можете использовать эту команду для получения информации о вашем пользователе и хосте. Если вы используете root в качестве пользователя, попробуйте использовать root@localhost