65

在我的网站中,我使用的是 MySQL 数据库。我正在使用一个网络服务,我在其中进行所有与数据库相关的操作。

现在在该网络服务的一种方法中,我收到以下错误。

选择命令拒绝用户 '<userid>'@'<ip-address>' 用于表 '<table-name>'

有什么问题?

下面是我收到该错误的代码。我尝试调试,发现它在该行失败

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();
4

16 回答 16

184

我敢肯定原始海报的问题早已得到解决。但是,我遇到了同样的问题,所以我想我会解释一下是什么导致了这个问题。

我正在对两个表进行联合查询——“foo”和“foo_bar”。但是,在我的 SQL 语句中,我有一个错字:'foo.bar'

因此,错误消息并没有告诉我“foo.bar”表不存在,而是表明该命令被拒绝——就好像我没有权限一样。

希望这可以帮助某人。

于 2011-04-14T19:29:58.717 回答
32

数据库用户没有选择查询的权限。

如果您对 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 + "'";

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

你考虑过这件事吗?

于 2011-01-22T09:18:22.897 回答
10

选择命令拒绝用户 ''@'' 用于表 ''

这个问题基本上是在您的连接查询中连接条件错误的数据库名称后生成的。所以请检查数据库后连接表名中的选择查询。

然后解决它,例如它的正确答案

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' ) ";

连接表在imputableapplyleave一个数据库上,但在线数据库名称不同,然后在这个问题上给出错误。

于 2016-01-31T07:24:32.627 回答
9

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

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

不幸的是,mysql 没有在此错误消息中正确指定数据库,因为这会立即清除问题。

于 2015-10-13T21:11:05.330 回答
3

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

http://dev.mysql.com/doc/refman/5.0/en/privilege-system.html

http://dev.mysql.com/doc/refman/5.0/en/user-account-management.html

于 2011-01-22T09:17:18.357 回答
3

我在 Mac 上通过 Sequel Pro 导出数据库时遇到了完全相同的错误消息。我是 root 用户,所以我知道这不是权限。然后我用 mysqldump 试了一下,得到了不同的错误信息: Got error: 1449: The user specified as a definer ('joey'@'127.0.0.1') does not exist when using LOCK TABLES

啊,我已经从开发站点上的备份中恢复了这个数据库,我还没有在这台机器上创建那个用户。“将所有权限授予'joey'@'127.0.0.1' 由 'joeypass' 识别;”成功了

hth

于 2014-12-09T15:51:59.593 回答
3

如果您正在使用 Windows 窗体应用程序,这对我有用

"server=localhost; user id=dbuser; password=password; database=dbname; Use Procedure Bodies=false;"

只需"Use Procedure Bodies=false"在连接字符串的末尾添加。

于 2015-01-15T18:34:17.877 回答
2

对我来说,我不小心在 SQL 查询中包含了我的本地数据库名称,因此在我部署时出现了拒绝访问的问题。

我从 SQL 查询中删除了数据库名称,它得到了修复。

于 2020-05-10T10:04:27.990 回答
1

问题很可能在 . 和一个_。在我提出的查询中说

选择.....从位置.PT

代替

选择 ..... FROM LOCATION_PT

所以我认为 MySQL 会将 LOCATION 视为数据库名称并给出访问权限错误。

于 2012-04-22T04:05:02.197 回答
1

我有同样的问题。这与休眠有关。我在 hibernate.cfg.xml 中将数据库从开发更改为生产,但在其他 hbm.xml 文件中存在具有旧数据库名称的目录属性,这导致了问题。

它没有告诉错误的数据库名称,而是显示 Permission denied 错误。

因此,请确保在任何地方更改数据库名称或仅删除目录属性

于 2014-07-15T12:07:52.713 回答
1

免责声明

  • 先备份。
  • 在执行之前检查您的查询语句。
  • 确保在更新之前添加了WHERE(filter) 子句。

如果您有 root 访问权限或足够的权限,您可以直接执行以下操作:

以 root 身份登录您的 MySQL,

$ mysql -u root -p

显示数据库;

mysql>SHOW DATABASES;

选择 MySQL 数据库,这是所有权限信息所在的位置

mysql>USE mysql;

显示表格。

mysql>SHOW TABLES;

关于您的案例的权限表是“db”,所以让我们看看它有哪些列:

mysql>DESC db;

要列出用户的权限,请键入以下命令,例如:

mysql>SELECT user, host, db, Select_priv, Insert_priv, Update_priv, Delete_priv FROM db ORDER BY user, db;

如果您找不到该用户,或者您看到该用户在 Select_priv 列中有一个“N”,那么您必须相应地插入或更新:

插入:

INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv) VALUES ('localhost','DBname','UserName','Y' ,'N','N','N');

更新:

UPDATE db SET Select_priv = 'Y' WHERE User = 'UserName' AND Db = 'DBname' AND Host='localhost';

最后,键入以下命令:

mysql>FLUSH PRIVILEGES;

再见。

于 2017-11-08T16:40:26.310 回答
1

升级到 MySQL 工作台最新版本 8.0.18 后,我的问题得到了修复

于 2019-10-18T16:56:30.303 回答
0

我有同样的问题。我对此感到非常沮丧。也许这不是在回答问题,但我只是想分享我的错误经验,可能还有其他人和我一样受苦。显然这只是我的低准确性。

我有这个:

SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
    SELECT username,email FROM t_un
) a
ON t_comment.username,a.email

应该是这样的:

SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
    SELECT username,email FROM t_un
) a
ON t_comment.username=a.username

然后那天我的问题就解决了,就为了这个问题,我苦苦挣扎了两个小时。

于 2015-11-10T17:02:53.040 回答
0

再次尝试授予权限。

GRANT ALL PRIVILEGES ON the_database.* TO 'the_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
于 2020-12-16T22:06:00.790 回答
0

I am sure this has been resolved, just want to point out I had a typo in the database name and it was still throwing this error on the table name. So you might want to check for typos in this case.

于 2021-06-02T02:49:39.000 回答
-1

与我错过的其他答案类似,我输入了查询。

我有——

SELECT t.id FROM t.table LEFT JOIN table2 AS t2 ON t.id = t2.table_id

本来应该

SELECT t.id FROM table AS t LEFT JOIN table2 AS t2 ON t.id = t2.table_id

Mysql 试图找到一个用户没有权限的名为 t 的数据库。

于 2014-06-19T12:32:39.670 回答