web-dev-qa-db-fra.com

la commande de mise à jour est refusée pour l'utilisateur

J'utilise ce site d'hébergement gratuit pour le développement et les tests.

Je ne pouvais pas utiliser une commande MySQL UPDATE pour modifier les valeurs de la base de données, même si l'utilisateur est censé être autorisé à utiliser toutes les commandes de cPanel.

Ensuite, j'ai testé la même chose avec un utilisateur par défaut, cela ne fonctionnera toujours pas. Cependant, cela fonctionne bien sur mon système.

L'erreur MySQL est

UPDATE command denied to user 'test'@'localhost' for table 'content'

D'autres commandes fonctionnent bien.

Pourquoi cela arrive-t-il? Et comment cela peut-il être empeché? Ou une solution pour cela?

Et je suis très sûr que les utilisateurs ont la permission d'utiliser la commande UPDATE car je peux utiliser phpMyAdmin avec le même utilisateur et modifier les champs MySQL.

Je ne comprends pas pourquoi certaines commandes MySQL de PHP sont refusées pour un utilisateur qui a reçu tous les privilèges et peut tout faire via phpMyAdmin. Étant donné que le script, phpMyAdmin et l'hôte SQL sont sur le même serveur.

23
pahnin

Je remercie sincèrement tous ceux qui ont essayé de répondre à cette question. J'ai trouvé le problème et la solution.

ma requête SQL est comme ça

UPDATE `dblayer`.`test` SET `title` = 'hello a' WHERE `test`.`id` =1;

que j'ai obtenu de phpmyadmin et cela fonctionne parfaitement sur mon système. Mais quand je travaille sur les serveurs ça ne marche pas et ça dit que la commande refusée peut être parce que

`dblayer`.`test`

J'essaie de sélectionner la table globalement (ou quelque chose comme ça, je ne suis pas sûr) mais si ma requête SQL est

UPDATE `test` SET `title` = 'hello a' WHERE `test`.`id` =1;

cela fonctionne aussi sur mon serveur.

35
pahnin

Comme tout le monde l'a dit, c'est un problème de permission. Je suis sûr que vous avez probablement vérifié, mais juste au cas où. Après vous être connecté à phpmyadmin, exécutez ce qui suit:

SELECT USER(); 

Cela devrait cracher "test" @ "localhost" comme indiqué dans tous les commentaires ci-dessus

Exécutez ensuite

SHOW GRANTS FOR  'test'@'localhost'

Cela devrait vous donner tous les privilèges pour cet utilisateur. Lorsque vous obtenez des résultats, sélectionnez "Options", Texte intégral et cliquez sur OK pour obtenir le texte intégral.

Assurez-vous que les autorisations dans la sortie ont quelque chose comme ça:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE ON `your_database`.* TO 'test'@'localhost'

Vous ne pourrez peut-être pas obtenir GRANT ALL sur certaines configurations d'hébergement, mais tant que vous obtenez INSERT, UPDATE, DELETE, vous devriez certainement pouvoir mettre à jour les données

7
Alexey Gerasimov

Votre utilisateur n'a pas les bonnes autorisations. Vous devez lui donner accès à la commande UPDATE, comme ceci:

GRANT UPDATE ON database.* TO test@'localhost' IDENTIFIED BY 'password';

Si vous utilisez un outil graphique pour gérer la base de données - par exemple PHPMyAdmin ou SQLYog, etc. - vous devriez également pouvoir utiliser ces outils pour activer ces autorisations.

5
user542603

J'ai eu le même problème, l'autorisation était correcte mais cela fonctionnait dans certains environnements et pas dans d'autres. J'utilisais un nom de table comme

schéma.TABLE_NAME.

Sans changer l'autorisation mais en utilisant simplement

nom_table

travaillé dans tous les environnements.

4
deleted

Parfois, c'est un problème sensible à la casse.

MySQL dit également que l'accès est refusé même si la table n'est pas disponible. Veuillez vous assurer que vous n'avez aucun problème sensible à la casse.

3
SG 86

UNE UPDATE command denied une erreur peut sur certains hébergeurs résulter de l'atteinte de la limite d'espace de la base de données MySQL.

2
Chris Trynkiewicz

l'erreur my sql est une commande UPDATE refusée à l'utilisateur 'test' @ 'localhost' pour la table 'content'

pourquoi cela arrive-t-il? Et comment l'empêcher? Ou une solution pour cela?

C'est ce qui se passe pour ce qu'il dit: l'utilisateur test n'a pas d'autorisations de mise à jour sur la table content. Quelque chose comme ça devrait accorder à l'utilisateur l'autorisation requise:

GRANT UPDATE ON database.content TO test@'localhost' IDENTIFIED BY 'password';

* le mot de passe ci-dessus est juste un espace réservé. Vous devez utiliser le vrai.

2
Icarus

Cette erreur s'est produite pour moi lorsque je créais des déclencheurs, qui comprenaient une clause de mise à jour, pour l'instance MySql distante (via JawsDB).

Au lieu de configurer, déclenchez ceci:

CREATE TRIGGER updateRecentDateFromProcGen After Insert On ``mq6swfzd39ygjejl``.``proceduregeneration`` For Each Row BEGIN UPDATE ``mq6swfzd39ygjejl``.``users`` SET mostRecentDateAllActivities = NEW.date WHERE NEW.userID = users.ID; END

Je l'ai installé comme ça

CREATE TRIGGER updateRecentDateFromProcGen After Insert On ``mq6swfzd39ygjejl``.``proceduregeneration`` For Each Row BEGIN UPDATE ``users`` SET mostRecentDateAllActivities = NEW.date WHERE NEW.userID = users.ID; END Fondamentalement, je viens de supprimer le nom de la base de données dans la ligne UPDATE et de laisser le nom de la table par lui-même.

Notez que partout où vous voyez le `` il ne devrait y avoir qu'un tilde et non deux. Si quelqu'un sait comment résoudre ce problème dans le balisage de débordement de pile, faites-le moi savoir!

0
DRoberts

Fournissez l'accès complet pour tester l'utilisateur avec ip en tant que localhost.Check la table utilisateur à partir de mysql db.

Connectez-vous en tant que root et entrez dans la base de données mysql, puis dans la table utilisateur.Vous trouverez les privilèges actuels de votre utilisateur de test.

0