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

50

我在一台服务器上遇到了一个特定查询的问题。在我测试过的所有其他地方,它都完全正常工作,但在我想要使用它的服务器上却不起作用。

以下是相关的 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 ;

项目:

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”表上的每个其他查询都完全正常,而且这个查询在我的另外两个服务器上也可以正常工作。


bt2.projecten 中的 bt2 是什么? - Raphaël Althaus
这是我的一个笔误,因为我将它从我的旧数据库复制到这里。在主数据库中并不存在,所以问题没有得到解决。同时,这也不是权限问题,因为我已经获得了完全访问权限。 - Seph
你能打印出权限表的结果吗? - matchdav
@matthewdavidson,授予所有权限 ;) - Seph
这不应该有影响,但你是否尝试为没有名称冲突的字段使用限定名称?比如 projecten.titel 这样的形式? - Brian Warshaw
另一个原因可能是您的帐户没有权限。 - Eric
15个回答

59

我曾经遇到过同样的情况,但有趣的是错误的原因是使用了不正确的数据库或模式名称。

确实,许多问题都可能导致你所提到的错误。


3
是的,这是可能的。我也遇到了这个问题。在我的情况下,我的新表名中意外地包含一个点“.”。我想让表名为MAP.DATE,其中DATE是时间戳。这使它像一个模式一样被解释。我最终用下划线替换了点,并且它成功地运行了。 - KeshV
2
在我的情况下,有点有趣。我刚刚退出登录并重新登录。“对我有效 :)” - Aman Deep
1
是的,没错。在我的情况下,模式名称是错误的。更正为正确的模式名称后,查询就可以工作了。 - Amit Nargund
是的,这是非常有可能的。我已经授予用户所有权限,但仍然收到“拒绝”错误。 - Khaerul Umam
是的,正确的。我也遇到了同样的问题。 - Ganesan J

19

已经尝试过了,但还是不起作用,不过还是谢谢。 - Seph
3
你解决了这个问题吗?我现在也遇到了同样的问题。用户拥有权限,但无法从这张表中进行选择操作。 - Kenzo
SELECT表达式可能是错误的,这在5.7中发生(似乎更严格)。 - nvvetal
在我的情况下,我使用了一个专门为此任务创建的用户,这个用户没有访问temp数据库的权限,而我的普通用户可以访问。我当时并没有意识到这一点。因此,我在我的rdms编辑器中创建了一个新的连接,并进行了可视化检查,以确定连接是否正常工作。在创建连接后,我发现缺少了数据库。 - questionto42

10

这个错误也会因为表别名导致的语法错误而产生。

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

select * from a.table1, b.table2 where a.table1= b.table2

会出现以下错误:

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

解决方案:应正确使用表别名语法,针对上述示例的语法解决方案如下:

select * from table1 a, table2 b where a.table1= b.table2


5

我也遇到了这个问题,对我来说,问题在于我迁移到了一台新服务器,而我尝试用我的PHP代码连接的数据库从“my_Database”更改为“my_database”。


4

这是您数据库用户的权限问题。首先,请检查并授予用户'marco'在本地主机上的权限。


2
我刚刚清空了我的会话数据,然后它又正常工作了。这是您可以找到按钮的位置:

1
所遇到的问题是这样的...我用于授予权限的应用程序将Schema.TableName转换为单个错误表中的DB语句,因此授予确实是错误的,但如果您没有非常注意GRANT SELECT与GRANT TABLE SELECT之间的区别,则在执行SHOW GRANTS FOR UserName时看起来是正确的。手动更正带有适当转义的Schema.Table的Grant Select解决了我的问题。可能与此无关,但我可以想象如果一个客户端做错了,另一个也可能会这样做。希望这有帮助。

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

1

我遇到了这个错误,因为我从本地主机复制存储过程,但在我想要使用它的服务器上,数据库名称不同。我花了几个小时才弄清楚,为什么我没有执行此过程的权限...请检查您的数据库名称:D 希望有人会觉得这个有用...


1
我可能有点晚,但这里是给新手的帖子。 所以在我的情况下,我使用 Laravel 9 和 2 个数据库(MySQL)。 在我的本地主机上,它完美运行,但在 live hosting 上,我却遇到了这个错误。
SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied

所以在浏览了一番之后,我发现我使用了错误的数据库名称,这导致了错误。因此,请务必仔细检查与 PHPMyAdmin 相关的两个数据库名称。


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