Ansible: Das MySQL-Modul kann dem Benutzer keine Berechtigungen hinzufügen; wirft Fehler.

Erstellt am 29. Sept. 2013  ·  3Kommentare  ·  Quelle: ansible/ansible

Versionen:

  • Ansible: 1.3.2
  • Python: 2.7
  • Betriebssystem: Debian 7 (ansible Host), Centos6.4 (Client), Debian Unstable (Client)
  • MySQL: mysql-5.5.30, amariadb-5.5.33a-MariaDB

Installationsmethode:

Ich habe Ansible folgendermaßen installiert:

 TARGET="/tmp/ansible01"
 sudo apt-get install python-setuptools
 sudo easy_install virtualenv
 cd $TARGET && virtualenv ansible
 Quelle $TARGET/ansible/bin/activate
 pip install ansible

Beschreibung:

Mit diesem Playbook (Kopieren/Einfügen aus der Dokumentation) kann die MySQL-Abfrage auf dem Client den Benutzer tatsächlich erstellen. Aber die Privilegien werden nicht angewendet.

 - Name: Einstellen des Galera-Benutzerpassworts
 mysql_user: login_user={{ mysql_user }} login_password={{ mysql_password }} name={{ galera_user }} password={{ galera_password }} state=present priv=*.*:ALL

Fehler ausgelöst:

REMOTE_MODULE mysql_user login_user=root login_password=neugieriger Name=elvis password=spring state=present priv=*.*:ALL
 fatal: [c6-4] => Parsen fehlgeschlagen: Traceback (letzter Aufruf zuletzt):
 Datei "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", Zeile 1348, in
 Main()
 Datei "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", Zeile 405, in main
 geändert = user_mod(cursor, user, host, passwort, priv)
 Datei "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", Zeile 188, in user_mod
 privilegien_revoke(cursor, user,host,db_table,grant_option)
 Datei "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", Zeile 263, in Privileges_revoke
 Cursor.execute(Abfrage)
 Datei "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", Zeile 173, in execute
 self.errorhandler(self, exc, value)
 Datei "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", Zeile 36, in defaulterrorhandler
 Fehlerklasse, Fehlerwert erhöhen
 _mysql_exceptions.OperationalError: (1045, "Zugriff verweigert für Benutzer 'root'@'localhost' (mit Passwort: YES)")


 FATAL: alle Hosts sind bereits ausgefallen -- Abbruch

Beachten Sie, dass der Benutzer tatsächlich erstellt wird:

 [root@c6-4 ~]# mysql mysql -e "select Host,User from user;" | grep elvis
 | localhost | elvis |
bug mysql

Alle 3 Kommentare

Dies scheint eine Frage zur Authentifizierung des MySQL-Moduls zu sein (wahrscheinlich muss my.cnf usw. gesetzt werden). Bitte schauen Sie in der Mailingliste vorbei, wenn Sie Hilfe benötigen.

Gelernte Lektion: Nicht aus Dokumenten kopieren/einfügen, ohne nachzudenken.
Für zukünftige Generationen:

Ich habe diese Aufgabe verwendet, um das Passwort des mysql-Benutzers 'root' zu ändern:

 - name- name: MySQL-Root-Passwort einstellen
 mysql_user: name=root password={{ mysql_password}} priv=*.*:ALL state=present

Es scheint, dass dies die GRANT-Berechtigungen von 'root' zerstört hat, wodurch das nächste Bit der Gewährung von privs an einen neu erstellten Benutzer fehlschlägt....

Scheiße, mir ist das gleiche passiert. docs sollten hier so schnell wie möglich geändert werden.
Jetzt muss ich viele Systeme manuell reparieren :(

Ich habe ewig gebraucht, um herauszufinden, warum einige Anrufe bei bestehenden Benutzern oder das Entfernen von Benutzern gut funktionieren, aber das Erstellen neuer mit den gleichen korrekten Anmeldeinformationen unmöglich ist....
dies sollte wieder geöffnet werden, bis die docs behoben sind und es einen Präventionsmechanismus im mysql_user-Modul oder zumindest eine Warnung geben sollte !!!

Dies kann potenziell viele Systeme zerstören und es ist mühsam, es zu finden oder zu reparieren.

Wenn jemand die Gewährung wirklich durch priv=*.*:ALL entfernen möchte, sollte es eine andere Option geben, dies sogar für den Root-Benutzer zu erzwingen (mit einer großen Warnung in den Dokumenten, dass Sie dadurch möglicherweise keine Benutzer mit Gewährungsberechtigungen haben) oder es sollte fehlschlagen, wenn kein Benutzer mit Erteilungsberechtigungen mehr gefunden wird ...

Die manuelle Lösung besteht darin, mysql mit der Option neu zu starten:
--skip-grant-tables

Und führen Sie die folgenden Befehle im mysql-Befehl aus (HINWEIS: GRANT ... ALL ..funktioniert nicht, da Grant-Tabellen übersprungen werden duh):

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen