2011-11-02 118 views
17

我一直在使用this免费托管网站进行开发和测试。更新命令被拒绝用户

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

然后,我测试了一个默认的用户,它仍然不起作用。但是,它在我的系统上正常工作。

MySQL的错误是

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

其他命令工作正常。

这是怎么发生的?如何防止?或者任何解决方案?

我很肯定用户有权使用UPDATE命令,因为我可以使用phpMyAdmin和相同的用户并修改MySQL字段。

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

+0

为什么这个问题被否决? – pahnin

+0

我没有看到一个问题...... – Widor

+3

好。问题是解决方案或解决方案是什么。更新 – pahnin

回答

24

对于每个尝试过回答这个问题的人都是我衷心的感谢。我找到了问题和解决方案。

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

它也适用于我的服务器。

+0

标记myown回答正确的我的问题!大声笑 – pahnin

4

您的用户没有正确的权限。你需要给它进入UPDATE命令,就像这样:

GRANT UPDATE ON database.* TO [email protected]'localhost' IDENTIFIED BY 'password'; 

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

+0

用户确实有权限。因为我可以通过phpmyadmin修改内容。 – pahnin

+0

但是,而不是GRANT SELECT应该是GRANT UPDATE,或者如果你想给用户完全的权限:GRANT ALL – Oldskool

+0

,当你通过phpmyadmin登录时,你是否使用了与用户'test'相同的用户名/密码?很可能情况并非如此。 – Icarus

2

在我的SQL错误的UPDATE命令,拒绝用户“测试” @“localhost”的 表“内容”

为什么会出现这种情况?以及如何预防它?或者任何解决方案为 这?

它发生了什么说它发生了:用户test没有表content上的更新权限。像这样的东西应该授予用户所需的权限:

GRANT UPDATE ON database.content TO [email protected]'localhost' IDENTIFIED BY 'password'; 

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

+0

我已更新问题plzz chk – pahnin

+1

@pahnin您没有指定您的应用程序是本地连接到服务器还是远程连接。请注意,用户可能有权限仅从本地主机进行更新。如果您正在远程连接,则需要以'GRANT UPDATE ...'的方式授予[email protected] ...' – Icarus

+0

脚本在本地运行。 – pahnin

0

提供完整的访问测试用户与IP为localhost.Check从MySQL数据库的用户表。

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

4

正如其他人所说,这是许可问题。我相信你可能检查过,但以防万一。您登录到phpMyAdmin的后,运行以下命令:

SELECT USER(); 

这应该吐出“测试” @“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你绝对应该能够更新数据

+0

我已经得到所有 – pahnin

+0

你能否粘贴你的整个GRANT ALL结果。它是否在'your_database'上授予所有权。*'测试'@'localhost'?或仅在某些表格上放行全部。另一个(可能很明显的)步骤是联系您的托管供应商。如果你有所有的权限设置,并且不能更新表格,他们应该能够帮助你 –

2

有时它是一个大小写敏感的问题。

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

+0

我有一个sql文件(一个应用程序数据库结构升级文件)的这个问题。我已授予应用程序帐户用户对应用程序数据库的完全访问权限,但不断获得权限。在拔出一半头发后,我终于注意到,在这个庞大的文件中间,有一些旋钮将表格名称硬编码为一个命令。表格名称是应用程序的名称,而不是表格的名称,所以它不会贴在我的面前。 :/ – dannysauer

3

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

scheme.TABLE_NAME

不改变权限,但只使用

table_name的

在所有环境中工作。

-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 

然后,它做工精细

1

一个UPDATE command denied错误可以在某些网络主机是达到MySQL数据库空间限制的结果。

+0

我有这个问题。在ClearDb for Azure上 – AxelWass