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

Posted

技术标签:

【中文标题】MySQL 错误:#1142 - SELECT 命令拒绝用户【英文标题】:MySQL Error: #1142 - SELECT command denied to user 【发布时间】:2012-06-12 22:43:22 【问题描述】:

我的一台服务器上的某个查询出现问题。在我测试过的所有其他地方它工作得很好,但在我想使用它的服务器上它不工作。

关于下面的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'

表格: 制造商:

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 是什么? 我的一个错字,因为我把它从我的旧数据库复制到这里。它不在主数据库上,所以问题没有得到解决。这也不是特权问题,因为我获得了完全访问权限。 你能打印出你的权限表的结果吗? @matthewdavidson,授予所有特权;) 没关系,但是您是否尝试过为没有名称冲突的字段使用限定名称?那么projecten.titel之类的? 【参考方案1】:

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

和这里Error: select command denied to user '<userid>'@'<ip-address>' for table '<table-name>'的问题相同

查看链接的答案;)

【讨论】:

已经试过了,还是不行,不过还是谢谢。 您找到答案了吗?我现在有同样的问题。用户有权限,但不能从这个表中选择。 这可能是错误的SELECT表达式,这发生在5.7(似乎更严格) 在我的例子中,我使用了一个仅为任务创建的用户,而这个用户无权访问我的普通用户可以访问的temp 数据库。我不明白这一点。因此,我在我的 rdms 编辑器中创建了一个到主机的新连接,并直观地检查了连接是否正常工作,创建了连接,然后我看到了丢失的数据库。【参考方案2】:

这是您的数据库用户的权限问题。首先检查并授予用户权限 本地主机中的“马可”

【讨论】:

【参考方案3】:

所以我遇到的问题是……我用来授予权限的应用程序将 Schema.TableName 转换为错误表中的单个 DB 语句,所以授予确实是错误的,但是当我们这样做时看起来是正确的如果您没有非常密切地关注 GRANT SELECT 与 GRANT TABLE SELECT,则显示用户名的授予。手动更正表格上的 Grant Select 并正确转义 Schema.Table 解决了我的问题。

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

希望对您有所帮助。

【讨论】:

【参考方案4】:

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

【讨论】:

问题不是关于一些未指定的浏览器,只是纯粹的 MySQL【参考方案5】:

我也遇到了这个问题,对我来说,问题是我搬到了一个新的服务器上,我试图用我的 php 代码连接的数据库从“my_Database”更改为“my_database”。

【讨论】:

【参考方案6】:

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

确实有多个问题会导致您提到的错误。

【讨论】:

+1 是的,有可能。我也打了这个。在我的情况下,我的新表名有一个“。”偶然。我希望表名是 MAP.DATE,其中 DATE 是时间戳。它使它像一个模式一样思考。我替换 .最终与_合作,它起作用了 在我的情况下更有趣。我刚刚注销并登录。it worked for me :) 是的,没错。在我的情况下,模式名称是错误的。更改为正确的架构名称后,查询有效【参考方案7】:

由于表名别名出现语法错误,也会出现此错误。

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

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

出现以下错误:

MySQL 错误:#1142。响应来自数据库。 SELECT 命令拒绝用户“username@ip”访问表“table1”

解决方案:应正确使用别名表名的语法,上述实例的语法解决方案:

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

【讨论】:

【参考方案8】:

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

删除错误视图修复了错误。

错误消息没有说明有关视图的任何内容,而是“抱怨”视图中使用的表之一。

【讨论】:

【参考方案9】:

我刚刚清空了我的会话数据,然后它又开始工作了。您可以在此处找到该按钮:

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

您需要通过给出命令 mysql> GRANT ALL PRIVILEGES . To 'username'@'localhost' 来为特定用户授予权限;然后给予 FLUSH PRIVILEGES;命令。 那就不会报这个错误了..希望对您有帮助谢谢..!

【讨论】:

请在评论中添加此类答案。 @PratikBhajankar 声誉 【参考方案12】:

您应该只清除会话数据,这样一切都会正常工作

【讨论】:

这在 cmets 部分看起来更合适。 清除会话数据已经suggested作为同一页面上的答案。无需发布重复。谢谢。 我遇到了同样的问题,所以我尝试通过清除会话数据来解决它并且它有效,而且我似乎没有你的答案是我的错【参考方案13】:

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

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

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

【讨论】:

【参考方案14】:

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

【讨论】:

以上是关于MySQL 错误:#1142 - SELECT 命令拒绝用户的主要内容,如果未能解决你的问题,请参考以下文章

从服务器检索数据到本地返回 SQLSTATE[42000]:语法错误或访问冲突:1142 SELECT 命令拒绝用户

MariaDB 10.2.6 上的“带有递归”语句的“错误 1142(42000):SELECT 命令被拒绝”

MySQL:错误 1142 (42000) 和错误 1064 (42000)

转: MySQL5.7 ERROR 1142 (42000)问题

mysql报错 1142 - SELECT command denied to user 'root_ssm'@'localhost' for table 'u

mysqlworkbench 错误 1142:创建命令拒绝用户'readonly'@'