错误:为表'<table-name>'选择拒绝用户'<userid>'@'<ip-address>'的命令

Par*_*att 57 mysql mysqldatareader mysql-error-1142

在我的网站上,我使用的是MySQL数据库.我正在使用webservice,在那里我做所有与数据库相关的操作.

现在,在该Web服务的一种方法中,我得到以下错误.

选择命令被拒绝用户''''为表'''

可能有什么不对?

下面是我得到该错误的代码.我试过调试,发现它在线路上失败了

MySqlDataReader result1 = command1.ExecuteReader();

这是我的代码:

        String addSQL = "Select Max(`TradeID`) from `jsontest`.`tbl_Positions";
        MySqlConnection objMyCon = new MySqlConnection(strProvider);
        objMyCon.Open();
        MySqlCommand command = objMyCon.CreateCommand();

        command.CommandText = addSQL;
         MySqlDataReader result = command.ExecuteReader();
        //int j = command.ExecuteNonQuery();
         while (result.Read())
         {
             MaxTradeID = Convert.ToInt32(result[0]);
         }
        objMyCon.Close();
        for (i = 1; i <= MaxTradeID; i++)
        {
            String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
            MySqlConnection objMyCon1 = new MySqlConnection(strProvider);
            objMyCon1.Open();
            MySqlCommand command1 = objMyCon1.CreateCommand();

            command1.CommandText = newSQL;
            MySqlDataReader result1 = command1.ExecuteReader();
           objMyCon2.Close();
Run Code Online (Sandbox Code Playgroud)

小智 146

我确信原始海报的问题早已得到解决.但是,我有同样的问题,所以我想我会解释导致这个问题的原因.

我正在用两个表进行联合查询 - 'foo'和'foo_bar'.但是,在我的SQL语句中,我有一个拼写错误:'foo.bar'

所以,而不是告诉我'foo.bar'表不存在,错误消息表明该命令被拒绝 - 好像我没有权限.

希望这有助于某人.

  • 好抓!我正在寻找用户许可而不是拼写错误. (10认同)
  • 这也是我的根本原因,一个错字.从安全角度来看,给出拒绝访问错误是有意义的,因为如果一个破解者试图通过尝试各种名称来获取表名,得到"不存在"错误将指示哪些表名确实存在于哪一点他们可以用暴力来找出用户名和密码.根据我的经验,如何简单的用户名和密码(通常是连字词的10个字符),它可能不会花那么长时间...... (2认同)
  • 在我的情况下,这是因为一些查询代码(如数据)已从SQL Server数据库中复制,并且`dbo`在MySQL数据库中不起作用:当`dbo.tablename`更改为`tablename时`,它执行没有错误. (2认同)

Sha*_*ngh 30

数据库用户没有执行选择查询的权限.

如果您具有对mysql的root访问权限,则可以向用户授予权限

http://dev.mysql.com/doc/refman/5.1/en/grant.html

您的第二个查询位于不同表上的不同数据库中.

 String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
Run Code Online (Sandbox Code Playgroud)

您正在连接的用户无权访问此数据库或此特定表中的数据.

你考虑过这个吗?


小智 9

选择拒绝表“”的用户“ @”的命令

此问题基本上是在联接条件中联接条件错误的联接名称中生成的。因此,请在数据库之后的联接表名称中检查您的选择查询。

然后解决它,例如其正确的软件

string g = " SELECT `emptable`.`image` , `applyleave`.`id` , `applyleave`.`empid` , `applyleave`.`empname` , `applyleave`.`dateapply` , `applyleave`.`leavename` , `applyleave`.`fromdate` , `applyleave`.`todate` , `applyleave`.`resion` , `applyleave`.`contact` , `applyleave`.`leavestatus` , `applyleave`.`username` , `applyleave`.`noday` FROM `DataEMP_ems`.`applyleave` INNER JOIN `DataEMP_ems`.`emptable` ON ( `applyleave`.`empid` = `emptable`.`empid` ) WHERE ( `applyleave`.`leavestatus` = 'panding' ) ";
Run Code Online (Sandbox Code Playgroud)

联接表是imputableapplyleave在同一数据库上,但在线数据库名称不同,则在此问题上给出了错误。


mut*_*nUp 8

这个问题发生在我身上,因为我hibernate.default_schema设置的数据库与DataSource中的数据库不同.

严格我的mysql用户权限,当hibernate试图查询表时,它查询hibernate.default_schema数据库中用户没有权限的那个.

不幸的是,mysql没有在此错误消息中正确指定数据库,因为这样可以立即清除.