Ansible: Модуль MySQL не может добавить привилегии пользователю; выдает ошибки.

Созданный на 29 сент. 2013  ·  3Комментарии  ·  Источник: ansible/ansible

Версии:

  • Ansible: 1.3.2
  • Python: 2.7
  • ОС: Debian 7 (доступный хост), Centos6.4 (клиент), Debian Unstable (клиент)
  • MySQL: mysql-5.5.30, amariadb-5.5.33a-MariaDB

Метод установки:

Я установил Ansible следующим образом:

 TARGET = "/ tmp / ansible01"
 sudo apt-get install python-setuptools
 sudo easy_install virtualenv
 cd $ TARGET && virtualenv ansible
 источник $ TARGET / ansible / bin / activate
 pip install ansible

Описание:

Используя эту книгу (скопируйте / вставьте из документации), запрос mysql на клиенте может фактически создать пользователя. Но он не применяет привилегии.

 - name: Установка пароля пользователя Galera
 mysql_user: login_user = {{mysql_user}} login_password = {{mysql_password}} name = {{galera_user}} пароль = {{galera_password}} state = present priv = *. *: ALL

Выброшенная ошибка:

REMOTE_MODULE mysql_user login_user = root login_password = любопытное имя = пароль elvis = состояние пружины = присутствует priv = *. *: ВСЕ
 фатальный: [c6-4] => не удалось проанализировать: Traceback (последний вызов последним):
 Файл "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", строка 1348, в
 основной()
 Файл "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", строка 405, в основном
 изменено = user_mod (курсор, пользователь, хост, пароль, Priv)
 Файл "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", строка 188, в user_mod
 привилегии_revoke (курсор, пользователь, хост, db_table, grant_option)
 Файл "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user", строка 263, в привилегиях_revoke
 cursor.execute (запрос)
 Файл "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py", строка 173, выполняется
 self.errorhandler (self, exc, значение)
 Файл "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py", строка 36, в defaulterrorhandler
 поднять класс ошибок, значение ошибки
 _mysql_exceptions.OperationalError: (1045, «Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: ДА)»)


 FATAL: все хосты уже вышли из строя - прерывание

Обратите внимание, что пользователь действительно создается:

 [root @ c6-4 ~] # mysql mysql -e "выбрать хост, пользователя от пользователя;" | grep elvis
 | localhost | Элвис |
bug mysql

Все 3 Комментарий

Похоже, это вопрос аутентификации модуля MySQL (возможно, необходимо установить my.cnf и т. Д.), Пожалуйста, зайдите в список рассылки, если вам нужна помощь.

Извлеченный урок: не копируйте / вставляйте из документов, не задумываясь.
Для будущих поколений:

Я использовал эту задачу, чтобы изменить пароль пользователя mysql 'root':

 - name- name: Установка пароля root MySQL
 mysql_user: name = root password = {{mysql_password}} priv = *. *: ВСЕ состояние = присутствует

Похоже, что это привело к блокировке разрешений GRANT для 'root', следовательно, не удалось выполнить следующий бит предоставления привилегий только что созданному пользователю ....

Бля, со мной то же самое случилось. документы должны быть изменены здесь как можно скорее.
Теперь приходится много систем исправлять вручную :(

Мне потребовалась вечность, чтобы понять, почему некоторые вызовы существующих пользователей или удаление пользователей работают нормально, но создание новых невозможно с такими же правильными учетными данными ...
его следует открывать повторно, пока не будут исправлены документы и в модуле mysql_user должен быть механизм предотвращения или хотя бы предупреждение !!!

это может потенциально привести к поломке многих систем, и найти или исправить это будет непросто.

Если кто-то действительно захочет удалить грант через priv=*.*:ALL должен быть другой вариант, чтобы принудительно сделать это даже для пользователя root (с большим предупреждением в документах, что это может оставить вас без пользователей с привилегиями Grant) или должен потерпеть неудачу, если не найдет пользователя с оставшимися привилегиями предоставления ...

Исправление вручную - перезапустить mysql с опцией:
--skip-grant-tables

И выполните следующие команды в команде mysql (ПРИМЕЧАНИЕ: GRANT ... ALL .. не работает, так как эти таблицы предоставления пропущены, да):

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;
Была ли эта страница полезной?
0 / 5 - 0 рейтинги