错误:选择命令拒绝用户''@' for Table''
-
16-10-2019 - |
题
在我的网站上,我使用MySQL数据库。我正在使用一个网络服务,其中我在其中进行所有与数据库相关的操作。
现在,在该Web服务的一种方法中,我会收到以下错误。
选择命令拒绝用户''@''for Table'
怎么了?
以下是我获得该错误的代码。我尝试调试,发现它在线失败
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();
解决方案
数据库用户无权选择查询。
如果您可以访问MySQL,则可以授予用户的权限
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 + "'";
与您连接的用户无权从此数据库或此特定表访问数据。
你考虑过这个东西吗?
其他提示
我敢肯定,原始海报的问题已经解决了。但是,我也遇到了同样的问题,所以我想我会解释什么原因是我造成这个问题的原因。
我正在用两个桌子进行工会查询 -“ foo”和“ foo_bar”。但是,在我的SQL语句中,我有一个错别字:'foo.bar'
因此,该错误消息没有告诉我“ foo.bar”表不存在,而是表明命令被拒绝 - 好像我没有权限。
希望这对某人有帮助。
选择命令拒绝用户''@''for Table'
此问题是在联接条件之后基本生成的是您的联接查询中的数据库名称错误。因此,请在数据库之后查看JOIN表名中的选择查询。
然后解决它的正确ANS Ware
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' ) ";
联接表是 imputable
和 applyleave
在同一数据库中,但在线数据库名称是不同的,然后在此问题上给出了错误。
这个问题发生在我身上,因为我有 hibernate.default_schema
将与数据源中的数据库设置为不同的数据库。
严格对我的MySQL用户权限,当Hibernate试图查询表格时,它将其查询 hibernate.default_schema
用户没有权限的数据库。
不幸的是,MySQL在此错误消息中未正确指定数据库,因为这将立即清除。
我通过Mac上的Sequel Pro进行数据库导出完全相同的错误消息。我是根用户,所以我知道这不是权限。然后,我使用mySqlDump尝试了一下,并收到了另一个错误消息: 发生错误:1449:使用锁定表时,用户指定为定义器('joey'@'127.0.0.1')不存在
啊,我已经从开发站点上的备份恢复了此数据库,但我没有在该计算机上创建该用户。 “全部授予 . 至'joey'@'127.0.0.1'由'joeypass'确定; “做到了。
Hth
如果您是从Windows表单应用程序工作的,则对我有用“ server = localhost; user id = dbuser; password = password; database = dbname; use procedion bodies = false;''
只需在Conection字符串末尾添加“使用过程= false”即可。
问题很可能在a之间。和一个_。在我的查询中说我说
从位置选择.....
代替
选择.....
因此,我认为MySQL会将位置视为数据库名称,并给出访问权限错误。
我有同样的问题。这与冬眠有关。我将数据库从Hibernate.cfg.xml中的DEV更改为生产,但是其他HBM.XML文件中有旧数据库名称中的目录属性,这引起了问题。
它没有说明错误的数据库名称,而是显示了权限拒绝错误。
因此,请确保在任何地方更改数据库名称,或仅删除目录属性
我有同样的问题。我对此感到非常沮丧。也许这不是回答这个问题,但我只想分享我的错误经历,还有其他人像我一样受苦。显然,这只是我的低准确性。
我有这个:
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
然后我的问题在那天解决了,我在两个小时内就为这个问题而苦苦挣扎。
聚会晚了一点,但是,如果您有root访问权限,则可以直接执行以下操作:
登录您的MySQL作为root,
$ 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;
再见。
与我错过的其他答案相似,键入了查询。
我有 -
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的数据库,用户没有权限。