更新命令被拒绝,用户无权限。

30

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

尽管用户应该被允许使用cPanel中的所有命令,但我无法使用UPDATE MySQL命令更改数据库值。

然后,我使用默认用户进行了相同的测试,但仍然无法使用该命令。但是,在我的系统上可以正常工作。

MySQL错误是:

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

其他命令正常工作。

为什么会发生这种情况?如何预防?或者有解决方案吗?

我非常确定用户有使用UPDATE命令的权限,因为我可以使用相同的用户在phpMyAdmin中修改MySQL字段。

我不明白为什么一些来自PHP的MySQL命令被拒绝,而该用户被赋予了所有权限,并且可以通过phpMyAdmin做任何事情。鉴于脚本、phpMyAdmin和SQL主机在同一台服务器上,我感到很困惑。


1
为什么这个问题被投票否决了? - pahnin
4
好的,问题是这个情况的解决方案或修复方法是什么。已更新。 - pahnin
1
我已经提到过,我通过cpanel添加了权限。 - pahnin
17
@Widor:这是一个有效的问题,只是不要按照你想要的方式使用鼠标,用一些脑子。没有必要立即投票反对,如果你没有时间回答小问题,就把它留给其他人,你可能有很好的知识,要尊重其他成员。希望你记得当你开始职业生涯时也处于同样的水平。 - Hari Gillala
是的,我可以,只是更新不起作用。 - pahnin
显示剩余6条评论
10个回答

40

感谢所有尝试回答这个问题的人。我已经找到了问题和解决方案。

我的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
那看起来确实像个 bug。但至少有一个解决方法。 - David Dombrowsky
遇到了完全相同的问题。看起来真的很不直观。 - DiDiev

8

正如其他人所说,这是一个权限问题。我相信你可能已经检查过了,但以防万一。在您登录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权限,您肯定可以更新数据。


你能粘贴一下你完整的GRANT ALL结果吗?是在your_database.*上授权给'test'@'localhost'吗?还是只在某些表上进行了GRANT ALL。另一个(可能显而易见的)步骤是联系你的托管供应商。如果你已经设置了所有权限但无法更新表,则他们应该能够提供帮助。 - Alexey Gerasimov
在Windows上使用phpMyAdmin工作。 - Vignesh Chinnaiyan

6

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

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

如果您使用图形化工具管理数据库,例如PHPMyAdmin或SQLYog等工具,您也可以使用这些工具来启用这些权限。

用户具有权限,因为我可以通过phpmyadmin修改内容。 - pahnin
但是应该授予GRANT UPDATE而不是GRANT SELECT权限,或者如果您想给用户完全权限,则应授予GRANT ALL。 - Oldskool
当您通过phpmyadmin登录时,您使用的用户名/密码与用户“test”相同吗?很可能不是这种情况。 - Icarus
@Oldskool:糟糕;)已更正。 - user542603
尝试使用以下命令:GRANT UPDATE ON database.* TO test@'%' IDENTIFIED BY 'password'; - Ben English

5
我遇到了同样的问题,权限是正确的,但在某些环境中可以正常工作,而在另一些环境中不能。我使用的表名类似于scheme.TABLE_NAME。不改变权限,仅使用table_name即可在所有环境中正常工作。

3
有时这是一个区分大小写的问题。
即使表不存在,MySQL也会显示访问被拒绝。请确保您没有大小写问题。

我遇到了一个 SQL 文件的问题(一个应用程序数据库结构升级文件)。我已经授予应用程序帐户用户对应用程序数据库的完全访问权限,但仍然无法获得许可。在拔掉一半头发之后,我终于注意到有些人在这个巨大的文件中的一个命令中硬编码了表名。表名是应用程序的名称,而不是表的名称,所以我没有注意到它。 :/ - dannysauer
那对我来说解决了问题 >.< - Menelaos Kotsollaris
MySQL即使表不存在也会显示访问被拒绝,这也是我的问题所在。权限看起来是正确的,但UPDATE语句中数据库名称有一个拼写错误,因此它会给出权限错误而不是说找不到数据库/表。 - Brad Peabody

2
我的 SQL 错误是 UPDATE command denied to user 'test'@'localhost' for table 'content',这是为什么?如何防止它发生?或者有什么解决方案吗?
出现这种情况是因为用户 test 没有表 content 的更新权限。像下面这样授予用户所需的权限就可以了:
GRANT UPDATE ON database.content TO test@'localhost' IDENTIFIED BY 'password';

*上面的密码仅为占位符。您应该使用真实的密码。


1
@pahnin,你没有说明你的应用程序是本地连接服务器还是远程连接。请注意,用户可能只有在本地主机上具有UPDATE权限。如果你正在远程连接,需要指定授予权限的方式:GRANT UPDATE ... to test@your.ip.address... - Icarus

2

当MySQL数据库空间达到限制时,在一些Web主机上,可能会出现UPDATE命令被拒绝的错误。


我也遇到了这个问题。在Azure的ClearDb上。 - AxelWass
完全相同的问题,在 Heroku 上的 ClearDB 实例中 Sequel Pro 把我逼疯了,甚至不得不回滚数据库的更改... 噢。好评获得者。棒极了。 - Ruben Murray

0

为本地主机的测试用户提供完全访问权限。从mysql数据库中检查用户表。

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


0

当我为远程MySql实例(通过JawsDB)创建包含更新子句的触发器时,出现了这个错误。

我将其设置为:

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行中删除了数据库名称,只留下表名。

请注意,在任何地方看到``时,应该只有一个波浪线而不是两个。如果有人知道如何在stackoverflow的标记中修复它,请告诉我!


-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 

那么它就能正常工作了


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接