Versions :
Méthode d'installation :
J'ai installé Ansible de la manière suivante :
CIBLE="/tmp/ansible01" sudo apt-get install python-setuptools sudo easy_install virtualenv cd $TARGET && virtualenv ansible source $TARGET/ansible/bin/activate pip installer ansible
La description:
En utilisant ce playbook (copier/coller à partir de la documentation), la requête mysql sur le client est capable de créer réellement l'utilisateur. Mais il n'applique pas les privilèges.
- nom : Définition du mot de passe utilisateur Galera mysql_user : login_user={{ mysql_user }} login_password={{ mysql_password }} name={{ galera_user }} mot de passe={{ galera_password }} state=present priv=*.*:ALL
Erreur renvoyée :
REMOTE_MODULE mysql_user login_user=root login_password=curious name=elvis password=spring state=present priv=*.*:ALL fatal : [c6-4] => échec de l'analyse : Traceback (appel le plus récent en dernier) : Fichier "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", ligne 1348, dans principale() Fichier "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", ligne 405, dans main modifié = user_mod(cursor, user, host, password, priv) Fichier "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", ligne 188, dans user_mod privileges_revoke(cursor, user,host,db_table,grant_option) Fichier "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", ligne 263, dans privileges_revoke curseur.execute (requête) Fichier "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", ligne 173, en exécution self.errorhandler(self, exc, valeur) Fichier "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", ligne 36, dans defaulterrorhandler augmenter errorclass, errorvalue _mysql_exceptions.OperationalError : (1045, "Accès refusé pour l'utilisateur 'root'@'localhost' (en utilisant le mot de passe : YES)") FATAL : tous les hôtes ont déjà échoué – abandon
Notez que l'utilisateur est en fait créé :
[root@c6-4 ~]# mysql mysql -e "select Host,User from user;" | grep elvis | localhost | elvis |
Cela semble être une question d'authentification du module MySQL (probablement un besoin de définir my.cnf, etc.), veuillez vous arrêter sur la liste de diffusion si vous souhaitez de l'aide.
Leçon apprise : ne copiez/collez pas à partir de documents sans réfléchir.
Pour les générations futures :
J'ai utilisé cette tâche pour changer le mot de passe de l'utilisateur mysql 'root' :
- name- name : Définition du mot de passe root MySQL mysql_user : name=root password={{ mysql_password}} priv=*.*:ALL state=present
Il semble que cela ait détruit les autorisations GRANT de «root», échouant ainsi au prochain bit d'octroi de privilèges à un utilisateur nouvellement créé ....
Putain, il m'est arrivé la même chose. les documents doivent être modifiés ici dès que possible.
Maintenant, je dois réparer beaucoup de systèmes manuellement :(
Il m'a fallu une éternité pour comprendre pourquoi certains appels sur des utilisateurs existants ou la suppression d'utilisateurs fonctionnent bien, mais il est impossible d'en créer de nouveaux avec les mêmes informations d'identification correctes....
cela devrait être rouvert jusqu'à ce que la documentation soit corrigée et il devrait y avoir un mécanisme de prévention dans le module mysql_user ou au moins un avertissement !!!
cela peut potentiellement casser de nombreux systèmes et le trouver ou le réparer est fastidieux.
Si quelqu'un veut vraiment supprimer l'octroi via priv=*.*:ALL
il devrait y avoir une autre option pour forcer cela même pour l'utilisateur root (avec un grand avertissement dans la documentation que cela pourrait vous laisser sans aucun utilisateur avec les privilèges Grant) ou il devrait échouer s'il ne trouve aucun utilisateur avec les privilèges d'octroi restants ...
Le correctif manuel consiste à redémarrer mysql avec l'option :
--skip-grant-tables
Et exécutez les commandes suivantes dans la commande mysql (REMARQUE : GRANT ... ALL ..ne fonctionne pas car ces tables de subventions sont ignorées):
UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;