Accorder des privilèges sans erreurs d'accès refusé
Lors de la tentative d'accorder des privilèges, les utilisateurs MySQL peuvent rencontrer l'erreur "Accès refusé pour l'utilisateur 'root' @'localhost' (en utilisant le mot de passe : OUI)." Cela peut être déroutant, car il peut sembler que l'utilisateur dispose des autorisations nécessaires.
Vérification des privilèges
Pour confirmer que l'utilisateur dispose des privilèges appropriés, exécutez les commandes suivantes :
SELECT user(); SELECT current_user(); SHOW GRANTS FOR 'root'@'localhost'; SELECT * FROM mysql.user WHERE User='root';
Ces commandes doivent vérifier que l'utilisateur est bien root@localhost et dispose des autorisations nécessaires, y compris :
Problème : octroi de privilèges sur des tables spécifiques
Malgré ces autorisations, une erreur peut se produire lors de la tentative d'accorder des privilèges sur des tables spécifiques :
GRANT ALL PRIVILEGES ON *.* TO 'steves'@'[hostname].com' IDENTIFIED BY '[OBSCURED]' WITH GRANT OPTION;
Cela est dû au fait que la table mysql.users est considérée comme interdite à tous les utilisateurs, sauf root.
Solution : accorder des privilèges sur toutes les bases de données
Pour contourner ce problème, utilisez la commande suivante, qui accorde des privilèges sur toutes les bases de données à l'exception de mysql.users :
GRANT ALL PRIVILEGES ON `%`.* TO '[user]'@'[hostname]' IDENTIFIED BY '[password]' WITH GRANT OPTION;
Utiliser %. au lieu de .* garantit que toutes les bases de données sont incluses à l'exception de la table mysql.users. Cela devrait réussir à accorder des privilèges sans déclencher l'erreur d'accès refusé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!