95 votes

Modification des autorisations d'hôte pour les utilisateurs de MySQL

J'ai les autorisations suivantes pour un utilisateur/base de données

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+

Pour permettre un accès externe à la base de données, je dois changer localhost en % . Une façon de procéder est REVOKE toutes les permissions et le remettre en place. Le problème est qu'il y a un mot de passe que je ne connais pas, donc si je révoque l'autorisation, je ne peux pas la rétablir.

Y a-t-il un moyen de changer le nom d'hôte localhost a % (et inversement) sans révoquer l'autorisation elle-même ?

134voto

nickgrim Points 4236

Si vous avez accès à la mysql vous pouvez modifier directement les tables de subventions :

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';

...et un analogue UPDATE -pour le changer à nouveau.

Il se peut également que vous deviez apporter des modifications au mysql.db également :

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

et ensuite tirer la chasse d'eau pour appliquer les privilèges :

FLUSH PRIVILEGES;

32voto

CrazyRabbit Points 49

La meilleure option sur MySQL 8 serait :

RENAME USER 'username'@'oldhost' TO 'username'@'newhost';

Voir https://dev.mysql.com/doc/refman/8.0/en/rename-user.html

15voto

Antonio Bardazzi Points 231

Meilleure réponse sur Stackoverflow suggérant d'utiliser RENAME USER qui copient les privilèges de l'utilisateur.

L'utilisation du langage de contrôle des données (déclarations telles que GRANT, REVOKE, RENAME, etc.) ne nécessite pas FLUSH PRIVILEGES; et est nécessaire dans des architectures telles que Galera ou la réplication de groupe dans les versions de MySQL ayant des tables MyISAM dans la base de données. mysql car les tables MyISAM ne sont pas répliquées.

3voto

Roman Haefeli Points 21

Je suis aussi tombé sur celui-ci, et la solution proposée n'a pas fonctionné, puisque les privilèges spécifiques à la base de données n'ont pas été déplacés :

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

1voto

cero Points 447

Pour modifier les privilèges, il faut d'abord révoquer toutes les autorisations de l'utilisateur.

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X