web-dev-qa-db-ja.com

エラー:テーブル '<テーブル名>'のユーザー '<ユーザーID>' @ '<IPアドレス>'に対して選択コマンドが拒否されました

私のウェブサイトでは、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();
55
Parth Bhatt

データベースユーザーには、選択クエリを実行する権限がありません。

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

また、接続しているユーザーには、このデータベースまたはこの特定のテーブルのデータにアクセスする権限がありません。

このことを考慮しましたか?

29
Shakti Singh

元のポスターの問題は長い間解決されたと確信しています。しかし、私はこれと同じ問題を抱えていたので、この問題を引き起こしている原因を説明したいと思いました。

「foo」と「foo_bar」という2つのテーブルでユニオンクエリを実行していました。しかし、私のSQLステートメントには、「foo.bar」というタイプミスがありました。

そのため、「foo.bar」テーブルが存在しないことを通知する代わりに、エラーメッセージは、コマンドが拒否されたことを示します。

これが誰かを助けることを願っています。

143
pisces22

テーブル ''のユーザー '' @ ''に対して選択コマンドが拒否されました

この問題は、基本的に、結合条件が結合クエリで誤ったデータベース名になった後に生成されます。したがって、データベースの後に結合テーブル名で選択クエリを確認してください。

次に、たとえば正しいアンサーウェアを解決します

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ですが、オンラインデータベース名が異なるため、この問題に関するエラーが発生します。

7
Mukesh kumar

hibernate.default_schemaがDataSource内のデータベースとは異なるデータベースに設定されていたため、この問題が発生しました。

Mysqlのユーザー権限に厳しいため、hibernateがテーブルにクエリを実行しようとしたときに、ユーザーが権限を持たないhibernate.default_schemaデータベース内のテーブルを照会しました。

残念なことに、mysqlはこのエラーメッセージでデータベースを正しく指定していません。すぐに問題を解決できるからです。

6
muttonUp

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

3
gregjor

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

2
superaesomedad

あなたがWindowsフォームアプリケーションから作業している場合、これは私のために働いた "server = localhost; user id = dbuser; password = password; database = dbname; Use Procedure Bodies = false;"

接続文字列の最後に「Use Procedure Bodies = false」を追加するだけです。

2
U. Busto

問題は最も可能性が高いです。および_。私のクエリで言う

SELECT ..... FROM LOCATION.PT

の代わりに

SELECT ..... FROM LOCATION_PT

したがって、MySQLはLOCATIONをデータベース名と見なし、アクセス権限エラーを与えていたと思います。

1
Reza

同じ問題がありました。これは休止状態に関連しています。 hibernate.cfg.xmlでデータベースをdevから本番に変更しましたが、他のhbm.xmlファイルに古いデータベース名のカタログ属性があり、問題を引き起こしていました。

誤ったデータベース名を伝える代わりに、Permission deniedエラーを示しました。

そのため、必ずデータベース名をすべての場所で変更するか、カタログ属性を削除してください。

1
deepika

同じ問題がありました。とてもイライラしていました。たぶん、これは質問に答えているわけではないかもしれませんが、私は自分のエラー体験を共有したいだけです。明らかにそれは私の低精度でした。

私はこれを持っていました:

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時間で苦労しました。

0
Juna serbaserbi

パーティーに少し遅れましたが、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;

チャオ。

0
Pathros