Comment changer les privilèges pour l'utilisateur MySQL déjà créé?

69

Je comprends comment créer un nouvel utilisateur avec des privilèges, mais quelle est la bonne façon de changer les privilèges pour les utilisateurs déjà créés?

Nous effectuons un audit de base de données et certains utilisateurs ont bien plus d’accès que nécessaire. De plus, je ne connais pas les mots de passe de la plupart de ces utilisateurs MySQL, je ne souhaite donc pas les supprimer ni en créer de nouveaux.

Embrayage
la source

Réponses:

107

Pour lister les utilisateurs:

select user,host from mysql.user;

Pour afficher les privilèges:

show grants for 'user'@'host';

Pour changer les privilèges, d'abord révoquer. Tel que:

revoke all privileges on *.* from 'user'@'host';

Puis accordez les privilèges appropriés comme vous le souhaitez:

grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'user'@'host';

Enfin, rincer:

flush privileges;

La documentation MySQL est excellente:

https://dev.mysql.com/doc/refman/8.0/en/access-control.html

Warner
la source
3
Eh bien sans révocation, ce seront des privilèges dublicates;
Sergey
7
la documentation de mysql est presque illisible, cette réponse est bien meilleure
Timo Huovinen
Je pense que (révoquer tous les privilèges sur . De 'utilisateur' @ 'hôte';) devrait être (révoquer tout sur . À partir de 'utilisateur' @ 'hôte';) Merci,
Nicholas
1
cette réponse est tout simplement fausse. "privilèges de vidage" ne s'applique pas aux privilèges définis avec grant. le processus ci-dessus a pour résultat que l'utilisateur n'a aucun privilège du tout entre le moment où la requête de révocation et la requête d'octroi sont exécutées, et vide également le cache des subventions sans raison __ ceci fonctionnerait si vous exécutiez des requêtes régulières sur la table mysql.user utilisant des droits d’autorisation et si le serveur ne plante pas ou ne s’arrête pas entre les requêtes.
Skullnobrains