Ansible: El módulo MySQL no agrega privilegios al usuario; arroja errores.

Creado en 29 sept. 2013  ·  3Comentarios  ·  Fuente: ansible/ansible

Versiones:

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

Método de instalación:

Instalé Ansible de la siguiente manera:

 OBJETIVO = "/ tmp / ansible01"
 sudo apt-get install python-setuptools
 sudo easy_install virtualenv
 cd $ TARGET && virtualenv ansible
 fuente $ TARGET / ansible / bin / activo
 pip instalar ansible

Descripción:

Usando este libro de jugadas (copiar / pegar de la documentación), la consulta de mysql en el cliente es capaz de crear al usuario. Pero no aplica los privilegios.

 - nombre: Configuración de la contraseña de usuario de Galera
 mysql_user: login_user = {{mysql_user}} login_password = {{mysql_password}} nombre = {{galera_user}} contraseña = {{galera_password}} estado = presente priv = *. *: TODOS

Error arrojado:

REMOTE_MODULE mysql_user login_user = root login_password = nombre curioso = contraseña de elvis = estado de primavera = presente priv = *. *: TODOS
 fatal: [c6-4] => no se pudo analizar: Traceback (última llamada más reciente):
 Archivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", línea 1348, en
 principal()
 Archivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", línea 405, en main
 cambiado = user_mod (cursor, usuario, host, contraseña, priv)
 Archivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", línea 188, en user_mod
 privileges_revoke (cursor, usuario, host, db_table, grant_option)
 Archivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", línea 263, en privileges_revoke
 cursor.execute (consulta)
 Archivo "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", línea 173, en ejecución
 self.errorhandler (self, exc, value)
 Archivo "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", línea 36, ​​en defaulterrorhandler
 elevar errorclass, errorvalue
 _mysql_exceptions.OperationalError: (1045, "Acceso denegado para el usuario 'root' @ 'localhost' (usando contraseña: YES)")


 FATAL: todos los hosts ya han fallado - abortando

Tenga en cuenta que el usuario realmente se crea:

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

Todos 3 comentarios

Esta parece ser una pregunta de autenticación del módulo MySQL (probablemente una necesidad de configurar my.cnf, etc.), por favor pase por la lista de correo si desea ayuda.

Lección aprendida: no copie / pegue documentos sin pensar.
Para las generaciones futuras:

Usé esta tarea para cambiar la contraseña del usuario de mysql 'root':

 - nombre- nombre: Configuración de la contraseña raíz de MySQL
 mysql_user: nombre = contraseña raíz = {{mysql_password}} priv = *. *: TODO el estado = presente

Parece que esto golpeó los permisos GRANT de 'root', por lo tanto, falló el siguiente bit de otorgar privilegios a un usuario recién creado ...

Joder, a mí me pasó lo mismo. Los documentos deben cambiarse aquí lo antes posible.
Ahora tengo que arreglar muchos sistemas manualmente :(

Me tomó una eternidad descubrir por qué algunas llamadas a usuarios existentes o eliminar usuarios funcionan bien, pero crear nuevos es imposible con las mismas credenciales correctas ...
¡¡¡Esto debería ser reabierto hasta que los documentos estén arreglados y debería haber un mecanismo de prevención en el módulo mysql_user o al menos una advertencia !!!

esto puede potencialmente romper muchos sistemas y encontrarlo o arreglarlo es engorroso.

Si alguien realmente quisiera eliminar la concesión a través de priv=*.*:ALL , debería haber otra opción para forzar esto incluso para el usuario root (con una gran advertencia en los documentos de que esto podría dejarlo sin ningún usuario con privilegios de concesión) o debería fallar si no encuentra ningún usuario con privilegios de concesión restantes ...

La solución manual es reiniciar mysql con la opción:
--skip-grant-tables

Y ejecute los siguientes comandos en el comando mysql (NOTA: GRANT ... ALL ... no funciona ya que las tablas de concesiones se omiten):

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
¿Fue útil esta página
0 / 5 - 0 calificaciones