错误:为表'<table-name>'select命令被拒绝给用户'<userid>'@'<ip-address>'
在我的网站上,我正在使用MySQL数据库。 我正在使用一个web服务在我做我所有的数据库相关的操作。
现在在这个web服务的方法之一,我得到以下错误。
select拒绝给用户“@”的命令
什么可能是错的?
下面是我得到这个错误的代码。 我尝试debugging,发现它在线路上失败
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();
数据库用户没有权限做select查询。
你可以授予用户权限,如果你有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 + "'";
而您所连接的用户没有权限访问此数据库或此特定表中的数据。
你有没有考虑这件事?
我相信原来的海报问题早已解决了。 不过,我也有同样的问题,所以我想我会解释是什么原因造成了我的这个问题。
我正在做两个表 – “foo”和“foo_bar”的联合查询。 但是,在我的SQL语句中,我有一个错字:'foo.bar'
因此,不是告诉我'foo.bar'表不存在,错误消息表明该命令被拒绝 – 就好像我没有权限。
希望这有助于某人。
这个问题发生在我身上,因为我将hibernate.default_schema
设置为与DataSource中不同的数据库。
严格的我的mysql用户权限,当hibernate试图查询一个表时,它查询用户没有权限的hibernate.default_schema
数据库中的一个。
不幸的是,在这个错误消息中,mysql没有正确地指定数据库,因为这样会马上清除所有的事情。
select拒绝给用户“@”的命令
这个问题基本上是在连接条件在连接查询中是错误的数据库名称生成的。 因此,请在数据库之后检查连接表名称中的select查询。
然后解决它,例如它的正确答案
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
,并applyleave
在同一个数据库上,但是在线数据库名称applyleave
,那么在这个问题上给出错误。
您需要将SELECT权限授予连接到MySQL的MySQL用户。 看到:
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
如果你正在从Windows窗体应用程序工作,这对我“服务器=本地主机;用户ID = dbuser;密码=密码;数据库=数据库名称;使用过程体= false;”
只需在连接string的末尾添加“Use Procedure Bodies = false”即可。
问题很可能是一个。 和一个_。 在我的查询中说,我把
select…..从LOCATION.PT
代替
select…..从LOCATION_PT
所以我觉得MySQL会认为LOCATION是一个数据库名称,并给予访问权限错误。
我有同样的问题。 这与hibernate有关。 我在hibernate.cfg.xml中将开发数据库从dev更改为生产,但其他hbm.xml文件中存在具有旧数据库名称的目录属性,并导致该问题。
它没有告诉错误的数据库名称,而是显示权限被拒绝的错误。
因此,请确保无处不在更改数据库名称,或只删除目录属性
我有一个完全相同的错误消息,通过Mac上的Sequel Pro进行数据库导出。 我是root用户,所以我知道这不是权限。 然后我用mysqldump试了一下,得到了一个不同的错误信息: 出现错误:1449:用户指定为定义者('joey'@127.0.0.1')在使用LOCK TABLES时不存在
啊,我已经从dev站点上的备份中恢复了这个数据库,并且我没有在这台机器上创build这个用户。 “全部授予'joey'@127.0.0.1''joeypass'所确定的”“。
心连心
我有同样的问题。 我非常沮丧。 也许这不是回答这个问题,但我只是想分享我的错误经验,也可能有其他人像我一样遭受苦难。 显然这只是我的低准确性。
我有这个:
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权限,你可以直接进行以下操作:
以root身份login到你的mysql,
$ mysql -u root -p
显示数据库;
mysql>SHOW DATABASES;
selectmysql数据库,这是所有权限信息所在的位置
mysql>USE mysql;
显示表格。
mysql>SHOW TABLES;
关于您的案件特权的表是'db',所以让我们看看它有什么列:
mysql>DESC db;
要列出用户权限,请input以下命令,例如:
mysql>SELECT user, host, db, Select_priv, Insert_priv, Update_priv, Delete_priv FROM db ORDER BY user, db;
如果您找不到该用户,或者如果您看到该用户在Select_priv列中有“N”,则必须相应地执行INSERT或UPDATE:
插:
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';
最后,input以下命令:
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试图find一个用户没有权限的名为t的数据库。