#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
берется? :S5. Выполните следующие действия: 1.Перейдите в phpMyAdmin 2. Выберите свою базу данных 3.Выберите свою таблицу 4. В верхнем меню нажмите «Триггеры» 5.Нажмите «Редактировать», чтобы отредактировать триггер 6.Измените определитель с [user@localhost] на root@localhost
Ответ №1:
Просто подключите свою базу данных к MySQL workbench и выполните следующие действия —
- Перейдите на вкладку Администрирование
- Нажмите на Пользователи и привилегии
- Нажмите на кнопку Добавить учетную запись
- На странице добавления учетной записи на вкладке входа в систему добавьте пользователя с тем же именем пользователя и паролем
- Перейдите на вкладку Административные роли, выберите роль администратора базы данных и нажмите кнопку Применить, и все готово.
Ответ №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