Erreur: commande de sélection refusée à l'utilisateur '' @ '' table ''
-
16-10-2019 - |
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();
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.
Vous devez accorder des autorisations SELECT à l'utilisateur MySQL qui se connecte à MySQL. Voir:
http://dev.mysql.com/doc/ refman / 5.0 / fr / secret system.html
http://dev.mysql.com/ doc / refman / 5.0 / fr / utilisateur compte-management.html
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.