Ansible: MySQL模块给用户添加权限失败; 抛出错误。

创建于 2013-09-29  ·  3评论  ·  资料来源: ansible/ansible

版本:

  • Ansible:1.3.2
  • 蟒蛇:2.7
  • 操作系统:Debian 7(ansible 主机)、Centos6.4(客户端)、Debian Unstable(客户端)
  • MySQL:mysql-5.5.30,amariadb-5.5.33a-MariaDB

安装方法:

我通过以下方式安装了 Ansible:

目标=“/tmp/ansible01”
 sudo apt-get install python-setuptools
须藤easy_install virtualenv
 cd $TARGET && virtualenv ansible
源 $TARGET/ansible/bin/activate
 pip 安装 ansible

描述:

使用此剧本(从文档中复制/粘贴),客户端上的 mysql 查询能够实际创建用户。 但它无法应用特权。

 - 名称:设置 Galera 用户密码
 mysql_user: login_user={{ mysql_user }} login_password={{ mysql_password }} name={{ galera_user }} password={{ galera_password }} state=present priv=*.*:ALL

抛出错误:

REMOTE_MODULE mysql_user login_user=root login_password=curious name=elvis password=spring state=present priv=*.*:ALL
致命:[c6-4] => 解析失败:回溯(最近一次调用):
 文件“/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 中
 权限撤销(光标、用户、主机、db_table、grant_option)
 文件“/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user”,第263行,在privileges_revoke
 游标.执行(查询)
 文件“/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py”,第173行,在执行中
 self.errorhandler(self, exc, value)
 文件“/usr/lib64/python2.6/site-packages/MySQLdb/connections.py”,第 36 行,在 defaulterrorhandler
 引发错误类,错误值
 _mysql_exceptions.OperationalError: (1045, "访问被拒绝用户 'root'@'localhost' (使用密码: YES)")


致命:所有主机都已经失败——正在中止

请注意,用户实际上确实被创建了:

 [root@c6-4 ~]# mysql mysql -e "select Host,User from user;" | 猫王
 | 本地主机 | 猫王 |
bug mysql

所有3条评论

这似乎是一个 MySQL 模块身份验证问题(可能需要设置 my.cnf 等),如果您需要帮助,请访问邮件列表。

经验教训:不要不假思索地从文档中复制/粘贴。
为后代:

我使用此任务来更改 mysql 用户“root”的密码:

 - name- name: 设置 MySQL Root 密码
 mysql_user: name=root password={{ mysql_password}} priv=*.*:ALL state=present

似乎这破坏了“root”的 GRANT 权限,因此无法向新创建的用户授予权限...

他妈的,我也遇到了同样的情况。 应尽快在此处更改文档。
现在我必须手动修复很多系统:(

我花了很长时间才弄清楚为什么对现有用户的某些调用或删除用户可以正常工作,但是使用相同的正确凭据创建新用户是不可能的......
这应该重新打开,直到文档被修复,并且 mysql_user 模块中应该有一个预防机制或者至少是一个警告!!!

这可能会破坏许多系统,查找或修复它很麻烦。

如果有人真的想通过priv=*.*:ALL删除授权,即使对于 root 用户也应该有另一个选项来强制执行此操作(文档中有一个很大的警告,这可能会使您没有任何具有授权权限的用户)或它如果没有找到具有授予权限的用户,则应该失败...

手动修复是使用以下选项重新启动 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 等级