用户拒绝更新命令

时间:2011-11-02 12:09:06

标签: mysql shared-hosting

我一直在使用this免费托管网站进行开发和测试。

我无法使用UPDATE MySQL命令更改数据库值,即使允许用户使用来自cPanel的所有命令。

然后,我已经使用默认用户对其进行了测试,但它仍然无效。但是,它在我的系统上运行良好。

MySQL错误是

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

其他命令工作正常。

为什么会这样?它怎么能被阻止?或者任何解决方案?

我非常确定用户有权使用UPDATE命令,因为我可以将phpMyAdmin与同一用户一起使用并修改MySQL字段。

我不明白为什么来自PHP的某些MySQL命令被拒绝给予所有特权并且可以通过phpMyAdmin完成所有操作的用户。鉴于该脚本,phpMyAdmin和SQL主机位于同一服务器上。

10 个答案:

答案 0 :(得分:30)

对于尝试回答这个问题的每个人,我都非常感谢。我找到了问题和解决方案。

我的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;

它也适用于我的服务器。

答案 1 :(得分:5)

您的用户没有正确的权限。您需要授予它访问UPDATE命令的权限,如下所示:

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

如果您使用图形工具来管理数据库 - 例如PHPMyAdmin或SQLYog等 - 你应该能够使用这些工具来启用这些权限。

答案 2 :(得分:5)

正如其他人所说,这是许可问题。我相信你可能会检查,但为了以防万一。登录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,您就一定能够更新数据

答案 3 :(得分:4)

我有同样的问题,权限是正确的,但它在某些环境中工作,而在其他环境中工作。我正在使用像

这样的表名

<强> scheme.TABLE_NAME 即可。

不改变权限,只使用

table_name

适用于所有环境。

答案 4 :(得分:2)

  

我的sql错误是UPDATE命令拒绝用户'test'@'localhost'   表'内容'

     

为什么会这样?以及如何预防呢?或任何解决方案   此?

它正在发生的事情正在发生:用户test没有对表content的更新权限。这样的事情应该授予用户所需的权限:

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

*上面的密码只是占位符。你应该使用真实的。

答案 5 :(得分:2)

有时这是一个区分大小写的问题。

MySQL也表示即使表格不可用也拒绝访问。请确保您没有区分大小写的问题。

答案 6 :(得分:1)

某些Web主机上的UPDATE command denied错误可能是达到MySQL数据库空间限制的结果。

答案 7 :(得分:0)

使用ip作为localhost提供对测试用户的完全访问权限。从mysql db中检查用户表。

以root身份登录并进入mysql数据库,然后进入用户表。您将找到测试用户的当前权限。

答案 8 :(得分:0)

当我为远程MySql实例(通过JawsDB)创建触发器(其中包括update子句)时,出现了此错误。

代替设置触发此操作:

CREATE TRIGGER updateRecentDateFromProcGen After Insert On ``mq6swfzd39ygjejl``.``proceduregeneration`` For Each Row BEGIN UPDATE ``mq6swfzd39ygjejl``.``users`` SET mostRecentDateAllActivities = NEW.date WHERE NEW.userID = users.ID; END

我这样设置

CREATE TRIGGER updateRecentDateFromProcGen After Insert On ``mq6swfzd39ygjejl``.``proceduregeneration`` For Each Row BEGIN UPDATE ``users`` SET mostRecentDateAllActivities = NEW.date WHERE NEW.userID = users.ID; END 基本上,我只是在UPDATE行中删除了数据库名称,而仅保留了表名称。

请注意,无论您在何处看到``应该只有一个波浪号而不是两个。如果有人知道如何在堆栈溢出的标记中解决此问题,请告诉我!

答案 9 :(得分:-1)

使用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 

然后它会正常工作