65

私のウェブサイトでは、MySQL データベースを使用しています。私はすべてのデータベース関連の操作を行う Web サービスを使用しています。

そのWebサービスのメソッドの1つで、次のエラーが発生します。

テーブル '<table-name>' のユーザー '<userid>'@'<ip-address>' に対する select コマンドが拒否されました

何が間違っている可能性がありますか?

以下は、そのエラーが発生するコードです。デバッグを試みたところ、次の行で失敗することがわかりました

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();
4

16 に答える 16

184

元のポスターの問題はずっと前に解決されたと確信しています。しかし、私はこれと同じ問題を抱えていたので、この問題の原因を説明したいと思いました.

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

そのため、'foo.bar' テーブルが存在しないことを伝える代わりに、エラー メッセージはコマンドが拒否されたことを示します。まるで私が権限を持っていないかのようです。

これが誰かに役立つことを願っています。

于 2011-04-14T19:29:58.717 に答える
32

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

mysql への root アクセス権を持っている場合は、ユーザーに許可を与えることができます

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

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

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

于 2011-01-22T09:18:22.897 に答える
10

テーブル '' のユーザー ''@'' に対して 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ますが、オンライン データベース名が異なり、この問題でエラーが発生します。

于 2016-01-31T07:24:32.627 に答える
9

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

私のmysqlユーザー権限に厳密であるため、休止状態がテーブルをクエリしようとしたときにhibernate.default_schema、ユーザーが権限を持っていないデータベース内のテーブルをクエリしました。

mysql がこのエラー メッセージでデータベースを正しく指定していないのは残念です。

于 2015-10-13T21:11:05.330 に答える
3

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

于 2011-01-22T09:17:18.357 に答える
3

Windowsフォームアプリケーションで作業している場合、これは私にとってはうまくいきました

"server=localhost; user id=dbuser; password=password; database=dbname; Use Procedure Bodies=false;"

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

于 2015-01-15T18:34:17.877 に答える
2

私の場合、誤って SQL クエリ内に自分のローカル データベース名を含めたため、デプロイ時にアクセス拒否の問題が発生しました。

SQL クエリからデータベース名を削除したところ、修正されました。

于 2020-05-10T10:04:27.990 に答える
1

問題はおそらく a の間です。と_. 私が入れた私のクエリで言ってください

選択 ..... LOCATION.PT から

それ以外の

選択 ..... LOCATION_PT から

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

于 2012-04-22T04:05:02.197 に答える
0

私も同じ問題を抱えていました。私はそれにとてもイライラしていました。これは質問への回答ではないかもしれませんが、エラーの経験を共有したいだけで、私のように苦しんでいる人が他にもいるかもしれません. どうやら私の精度が低かっただけのようです。

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

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

于 2015-11-10T17:02:53.040 に答える
-1

他の回答と同様に、クエリを入力し忘れました。

私が持っていた -

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 というデータベースを見つけようとしていました。

于 2014-06-19T12:32:39.670 に答える