webentwicklung-frage-antwort-db.com.de

Fehler: Auswahlbefehl an Benutzer '<Benutzer-ID>' @ '<IP-Adresse>' für Tabelle '<Tabellenname>' verweigert

Auf meiner Website verwende ich eine MySQL-Datenbank. Ich benutze einen Webservice, in dem ich alle meine datenbankbezogenen Manipulationen durchführe.

Bei einer der Methoden dieses Webservices wird der folgende Fehler angezeigt.

befehl select an Benutzer '' @ '' für Tabelle '' verweigert

Was könnte falsch sein?

Unten ist der Code, wo ich diesen Fehler erhalte. Ich habe versucht zu debuggen und festgestellt, dass es an der Leitung 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();
51
Parth Bhatt

datenbankbenutzer haben keine Berechtigung zum Auswählen der Abfrage.

sie können dem Benutzer die Berechtigung erteilen, wenn Sie über root-Zugriff auf mysql verfügen

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

Ihre zweite Abfrage befindet sich in einer anderen Datenbank in einer anderen Tabelle.

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

Der Benutzer, mit dem Sie sich verbinden, hat keine Berechtigung, auf Daten aus dieser Datenbank oder dieser bestimmten Tabelle zuzugreifen.

Hast du das überlegt?

24
Shakti Singh

Ich bin sicher, dass das Problem des ursprünglichen Posters längst behoben ist. Ich hatte jedoch das gleiche Problem, also dachte ich, ich würde erklären, was dieses Problem für mich verursacht.

Ich führte eine Unionsabfrage mit zwei Tabellen durch - 'foo' und 'foo_bar'. In meiner SQL-Anweisung hatte ich jedoch einen Tippfehler: 'foo.bar'

Statt mir mitzuteilen, dass die Tabelle 'foo.bar' nicht existiert, zeigt die Fehlermeldung an, dass der Befehl abgelehnt wurde - als hätte ich keine Berechtigungen.

Hoffe das hilft jemandem.

133
pisces22

Dieses Problem ist mir passiert, weil ich hibernate.default_schema auf eine andere Datenbank als die DataSource gesetzt hatte.

Da meine Benutzerberechtigungen für mysql streng sind, wurde beim Abfragen des Ruhezustands in einer Tabelle die Tabelle in der Datenbank hibernate.default_schema abgefragt, für die der Benutzer keine Berechtigungen hatte.

Es ist bedauerlich, dass mysql die Datenbank in dieser Fehlermeldung nicht korrekt angibt, da dies die Dinge sofort geklärt hätte.

6
muttonUp

auswahlbefehl für Benutzer '' @ '' für Tabelle '' verweigert

Dieses Problem wird grundsätzlich generiert, nachdem die Join-Bedingung einen falschen Datenbanknamen in Ihrer Join-Abfrage hat. Überprüfen Sie daher Ihre Auswahlabfrage im Join-Tabellennamen nach der Datenbank.

Dann lösen Sie zum Beispiel die richtige Antwort 

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, der Name der Online-Datenbank ist jedoch anders und es wird ein Fehler in diesem Problem angezeigt.

4
Mukesh

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

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

http://dev.mysql.com/doc/refman/5.0/de/user-account-management.html

3
gregjor

Ich hatte genau die gleiche Fehlermeldung beim Datenbankexport über Sequel Pro auf einem Mac. Ich war der Root-Benutzer, also wusste ich, dass es keine Berechtigungen waren. Dann habe ich es mit mysqldump ausprobiert und eine andere Fehlermeldung erhalten: Got Fehler: 1449: Der als Definierer angegebene Benutzer ('joey'@'127.0.0.1') ist nicht vorhanden, wenn LOCK TABLES verwendet wird

Ahh, ich hatte diese Datenbank aus einem Backup auf der Dev-Site wiederhergestellt und diesen Benutzer nicht auf diesem Rechner erstellt. "Alles auf. an 'joey'@'127.0.0.1' vergeben, das durch" JoePass "identifiziert wurde;" tat den Trick.

hth

2
superaesomedad

wenn Sie mit einer Windows Forms-Anwendung arbeiten, hat dies für mich funktioniert

fügen Sie einfach "Use Procedure Bodies = false" am Ende Ihrer Verbindungszeichenfolge ein.

2
U. Busto

Das Problem liegt höchstwahrscheinlich zwischen einem. und ein _. Sprich in meine Frage, die ich stelle

WÄHLEN SIE ..... AUS STANDORT.PT 

anstatt

SELECT ..... FROM LOCATION_PT

Ich denke also, MySQL würde LOCATION als Datenbanknamen betrachten und gab Zugriffsfehler an.

1
Reza

Ich hatte das gleiche Problem. Dies hängt mit dem Winterschlaf zusammen. Ich habe die Datenbank in hibernate.cfg.xml von dev auf produktiv umgestellt, aber in anderen hbm.xml-Dateien gab es ein Katalogattribut mit dem alten Datenbanknamen, das das Problem verursachte. 

Statt den falschen Datenbanknamen anzugeben, wurde ein Fehler mit verweigerter Berechtigung angezeigt.

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

1
deepika

Ich hatte das gleiche Problem. Ich war sehr frustrierend. Vielleicht ist dies keine Antwort auf die Frage, aber ich möchte nur meine Fehlererfahrung teilen, und es gibt andere, die wie ich gelitten haben. Es war offensichtlich nur meine geringe Genauigkeit.

Ich hatte folgendes:

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

was 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 war mein Problem an diesem Tag gelöst, ich hatte in zwei Stunden nur für dieses Problem gekämpft.

0
Juna serbaserbi

Ein bisschen zu spät zur Party, aber wenn Sie Root-Zugriff haben, können Sie Folgendes direkt tun:

Melden Sie sich als root bei Ihrem MySQL an.

$ mysql -u root -p

Datenbanken anzeigen;

mysql>SHOW DATABASES;

Wählen Sie die MySQL-Datenbank aus, in der sich alle Privilegieninformationen befinden

mysql>USE mysql;

Tabellen anzeigen.

mysql>SHOW TABLES;

Die Tabelle mit den Privilegien für Ihren Fall lautet 'db'. Schauen wir uns also an, welche Spalten es hat:

mysql>DESC db;

Geben Sie beispielsweise den folgenden Befehl ein, um die Benutzerberechtigungen aufzulisten:

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 können oder wenn dieser Benutzer in der Spalte "Select_priv" ein "N" hat, müssen Sie entweder INSERT oder UPDATE eingeben:

EINFÜGEN:

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 zum Schluss den folgenden Befehl ein:

mysql>FLUSH PRIVILEGES;

Ciao.

0
Pathros