Ansible: MySQLモジュールはユーザーに権限を追加できません。 エラーをスローします。

作成日 2013年09月29日  ·  3コメント  ·  ソース: ansible/ansible

バージョン:

  • Ansible:1.3.2
  • Python:2.7
  • OS:Debian 7(ansibleホスト)、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クエリで実際にユーザーを作成できます。 しかし、それは特権を適用することに失敗します。

 -名前: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
 rights_revoke(カーソル、ユーザー、ホスト、db_table、grant_option)
 ファイル "/root/.ansible/tmp/ansible-1380442867.96-101659379289717/mysql_user"、263行目、privileges_revoke
 cursor.execute(query)
 ファイル "/usr/lib64/python2.6/site-packages/MySQLdb/cursors.py"、行173、実行中
 self.errorhandler(self、exc、value)
 defaulterrorhandlerのファイル "/usr/lib64/python2.6/site-packages/MySQLdb/connections.py"、行36
 errorclass、errorvalueを上げる
 _mysql_exceptions.OperationalError:(1045、 "ユーザー 'root' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES)")


致命的:すべてのホストがすでに失敗しています-中止

ユーザーは実際に作成されることに注意してください。

 [root @ c6-4〜] #mysql mysql -e "select Host、User from user;" | grep elvis
 | ローカルホスト| エルビス|
bug mysql

全てのコメント3件

これはMySQLモジュール認証の質問のようです(おそらくmy.cnfを設定する必要があるなど)。助けが必要な場合は、メーリングリストに立ち寄ってください。

教訓:考えずにドキュメントからコピー/貼り付けしないでください。
将来の世代のために:

このタスクを使用して、mysqlユーザー「root」のパスワードを変更しました。

 --name- name:MySQLルートパスワードの設定
 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 評価