私のウェブサイトでは、MySQLデータベースを使用しています。私はすべてのデータベース関連の操作を行うWebサービスを使用しています。
そのWebサービスのメソッドの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」テーブルが存在しないことを通知する代わりに、エラーメッセージは、コマンドが拒否されたことを示します。
これが誰かを助けることを願っています。
テーブル ''のユーザー '' @ ''に対して選択コマンドが拒否されました
この問題は、基本的に、結合条件が結合クエリで誤ったデータベース名になった後に生成されます。したがって、データベースの後に結合テーブル名で選択クエリを確認してください。
次に、たとえば正しいアンサーウェアを解決します
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ユーザーに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
MacでSequel Proを使用してデータベースをエクスポートすると、まったく同じエラーメッセージが表示されました。私はrootユーザーだったので、許可ではないことを知っていました。次に、mysqldumpで試して別のエラーメッセージが表示されました:Got error:1449:The user specified specified as definer( 'joey'@'127.0.0.1')does not exist when using LOCK TABLES
ああ、私はこのデータベースを開発サイトのバックアップから復元しましたが、このマシンではそのユーザーを作成していませんでした。 「。を「joeypass」で識別される「joey」@「127.0.0.1」にすべて許可する」;トリックを行いました。
hth
あなたがWindowsフォームアプリケーションから作業している場合、これは私のために働いた "server = localhost; user id = dbuser; password = password; database = dbname; Use Procedure Bodies = false;"
接続文字列の最後に「Use Procedure Bodies = false」を追加するだけです。
問題は最も可能性が高いです。および_。私のクエリで言う
SELECT ..... FROM LOCATION.PT
の代わりに
SELECT ..... FROM LOCATION_PT
したがって、MySQLはLOCATIONをデータベース名と見なし、アクセス権限エラーを与えていたと思います。
同じ問題がありました。これは休止状態に関連しています。 hibernate.cfg.xmlでデータベースをdevから本番に変更しましたが、他のhbm.xmlファイルに古いデータベース名のカタログ属性があり、問題を引き起こしていました。
誤ったデータベース名を伝える代わりに、Permission deniedエラーを示しました。
そのため、必ずデータベース名をすべての場所で変更するか、カタログ属性を削除してください。
同じ問題がありました。とてもイライラしていました。たぶん、これは質問に答えているわけではないかもしれませんが、私は自分のエラー体験を共有したいだけです。明らかにそれは私の低精度でした。
私はこれを持っていました:
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データベースには、すべての権限情報があります
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または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';
最後に、次のコマンドを入力します。
mysql>FLUSH PRIVILEGES;
チャオ。