команда обновления запрещена для пользователя - PullRequest
22 голосов
/ 02 ноября 2011

Я использовал этот бесплатный хостинг для разработки и тестирования.

Я не мог использовать команду UPDATE MySQL для изменения значений базы данных, даже если пользовательПредполагается, что ему разрешено использовать все команды из cPanel.

Затем я протестировал то же самое с пользователем по умолчанию, но он все равно не будет работать.Тем не менее, он отлично работает в моей системе.

Ошибка MySQL:

UPDATE command denied to user 'test'@'localhost' for table 'content'

Другие команды работают нормально.

Почему это происходит?И как это можно предотвратить?Или какое-нибудь решение для этого?

И я очень уверен, что у пользователей есть разрешение на использование команды UPDATE, потому что я могу использовать phpMyAdmin с тем же пользователем и изменять поля MySQL.

Iне понимаю, почему некоторые команды MySQL из PHP запрещены для пользователя, которому предоставлены все привилегии, и он может делать все через phpMyAdmin.Учитывая этот сценарий, phpMyAdmin и хост SQL находятся на одном сервере.

Ответы [ 9 ]

32 голосов
/ 20 февраля 2012

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

мой sql-запрос похож на

UPDATE `dblayer`.`test` SET `title` = 'hello a' WHERE `test`.`id` =1;

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

`dblayer`.`test`

Я пытаюсь выбрать таблицу глобально (или что-то подобное, я не уверен), ноесли мой sql-запрос

UPDATE `test` SET `title` = 'hello a' WHERE `test`.`id` =1;

, он работает и на моем сервере.

5 голосов
/ 14 ноября 2011

Как и все остальные, это проблема разрешения.Я уверен, что вы, наверное, проверили, но на всякий случай.После входа в phpmyadmin выполните следующее:

SELECT USER(); 

Это должно выплевывать 'test' @ 'localhost', как указано во всех комментариях выше

Затем выполните

SHOW GRANTS FOR  'test'@'localhost'

Это должно дать вам все привилегии для этого пользователя.Когда вы получите результаты, выберите «Опции», «Полный текст» и нажмите «Перейти», чтобы получить полный текст.

Убедитесь, что разрешения в выходных данных имеют что-то вроде этого:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `your_database`.* TO 'test'@'localhost'

Возможно, вы не сможете получить GRANT ALL для некоторых настроек хостинга, но пока у вас есть INSERT, UPDATE, DELETEВы обязательно должны быть в состоянии обновить данные

5 голосов
/ 02 ноября 2011

У вашего пользователя нет необходимых прав.Вам необходимо предоставить ему доступ к команде UPDATE, например:

GRANT UPDATE ON database.* TO test@'localhost' IDENTIFIED BY 'password';

Если вы используете графический инструмент для управления базой данных - например, PHPMyAdmin или SQLYog и т. Д. - вы должны иметь возможность использовать эти инструментычтобы включить эти разрешения тоже.

4 голосов
/ 19 февраля 2013

У меня была та же проблема, разрешение было правильным, но оно работало в некоторых средах, а не в других. Я использовал имя таблицы как

scheme.TABLE_NAME .

Без изменения разрешения, но с использованием

имя_таблицы

работал во всех средах.

2 голосов
/ 30 января 2012

Иногда это чувствительная к регистру проблема.

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

2 голосов
/ 02 ноября 2011

Моя ошибка sql: команда UPDATE запрещена пользователю 'test' @ 'localhost' для таблицы 'content'

Почему это происходит?И как это предотвратить?Или какое-нибудь решение для этого?

Это происходит для того, что, по его словам, происходит: у пользователя test нет прав на обновление таблицы content.Примерно так должно дать пользователю необходимое разрешение:

GRANT UPDATE ON database.content TO test@'localhost' IDENTIFIED BY 'password';

* пароль выше просто заполнитель.Вы должны использовать реальный.

1 голос
/ 17 ноября 2015

Ошибка UPDATE command denied на некоторых веб-хостах может быть результатом достижения лимита пространства базы данных MySQL.

0 голосов
/ 22 сентября 2013

С MySQL вы можете просто сделать SELECT * mysql.user

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

 UPDATE  mysql.user 
 SET  Insert_priv =  'Y',
 Update_priv =  'Y' 
 WHERE  user.Host =  'localhost' AND  user.User =  'test';

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

 /etc/init.d/mysql restart 

Тогда это будет нормально работать

0 голосов
/ 09 ноября 2011

Предоставьте полный доступ для тестового пользователя с ip как localhost. Проверьте таблицу пользователя из mysql db.

Войдите в систему как пользователь root и войдите в базу данных mysql, а затем в таблицу пользователей. Вы найдете текущие привилегии вашего тестового пользователя.

...