【问题标题】:update command is denied for user用户的更新命令被拒绝
【发布时间】:2011-12-20 06:29:31
【问题描述】:

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

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

然后,我用默认用户进行了相同的测试,它仍然无法正常工作。但是,它在我的系统上运行良好。

MySQL的错误是

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

其他命令运行正常。

为什么会这样?以及如何预防?或者有什么解决办法?

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

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

【问题讨论】:

  • 为什么这个问题被否决了?
  • 好吧。问题是什么是解决方案或解决方案。更新
  • 我认为错误是不言自明的——无论您在何处运行此命令,test@localhost 都没有该表的 UPDATE 权限。解决方案是授予权限 - 或与您的免费主机核实是否允许。
  • 我已经提到我通过cpanel添加了权限
  • @Widor:这是一个有效的问题,只是不要随意使用鼠标,使用一些大脑.. 无需立即投票,如果您没有时间回答小问题离开它给别人,你可能有很好的知识,给同胞一些尊重。希望您记得您在开始职业生涯时处于同一水平。

标签: mysql shared-hosting


【解决方案1】:

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

而不是设置触发器:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 我正好遇到了这个问题。在用于 Azure 的 ClearDb 上
    • 完全一样,在 Heroku 上的 ClearDB 实例上的 Sequel Pro 中让我发疯,甚至不得不回滚数据库更改......呃。评论的赢家。不错。
    【解决方案3】:

    使用 mysql 你可以做到 选择 * 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 
    

    然后就可以正常使用了

    【讨论】:

      【解决方案4】:

      对于所有尝试在这里回答这个问题的人,我表示由衷的感谢。我找到了问题和解决方案。

      我的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】:

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

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

      【讨论】:

      • 我遇到了一个 sql 文件(应用程序数据库结构升级文件)的问题。我已授予应用程序帐户用户对应用程序数据库的完全访问权限,但不断获得权限被拒绝。拔掉一半头发后,我终于注意到,在这个巨大的文件中间,有一个旋钮将表名硬编码为一个命令。表名是应用程序的名称,而不是表的名称,所以它对我来说并不突出。 ://
      • 为我做的>.
      • “即使表不可用,MySQL 也表示访问被拒绝” - 这也是我的问题。权限看起来是正确的,但是 UPDATE 语句在 DB 名称中有错字,因此它给出了权限错误,而不是说找不到 db/table。
      【解决方案6】:

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

      这样的表名

      scheme.TABLE_NAME

      不改变权限而只使用

      表名

      在所有环境中工作。

      【讨论】:

        【解决方案7】:

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

        SELECT USER(); 
        

        如上面所有 cmets 所示,应该会输出 '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 结果。是 GRANT ALL on your_database.* TO 'test'@'localhost'?或 GRANT ALL 仅在某些表上。另一个(可能很明显)步骤是联系您的托管供应商。如果您设置了所有权限并且无法更新表格,他们应该能够帮助您
        • 在 windows phpmyadmin 上工作。
        【解决方案8】:

        为测试用户提供完全访问权限,以 ip 作为 localhost。从 mysql db 检查用户表。

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

        【讨论】:

          【解决方案9】:

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

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

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

          【讨论】:

          • 用户确实有权限。因为我可以通过phpmyadmin修改内容。
          • 但是 GRANT SELECT 应该是 GRANT UPDATE,或者如果你想给用户完全权限:GRANT ALL
          • 当您通过 phpmyadmin 登录时,您是否使用与用户 test 相同的用户名/密码?很可能情况并非如此。
          • @Oldskool: 哎呀 ;) 已更正。
          • @pahnin try GRANT UPDATE ON database.* TO test@'%' IDENTIFIED BY 'password';
          【解决方案10】:

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

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

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

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

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

          【讨论】:

          • @pahnin 您没有指定您的应用程序是本地连接到服务器还是远程连接。请注意,用户可能仅具有从本地主机更新的权限。如果是远程连接,需要专门以GRANT UPDATE ... to test@your.ip.address ...的方式授予
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          • 1970-01-01
          • 1970-01-01
          • 2012-04-10
          • 2019-01-12
          • 1970-01-01
          相关资源
          最近更新 更多