エラー:ユーザーに拒否されたコマンドを選択します ''@'' for table ''
-
16-10-2019 - |
質問
私のウェブサイトでは、MySQLデータベースを使用しています。私は、すべてのデータベース関連の操作を行うWebサービスを使用しています。
そのWebServiceの方法の1つで、次のエラーが発生します。
ユーザーに拒否されたコマンドを選択します ''@''テーブル ''
何が間違っているのでしょうか?
以下は、そのエラーが発生するコードです。私はデバッグを試みましたが、それがラインで失敗することがわかりました
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
2番目のクエリは、異なるテーブル上の異なるデータベース上にあります。
String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";
また、接続しているユーザーには、このデータベースまたはこの特定のテーブルからデータにアクセスする許可がありません。
このことを考えましたか?
他のヒント
元のポスターの問題は長い間解決されてきたと確信しています。しかし、私はこれと同じ問題を抱えていたので、私にとってこの問題を引き起こしているものを説明すると思いました。
「Foo」と「Foo_Bar」という2つのテーブルでユニオンクエリを行っていました。しかし、私のSQLステートメントでは、タイプミスがありました:「foo.bar」
したがって、「foo.bar」テーブルが存在しないと言う代わりに、エラーメッセージはコマンドが拒否されたことを示します - まるで許可がないかのように。
これが誰かを助けることを願っています。
ユーザーに拒否されたコマンドを選択します ''@''テーブル ''
この問題は、参加条件が誤ったデータベース名である後に生成される基本的に生成されます。したがって、データベースの後に参加するテーブル名の選択クエリを確認してください。
次に、たとえばその正しいANSウェアなどを解決します
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
DataSourceのデータベースとは異なるデータベースに設定します。
私のmySQLユーザーの許可を厳しくすることで、hibernateがテーブルを照会しようとしたとき、 hibernate.default_schema
ユーザーに権限がなかったデータベース。
MySQLがこのエラーメッセージでデータベースを正しく指定していないことは残念です。
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
Macの続編Proを介してデータベースエクスポートを行うのとまったく同じエラーメッセージがありました。私はルートユーザーだったので、許可ではないことはわかっていました。その後、MySqldumpで試してみて、別のエラーメッセージを受け取りました。 got error:1449:definer( 'joey'@'127.0.0.1')として指定されたユーザーは、ロックテーブルを使用するときは存在しません
ああ、私は開発サイトのバックアップからこのデータベースを復元しましたが、このマシンでそのユーザーを作成していませんでした。 「すべてを付与します . 'joeypass'によって識別された 'joey'@'127.0.0.1'へ。 「トリックをしました。
Hth
Windowsフォームのアプリケーションで作業している場合、これは私にとって機能しました。
Conection Stringの最後に「手順bodies = false」を追加するだけです。
問題はおそらくaの間にあります。そして_。私の質問で私が置いたと言ってください
select ..... from location.pt
それ以外の
select ..... from location_pt
そのため、MySQLは場所をデータベース名と考え、アクセス特権エラーを提供していたと思います。
同じ問題がありました。これは冬眠に関連しています。データベースを開発からhibernate.cfg.xmlの生産に変更しましたが、古いデータベース名を持つ他の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
それから私の問題はその日に解決されました、私はこの問題のために2時間で苦労しました。
パーティーに少し遅れていますが、ルートアクセスが必要な場合は、次のことを直接実行できます。
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_piv列に「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;
CIAO。
他の答えと同様に、私はクエリを入力したことを逃していました。
私が持っていた -
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というデータベースを見つけようとしていました。