MySQL错误:#1142 - 拒绝用户的SELECT命令

时间:2012-06-08 21:22:48

标签: mysql select command denied

我在其中一台服务器上遇到某些问题时遇到了麻烦。在我测试过的所有其他地方它完全正常但在服务器上我想使用它它不起作用。

这是关于以下SQL:

SELECT facturen.id            AS fid, 
       projecten.id           AS pid, 
       titel, 
       facturen.totaal_bedrag AS totaal, 
       betaald, 
       datum 
FROM   facturen, 
       projecten 
WHERE  facturen.project_id = projecten.id 
       AND projecten.eigenaar = '1' 
ORDER  BY datum DESC 

这是我从中得到的错误代码:

SELECT command denied to user 'marco'@'localhost' for table 'projecten'

表格: facturen:

CREATE TABLE IF NOT EXISTS `facturen` (
  `id` int(11) NOT NULL auto_increment,
  `project_id` int(11) NOT NULL,
  `datum` int(11) NOT NULL,
  `lever_datum` int(11) NOT NULL,
  `totaal_bedrag` decimal(9,2) NOT NULL,
  `btw` decimal(9,2) NOT NULL,
  `bedrijf` varchar(40) NOT NULL,
  `contactpersoon` varchar(60) NOT NULL,
  `adres` varchar(60) NOT NULL,
  `postcode` varchar(7) NOT NULL,
  `plaats` varchar(30) NOT NULL,
  `betaald` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=201200006 ;

projecten:

CREATE TABLE IF NOT EXISTS `projecten` (
  `id` int(11) NOT NULL auto_increment,
  `titel` varchar(80) NOT NULL,
  `eigenaar` int(11) NOT NULL,
  `creatie_datum` int(11) NOT NULL,
  `eind_datum` int(11) NOT NULL,
  `totaal_bedrag` decimal(9,2) NOT NULL,
  `btw` decimal(9,2) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=201200004 ;

奇怪的是,'projecten'表和'facturen'表上的所有其他查询都可以正常工作,此查询在我的其他两台服务器上运行正常。

14 个答案:

答案 0 :(得分:18)

我遇到了同样的情况,但有趣的是错误的原因是由于使用了错误的数据库或模式名称。

确实,多个问题可能导致您提到的错误。

答案 1 :(得分:15)

您需要向连接MySQL的MySQL用户授予SELECT权限

Error: select command denied to user '<userid>'@'<ip-address>' for table '<table-name>'

相同的问题

查看链接的答案;)

答案 2 :(得分:6)

由于别名tablename导致语法错误,也会出现此错误。

例如,在查询下面执行时,

  

从a.table1,b.table2中选择*,其中a.table1 = b.table2

发生以下错误:

  

MySQL错误:#1142。响应形成数据库。对表“table1”的用户“username @ ip”拒绝SELECT命令

解决方案:应正确使用别名tablename的语法,上述实例的语法解决方案&gt; select * from table1 a,table2 b其中a.table1 = b.table2

答案 3 :(得分:4)

我也遇到了这个问题,对我来说,问题是我搬到了一个新的服务器,我试图用我的PHP代码连接的数据库改为&#34; my_Database&#34;到&#34; my_database&#34;。

答案 4 :(得分:3)

这是数据库用户的权限问题。首先检查并授予用户权限 localhost中的'macro'

答案 5 :(得分:1)

所以我遇到的问题是这个...我用来授予权限的应用程序将Schema.TableName转换为错误表中的单个DB语句,因此授权确实是错误的,但是当我们做的时候看起来是正确的如果你没有非常关注GRANT SELECT和GRANT TABLE SELECT,那么为UserName显示一个重要的数据。手动纠正​​表格上的格兰特选择与Schema Table的正确转义解决了我的问题。

可能不相关,但我可以想象,如果一个客户做错了,另一个也可能。

希望这有帮助。

答案 6 :(得分:0)

当我导入带有无效定义器的视图时,在服务器上发生了此错误。

删除故障视图可修复错误。

该错误消息没有说出所涉及的视图,而是在“抱怨”该视图中使用的表之一。

答案 7 :(得分:0)

我也遇到了这个问题,我的名字是不正确的。我正在从本地服务器迁移到在线服务器。 我的SQL命令具有“ database.tablename.column ”结构。联机服务器中的数据库名称不同。例如我的代码是“ pet.item.name ”,而我的代码必须是“ pet_app.item.name ” 更改数据库名称解决了我的问题。

答案 8 :(得分:0)

您需要通过以下命令授予特定用户特权:mysql> GRANT ALL PRIVILEGES 授予'username'@'localhost';然后给他们冲洗特权;命令。 然后它不会出现此错误..,希望对您有所帮助..!

答案 9 :(得分:0)

如果您使用/连接多个数据库,那么您应该为所有数据库使用相同的 DB_USERNAME

我通过对所有数据库使用相同的 DB_USERNAME 解决了同样的问题, 因为我在同一个项目中使用/连接了多个数据库,并且每个数据库 DB_USERNAME 都不同,所以当我从多个数据库中运行查询选择、更新、删除等时,会收到此错误。

因为如果您在查询中使用多个表并且数据库 DB_USERNAME 不同,您将收到此错误。

答案 10 :(得分:-1)

我只是清空会话数据,然后它又可以工作了。在此处找到按钮:

答案 11 :(得分:-1)

你应该只需要清除会话数据,一切都会正常

答案 12 :(得分:-2)

在MySQL查询浏览器中,转到“工具”选项卡&gt;“MySQL管理员”&gt;用户管理,然后授予用户权限。

答案 13 :(得分:-4)

它关于mysql中用户的私有化,所以你应该为你的用户设置更大的授权。

这样做!

在终端中,输入代码 mysql> show grants;

然后更改以下代码:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*3F9DF5A32114E05C12C50A83EAE02991016C917B' WITH GRANT OPTION;

然后它就会完成。