Frage

Auf meiner Website verwende ich die MySQL -Datenbank. Ich benutze einen Webservice, bei dem ich alle meine Datenbank -bezogenen Manipulationen mache.

In einer der Methoden dieses Webservice erhalte ich den folgenden Fehler.

Wählen Sie den Befehl aus, der dem Benutzer verweigert wurde, ''@'' für Tabelle '' ''

Was könnte falsch sein?

Unten ist der Code, in dem ich diesen Fehler erhalte. Ich habe versucht Debugging und stellte fest, dass es an der Linie fehlschlägt

MySqlDataReader result1 = command1.ExecuteReader();

Hier ist mein Code:

        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();
War es hilfreich?

Lösung

Der Datenbankbenutzer verfügt nicht über die Berechtigung, Abfrage auszuwählen.

Sie können dem Benutzer die Erlaubnis erteilen, wenn Sie einen Root -Zugriff auf MySQL haben

http://dev.mysql.com/doc/refman/5.1/en/grant.html

Ihre zweite Abfrage befindet sich in verschiedenen Datenbank in verschiedenen Tabellen.

 String newSQL = "Select `Strike`,`LongShort`,`Current`,`TPLevel`,`SLLevel` from `json`.`tbl_Position` where `TradeID` = '" + i + "'";

Und der Benutzer, mit dem Sie eine Verbindung herstellen, verfügt nicht über die Berechtigung, aus dieser Datenbank oder dieser bestimmten Tabelle auf Daten zuzugreifen.

Hast du dieses Ding nachgedacht?

Andere Tipps

Ich bin sicher, dass das Problem des Originalplakers längst gelöst wurde. Ich hatte jedoch das gleiche Problem, also dachte ich, ich würde erklären, was dieses Problem für mich verursacht hat.

Ich habe eine Union -Frage mit zwei Tischen durchgeführt - 'Foo' und 'Foo_Bar'. In meiner SQL -Erklärung hatte ich jedoch einen Tippfehler: 'foo.bar'

Anstatt mir zu sagen, dass die Tabelle "foo.bar" nicht existiert, zeigt die Fehlermeldung an, dass der Befehl abgelehnt wurde - als ob ich keine Berechtigungen habe.

Hoffe das hilft jemandem.

Wählen Sie den Befehl aus, der dem Benutzer verweigert wurde, ''@'' für Tabelle '' ''

Dieses Problem ist eine grundsätzlich generierte Nach -Join -Bedingung in Ihrer Join -Abfrage. Überprüfen Sie also bitte den Namen Ihrer Abfrage in der Join -Tabelle nach der Datenbank.

Lösen Sie es dann zum Beispiel seine korrekte Ans -Ware

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

Die Join -Tabelle ist imputable und applyleave In derselben Datenbank, aber der Online -Datenbankname ist unterschiedlich bei diesem Problem bei einem Fehler.

Dieses Problem ist mir passiert, weil ich das hatte hibernate.default_schema Setzen Sie auf eine andere Datenbank als in der Datenquelle.

Ich war streng auf meine MySQL -Benutzerberechtigungen, als Hibernate versuchte, eine Tabelle abzufragen hibernate.default_schema Datenbank, für die der Benutzer keine Berechtigungen hatte.

Es ist unglücklich, dass MySQL die Datenbank in dieser Fehlermeldung nicht korrekt angibt, da dies die Dinge sofort gelöscht hätte.

Sie müssen dem MySQL -Benutzer, der eine Verbindung zu MySQL herstellt, ausgewählte Berechtigungen erteilen. Sehen:

http://dev.mysql.com/doc/refman/5.0/en/privilege-system.html

http://dev.mysql.com/doc/refman/5.0/en/user-count-management.html

Ich hatte genau die gleiche Fehlermeldung mit einem Datenbankexport über Sequel Pro auf einem Mac. Ich war der Root -Nutzer, also wusste ich, dass es keine Berechtigungen war. Dann habe ich es mit MySQldump versucht und eine andere Fehlermeldung erhalten: Erhielt Fehler: 1449: Der als Definition angegebene Benutzer ('joey'@'127.0.0.1') existiert bei Verwendung von Sperrtabellen nicht

