Question

Dans mon site, j'utilise la base de données MySQL. J'utilise un webservice où je fais dans toutes les manipulations liées ma base de données.

Dans l'une des méthodes de cette webservice, je reçois l'erreur suivante.

  

sélectionnez la commande refusée à l'utilisateur '' @ '' pour la table ''

Qu'est-ce qui pourrait être erroné?

Voici le code où je reçois cette erreur. J'ai essayé le débogage et trouvé qu'il échoue à la ligne

MySqlDataReader result1 = command1.ExecuteReader();

Voici mon 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();
Était-ce utile?

La solution

utilisateur de base de données n'a pas l'autorisation de faire requête de sélection.

vous pouvez accorder l'autorisation à l'utilisateur si vous avez un accès root à MySQL

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

Votre deuxième requête est sur autre base de données sur la table différente.

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

Et l'utilisateur que vous connectez avec ne pas l'autorisation d'accéder aux données de cette base de données ou ce tableau particulier.

Avez-vous considérez cette chose?

Autres conseils

Je suis sûr que la question de l'affiche originale a depuis longtemps été résolu. Cependant, j'ai eu cette même question, donc je pensais que j'expliquer ce qui cause ce problème pour moi.

Je faisais une requête union avec deux tables - 'foo' et 'foo_bar'. Cependant, dans mon instruction SQL, j'ai eu une faute de frappe: 'foo.bar'

Alors, au lieu de me dire que la table « foo.bar » n'existe pas, le message d'erreur indique que la commande a été refusée -. Comme si je ne dispose pas des autorisations

Espérons que cela aide quelqu'un.

  

sélectionnez la commande refusée à l'utilisateur '' @ '' pour la table ''

Ce problème est essentiellement généré après condition de jointure sont le nom de base de données mal dans votre requête de jointure. Alors, s'il vous plaît vérifier la requête de sélection à joindre le nom de table après la base de données.

Ensuite, résoudre par exemple ses bonnes ans articles

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

La table de jointure est imputable et applyleave sur la même base de données, mais le nom de la base de données en ligne est diffrent alors donné erreur sur ce problème.

Ce problème est arrivé à moi parce que j'avais l'ensemble de hibernate.default_schema à une base de données différente de celle dans le DataSource.

Etre strict sur mes autorisations mysql utilisateur, lorsqu'Hibernate essayé d'interroger une table, il interroge une base de données dans la hibernate.default_schema pour laquelle l'utilisateur avait aucune autorisation.

Son malheureux que MySQL ne spécifie pas correctement la base de données dans ce message d'erreur, car cela aurait éclairci les choses tout de suite.

J'ai eu exactement le même message d'erreur faisant une exportation de base de données via Sequel Pro sur un Mac. J'étais l'utilisateur root, donc je savais qu'il était pas des autorisations. Puis je l'ai essayé avec mysqldump et a obtenu un message d'erreur différent:   Got erreur: 1449: L'utilisateur spécifié comme un définisseur ( 'joey'@'127.0.0.1') n'existe pas pour l'utilisation de LOCK TABLES

Ahh, j'avais restauré cette base de données à partir d'une sauvegarde sur le site dev et je n'avais pas créé cet utilisateur sur cette machine. "Accorder tous sur 'joey'@'127.0.0.1' identifiés par 'joeypass.'." A fait l'affaire

HTH

si vous travaillez à partir d'une application Windows de formulaires cela a fonctionné pour moi "Server = localhost; id = utilisateur dbuser; password = mot de passe; base de données = dbname; utilisation Bodies procédure = false;"

il suffit d'ajouter l'option "Utiliser Bodies Procédure = false" à la fin de votre chaîne de conection.

Le problème est très probablement entre un. et _. Dis à ma requête je mets

SELECT ..... DE LOCATION.PT

au lieu de

SELECT ..... DE LOCATION_PT

Je pense donc que MySQL penserait emplacement en tant que nom de base de données et fournissais erreur de privilège d'accès.

J'ai eu le même problème. Ceci est lié à mise en veille prolongée. J'ai changé la base de données de dev à la production dans hibernate.cfg.xml mais il y avait attribut catalogue dans d'autres fichiers hbm.xml avec l'ancien nom de la base de données et il a été l'origine du problème.

Au lieu de dire le nom de la base de données incorrecte, il a montré erreur de permission refusée.

Alors assurez-vous de changer le nom de la base de données partout ou simplement supprimer l'attribut catalogue

J'ai eu le même problème. J'ai été très frustrant avec elle. Peut-être cela ne répond pas à la question, mais je veux juste partager mon expérience d'erreur, et il peut y avoir d'autres qui ont souffert comme moi. De toute évidence, il était mon faible précision.

J'ai eu ceci:

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

qui est censé ressembler à ceci:

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

Alors mon problème a été résolu ce jour-là, je l'avais été lutté en deux heures, juste pour cette question.

Un peu tard pour le parti, mais, si vous avez un accès root, vous pouvez faire ce qui suit directement:

Connectez-vous à votre mysql en tant que root,

$ mysql -u root -p

Voir les bases de données;

mysql>SHOW DATABASES;

Sélectionnez la base de données MySQL, qui est l'endroit où toutes les informations de privilèges est situé

mysql>USE mysql;

Voir tableaux.

mysql>SHOW TABLES;

Le tableau concernant les privilèges pour votre cas est « db », donc nous allons voir quelles colonnes il a:

mysql>DESC db;

Pour lister les privilèges des utilisateurs, tapez la commande suivante, par exemple:

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

Si vous ne trouvez pas que l'utilisateur ou si vous voyez que l'utilisateur dispose d'un « N » dans la colonne Select_priv, alors vous devez soit INSERT ou UPDATE en conséquence:

INSERT:

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

Mise à jour:

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

Enfin, tapez la commande suivante:

mysql>FLUSH PRIVILEGES;

Ciao.

Comme dans d'autres réponses que j'avais tapé miss la requête.

a -

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

Aurait été

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

Mysql a essayé de trouver une base de données appelée t que l'utilisateur n'a pas l'autorisation pour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top