Ansible: Le module MySQL ne parvient pas à ajouter des privilèges à l'utilisateur ; renvoie des erreurs.

Créé le 29 sept. 2013  ·  3Commentaires  ·  Source: ansible/ansible

Versions :

  • Ansible : 1.3.2
  • Python : 2,7
  • OS : Debian 7 (hôte ansible), Centos6.4 (client), Debian Unstable (client)
  • MySQL : mysql-5.5.30, amariadb-5.5.33a-MariaDB

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 |
bug mysql

Tous les 3 commentaires

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;
Cette page vous a été utile?
0 / 5 - 0 notes