web-dev-qa-db-fra.com

Erreur: la commande de sélection refusée à l'utilisateur '<id_utilisateur>' @ '<adresse-ip>' pour la table '<nom-table>'

Sur mon site Web, j'utilise une base de données MySQL. J'utilise un service Web où toutes les manipulations liées à la base de données sont effectuées.

Maintenant, dans l’une des méthodes de ce service Web, j’obtiens l’erreur suivante.

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

Quel pourrait être le problème?

Voici le code où je reçois cette erreur. J'ai essayé le débogage et j'ai constaté qu'il échouait à 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();
51
Parth Bhatt

utilisateur de base de données n'a pas l'autorisation de faire la 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/en/grant.html

Votre deuxième requête concerne une base de données différente sur une table différente.

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

Et l'utilisateur avec lequel vous vous connectez n'a pas l'autorisation d'accéder aux données de cette base de données ou de cette table particulière.

Avez-vous considéré cette chose?

24
Shakti Singh

Je suis sûr que le problème de l'affiche originale est résolu depuis longtemps. Cependant, j'avais le même problème et j'ai donc pensé expliquer ce qui me causait ce problème.

Je faisais une requête d'union avec deux tables - 'foo' et 'foo_bar'. Cependant, dans ma déclaration SQL, j'avais une faute de frappe: 'foo.bar'

Ainsi, 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 n'avais pas les autorisations.

J'espère que ça aide quelqu'un.

133
pisces22

Ce problème m'est arrivé parce que hibernate.default_schema était défini sur une base de données différente de celle de la source de données.

Etant strict sur mes autorisations utilisateur mysql, quand hibernate a essayé d’interroger une table, il a interrogé celle de la base de données hibernate.default_schema pour laquelle l’utilisateur ne disposait pas d’autorisations.

Il est regrettable que mysql ne spécifie pas correctement la base de données dans ce message d'erreur, car cela aurait tout clarifié.

6
muttonUp

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

Ce problème est essentiellement généré après que la condition de jointure soit un nom de base de données incorrect dans votre requête de jointure. Veuillez donc vérifier la requête sélectionnée dans le nom de la table de jointure après la base de données.

Puis résolvez-le, par exemple, son correct logiciel 

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 différent, puis une erreur est attribuée à ce problème.

4
Mukesh

Vous devez accorder des autorisations SELECT à l'utilisateur MySQL qui se connecte à MySQL. Voir:

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

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

3
gregjor

J'ai eu exactement le même message d'erreur lors d'une exportation de base de données via Sequel Pro sur un Mac. J'étais l'utilisateur root, donc je savais que ce n'était pas des autorisations. Ensuite, j'ai essayé avec mysqldump et j'ai reçu un message d'erreur différent: Erreur obtenue: 1449: l'utilisateur spécifié comme définisseur ('joey'@'127.0.0.1') n'existe pas lors de l'utilisation de LOCK TABLES

Ahh, j'avais restauré cette base de données à partir d'une sauvegarde sur le site de développement et je n'avais pas créé cet utilisateur sur cette machine. "accordez tout sur. à 'joey'@'127.0.0.1' identifié par 'joeypass';" a fait l'affaire.

hth

2
superaesomedad

si vous travaillez à partir d'une application Windows Forms, cela a fonctionné pour moi "server = localhost; id utilisateur = dbuser; mot de passe = base de données = nom_bdd; Utiliser des corps de procédure = false;"

ajoutez simplement "Use Procedure Bodies = false" à la fin de votre chaîne de connexion.

2
U. Busto

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

SÉLECTIONNEZ ..... DE LOCATION.PT 

au lieu de

SÉLECTIONNER ..... DE LOCATION_PT

Donc, je pense que MySQL penserait à LOCATION comme un nom de base de données et donnait une erreur de privilège d’accès.

1
Reza

J'ai eu le même problème. Ceci est lié à l'hibernation. J'ai changé la base de données de dev en production dans hibernate.cfg.xml, mais il y avait des attributs de catalogue dans d'autres fichiers hbm.xml avec l'ancien nom de la base de données et cela était à l'origine du problème. 

Au lieu d'indiquer un nom de base de données incorrect, il indiquait une erreur d'autorisation refusée.

Veillez donc à modifier le nom de la base de données partout ou simplement à supprimer l'attribut de catalogue.

1
deepika

J'ai eu le même problème. J'étais très frustrant avec ça. Peut-être que ceci ne répond pas à la question, mais je veux juste partager mon expérience d'erreur, et il se peut que d'autres personnes aient souffert comme moi. Évidemment, c'était juste ma 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é être comme ça:

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

Ensuite, mon problème a été résolu ce jour-là. J'avais eu du mal à résoudre ce problème en deux heures.

0
Juna serbaserbi

Un peu tard pour la fête, mais si vous avez un accès root, vous pouvez directement effectuer les opérations suivantes:

Connectez-vous à votre mysql en tant que root,

$ mysql -u root -p

Afficher les bases de données;

mysql>SHOW DATABASES;

Sélectionnez la base de données mysql, qui contient toutes les informations sur les privilèges.

mysql>USE mysql;

Afficher les tables.

mysql>SHOW TABLES;

Le tableau concernant les privilèges pour votre cas est 'db', voyons quelles sont ses colonnes:

mysql>DESC db;

Afin de 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 cet utilisateur ou si vous voyez qu'il a un 'N' dans la colonne Select_priv, vous devez alors soit INSERT, soit UPDATE:

INSÉRER:

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

METTRE À 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.

0
Pathros