Versionen:
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 |
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;