Ansible: O módulo MySQL falha ao adicionar privilégios ao usuário; lança erros.

Criado em 29 set. 2013  ·  3Comentários  ·  Fonte: ansible/ansible

Versões:

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

Método de instalação:

Instalei o Ansible da seguinte maneira:

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

Descrição:

Usando este manual (copiar / colar da documentação), a consulta mysql no cliente é capaz de realmente criar o usuário. Mas não consegue aplicar os privilégios.

 - nome: Configuração de senha de usuário Galera
 mysql_user: login_user = {{mysql_user}} login_password = {{mysql_password}} name = {{galera_user}} password = {{galera_password}} state = present priv = *. *: ALL

Erro lançado:

REMOTE_MODULE mysql_user login_user = root login_password = nome curioso = senha elvis = estado da primavera = presente priv = *. *: ALL
 fatal: [c6-4] => falha ao analisar: Traceback (última chamada mais recente):
 Arquivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", linha 1348, em
 a Principal()
 Arquivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", linha 405, no principal
 alterado = user_mod (cursor, usuário, host, senha, priv)
 Arquivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", linha 188, em user_mod
 privileges_revoke (cursor, usuário, host, db_table, grant_option)
 Arquivo "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", linha 263, em privileges_revoke
 cursor.execute (consulta)
 Arquivo "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", linha 173, em execução
 self.errorhandler (self, exc, value)
 Arquivo "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", linha 36, ​​em defaulterrorhandler
 aumentar errorclass, errorvalue
 _mysql_exceptions.OperationalError: (1045, "Acesso negado para o usuário 'root' @ 'localhost' (usando senha: SIM)")


 FATAL: todos os hosts já falharam - abortando

Observe que o usuário realmente é criado:

 [root @ c6-4 ~] # mysql mysql -e "selecionar Host, Usuário do usuário;" | grep elvis
 | localhost | elvis |
bug mysql

Todos 3 comentários

Esta parece ser uma questão de autenticação do módulo MySQL (provavelmente uma necessidade de definir my.cnf, etc), por favor, pare na lista de discussão se você precisar de ajuda.

Lição aprendida: não copie / cole de documentos sem pensar.
Para as gerações futuras:

Usei esta tarefa para alterar a senha do usuário mysql 'root':

 - nome- nome: Configurando a senha de root do MySQL
 mysql_user: name = root password = {{mysql_password}} priv = *. *: ALL estado = presente

Parece que isso superou as permissões GRANT de 'root', portanto, falhando na próxima parte de conceder privs a um usuário recém-criado ....

Porra, o mesmo aconteceu comigo. docs devem ser alterados aqui o mais rápido possível.
Agora tenho que consertar vários sistemas manualmente :(

Demorei muito para descobrir por que algumas chamadas em usuários existentes ou a remoção de usuários funcionam bem, mas criar novos é impossível com as mesmas credenciais corretas ....
ele deve ser reaberto até que os documentos sejam corrigidos e deve haver um mecanismo de prevenção no módulo mysql_user ou pelo menos um aviso !!!

isso pode quebrar potencialmente muitos sistemas e encontrá-los ou consertá-los é complicado.

Se alguém realmente deseja remover a concessão por meio de priv=*.*:ALL , deve haver outra opção para forçar isso até mesmo para o usuário root (com um grande aviso nos documentos de que isso pode deixá-lo sem nenhum usuário com privilégios de concessão) ou deve falhar se não encontrar nenhum usuário com privilégios de concessão restantes ...

A correção manual é reiniciar o mysql com a opção:
--skip-grant-tables

E execute os seguintes comandos no comando mysql (NOTA: GRANT ... ALL ..não funciona, uma vez que as tabelas de permissões são puladas duh):

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
Esta página foi útil?
0 / 5 - 0 avaliações