Ahh, ich hatte diese Datenbank von einem Backup auf der Dev -Site wiederhergestellt und diesen Benutzer auf diesem Computer nicht erstellt. "Gewähren Sie alles auf . an 'joey'@''127.0.0.1' identifiziert von 'Joeypass'; "Hat der Trick gemacht.

HTH

Wenn Sie aus einer Windows -Formulare arbeiten, hat dies für mich funktioniert "Server = localhost; Benutzer -ID = DBUSER; Passwort = Passwort; Datenbank = dbname; Verwenden von Prozedurbörsen = false;"

Fügen Sie einfach die "Verwenden von Verfahrenskörpern = False" am Ende Ihrer Konektionszeichenfolge hinzu.

Das Problem liegt höchstwahrscheinlich zwischen a. und ein _. Sag in meiner Frage, dass ich ich stelle

Wählen Sie ..... vom Ort.pt.pt

Anstatt von

Wählen Sie ..... von location_pt

Ich denke also, MySQL würde Ort als Datenbankname denken und gab Zugriffsrechtsfehler.

Ich hatte das gleiche Problem. Dies hängt mit dem Hibernate zusammen. Ich habe die Datenbank von Dev zu Produktion in hibernate.cfg.xml geändert, aber es gab ein Katalog -Attribut in anderen HBM.xml -Dateien mit dem alten Datenbanknamen, und es verursachte das Problem.

Anstatt einen falschen Datenbanknamen zu erzählen, zeigte er die Erlaubnis ab, einen Fehler abgelehnt zu haben.

Stellen Sie also sicher, dass Sie den Datenbanknamen überall ändern oder einfach das Katalogattribut entfernen

Ich hatte das gleiche Problem. Ich war sehr frustrierend damit. Vielleicht beantwortet dies die Frage nicht, aber ich möchte nur meine Fehlererfahrung teilen, und es gibt möglicherweise andere, die wie ich gelitten haben. Offensichtlich war es nur meine geringe Genauigkeit.

Ich hatte das:

SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
    SELECT username,email FROM t_un
) a
ON t_comment.username,a.email

Welches soll so sein:

SELECT t_comment.username,a.email FROM t_comment
LEFT JOIN (
    SELECT username,email FROM t_un
) a
ON t_comment.username=a.username

Dann wurde mein Problem an diesem Tag gelöst. Ich hatte in zwei Stunden nur wegen dieses Problems zu kämpfen.

Etwas zu spät zur Party, aber wenn Sie einen Root -Zugriff haben, können Sie die folgenden direkten machen:

Melden Sie sich in Ihrem MySQL als root an,

$ mysql -u root -p

Datenbanken anzeigen;

mysql>SHOW DATABASES;

Wählen Sie die MySQL -Datenbank aus, wo sich alle Berechtigungsinformationen befinden

mysql>USE mysql;

Tische anzeigen.

mysql>SHOW TABLES;

Die Tabelle zu den Berechtigungen für Ihren Fall lautet "DB". Lassen Sie uns also sehen, welche Spalten es hat:

mysql>DESC db;

Um die Berechtigungen der Benutzer aufzulisten, geben Sie den folgenden Befehl ein, zum Beispiel:

mysql>SELECT user, host, db, Select_priv, Insert_priv, Update_priv, Delete_priv FROM db ORDER BY user, db;

Wenn Sie diesen Benutzer nicht finden oder dass Sie sehen, dass dieser Benutzer in der Spalte Select_priv ein 'n' hat, müssen Sie entsprechend einfügen oder aktualisieren:

EINFÜGUNG:

INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv) VALUES ('localhost','DBname','UserName','Y' ,'N','N','N');

AKTUALISIEREN:

UPDATE db SET Select_priv = 'Y' WHERE User = 'UserName' AND Db = 'DBname' AND Host='localhost';

Geben Sie schließlich den folgenden Befehl ein:

mysql>FLUSH PRIVILEGES;

Ciao.

Ähnlich wie bei anderen Antworten hatte ich die Abfrage geschrieben.

Ich hatte -

SELECT t.id FROM t.table LEFT JOIN table2 AS t2 ON t.id = t2.table_id

Gewesen sein sollte

SELECT t.id FROM table AS t LEFT JOIN table2 AS t2 ON t.id = t2.table_id

MySQL versuchte, eine Datenbank mit dem Namen T zu finden, für die der Benutzer keine Erlaubnis hatte.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top