こんにちは、yoku0825といいます。

>・my.cnfにold_passwordsの設定が無いことを確認してmysqlを起動
> ・再度rootで接続を試みる←ここで今までと同じ問題に遭遇
ユーザーの再作成はどうやってやりましたか?
mysqldumpからmysql.userテーブルも戻していますか?


$ mysqldump -uroot -phoge mysql user
..
INSERT INTO `user` VALUES ('localhost','old_password','13ae08e92ef36dd0','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'',NULL,'N');
('localhost','new_password','*4266488C892EA7950486FEC0A1CFFC1BD9543F7B','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0,'',NULL,'N');
..

ご覧の通り、古いバージョンから取得したmysqldumpをそのまま流し込むと、
パスワード(3カラム目です)はハッシュされた状態で直接mysql.userテーブルに流し込まれるので、
old_passwordsの値によらず古いパスワードハッシュを使ったユーザーが出来上がります(´・ω・`)
(てっきり、ユーザーは新しくGRANTステートメントで作っているかと思っていました。。)

対策としては、
* mysqldumpからmysql.userテーブルをリストアせず、GRANTステートメントで1つずつやる
* mysql.userテーブルはリストアして、1ユーザーずつSET PASSWORD FOR ..で41桁ハッシュに更新する
のどちらかになります。いずれも平文のパスワードが必要です。

↑をSET PASSWORDステートメントでやるには、
mysql> SET SESSION old_passwords= 0; -- そもそも0になっていればやらなくてもいいです。
mysql> SELECT user, host, password FROM user;
+--------------+--------------+-------------------------------------------+
| user | host | password |
+--------------+--------------+-------------------------------------------+
| root | localhost | 13ae08e92ef36dd0 |
| root | 8a9eaed7da1a | *32D02FA2CC855072F2BD0EB54496B49436B66E39 |
| root | 127.0.0.1 | *32D02FA2CC855072F2BD0EB54496B49436B66E39 |
| root | ::1 | *32D02FA2CC855072F2BD0EB54496B49436B66E39 |
| old_password | localhost | 13ae08e92ef36dd0 |
| new_password | localhost | *4266488C892EA7950486FEC0A1CFFC1BD9543F7B |
+--------------+--------------+-------------------------------------------+
6 rows in set (0.00 sec)

-- old_passwordは16桁ハッシュになっています --

mysql> SET PASSWORD FOR old_password@localhost = PASSWORD('hoge');
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user, host, password FROM user;
+--------------+--------------+-------------------------------------------+
| user | host | password |
+--------------+--------------+-------------------------------------------+
| root | localhost | 13ae08e92ef36dd0 |
| root | 8a9eaed7da1a | *32D02FA2CC855072F2BD0EB54496B49436B66E39 |
| root | 127.0.0.1 | *32D02FA2CC855072F2BD0EB54496B49436B66E39 |
| root | ::1 | *32D02FA2CC855072F2BD0EB54496B49436B66E39 |
| old_password | localhost | *4266488C892EA7950486FEC0A1CFFC1BD9543F7B |
| new_password | localhost | *4266488C892EA7950486FEC0A1CFFC1BD9543F7B |
+--------------+--------------+-------------------------------------------+
6 rows in set (0.00 sec)

-- 41桁ハッシュに更新されました --


どうでしょうか?


yoku0825,


2014年12月17日 11:38 koichi.s <asp91462@yahoo.co.jp>:
yoku0825さま、みなさま


佐々木でございます。

早速のご返答を頂き、ありがとうございました。
私が数日悩んでいた問題に的確なご回答をくださり、感謝しております。


サーバ側とクライアント側の両方のsecure-authをOFFにすることで
rootでのログインは可能となりました。

原因ですが、

 >または rootのパスワードを設定した時に有効になっていませんでしたか?


状況的にこちらであると思われます。
(お恥ずかしい話ですが、パイロット用環境であったため、構築ログが流れてしまっておりました)

また追加でご教示頂きたいのですが、

> old_passwordsの設定を消して最初からセットアップするのが良いとは思います。

こちらについては以下の作業を実施してみたのですが、上手く行きませんでした。
・yum removeにて以下のパッケージをアンインストール
MySQL-client MySQL-devel
MySQL-server
MySQL-test
※MySQL-shared-compatは、依存関係の都合でcrontabなども消えるため自重
・MySQLのデータファイル格納フォルダ(defaultのままのため/var/lib/mysql)
配下をバックアップを取得し削除
・yum localinstallにて以下を再インストール
MySQL-client MySQL-devel
MySQL-server
MySQL-test
・my.cnfにold_passwordsの設定が無いことを確認してmysqlを起動
・再度rootで接続を試みる←ここで今までと同じ問題に遭遇

最初からのセットアップと呼ぶためには、MySQL-shared-compatまで
きれいにアンインストール&インストールする必要があるのか、

それとも、当方のやり方とは異なる何らかの手順があるのか判断付きませんでした。
MySQL-shared-compatのアンインストール&インストールまで
行えば解消するはずでしょうか?

※複数人で環境を構築しており、crontabなどの設定やテストが進んで
 いるため、簡単にMySQL-shared-compatのアンインストールが出来ない
 状況になっております。

よろしくお願いいたします。

以上



----- Original Message -----
>
>
>こんにちは、yoku0825といいます。
>
>
>rpmで突っ込むと、~/.mysql_secret にrootの初期パスワードが突っ込まれて、
>SET PASSWORDで変更しないと有効にならない件…ではないように見えますので、
>そこはクリアされてると思って進めますと、
>
>
>my.cnfにold_passwordsが設定されている,
>または rootのパスワードを設定した時に有効になっていませんでしたか?
>
>
>これによりrootのパスワードが16桁ハッシュで作成されてしまったのではないかと思います。
>secure-authは *サーバーと* *クライアントで* それぞれOFFにされる(skip-secure-authまたはsecure-auth=0)必要があるので、
>my.cnfの[mysqld]セクションにskip-secure-authを追加してあげれば可能だと思います。
>
>
>
>
>↓バージョンちょっと違いますが、再現させてみました。
>
>
>bash-4.1# cat /root/.mysql_secret
># The random password set for the root user at Tue Dec 16 01:32:45 2014 (local time): NpWp_bz1tOSHMv1y
>
>
>bash-4.1# mysql -uroot -pNpWp_bz1tOSHMv1y
>
>
>mysql> SET PASSWORD = PASSWORD('hoge');
>Query OK, 0 rows affected, 1 warning (0.00 sec)
>
>
>-- ワーニングが出ませんでしたか? --
>
>
>mysql> SHOW WARNINGS;
>+---------+------+--------------------------------------------------------------------------------------------------------------------------+
>| Level | Code | Message |
>+---------+------+--------------------------------------------------------------------------------------------------------------------------+
>| Warning | 1287 | 'pre-4.1 password hash' is deprecated and will be removed in a future release. Please use post-4.1 password hash instead |
>+---------+------+--------------------------------------------------------------------------------------------------------------------------+
>1 row in set (0.01 sec)
>
>
>mysql> SHOW GRANTS;
>
>+---------------------------------------------------------------------------------------------------------------+
>| Grants for root@localhost |
>+---------------------------------------------------------------------------------------------------------------+
>| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '13ae08e92ef36dd0' WITH GRANT OPTION |
>| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
>+---------------------------------------------------------------------------------------------------------------+
>2 rows in set (0.00 sec)
>
>
>mysql> SELECT @@old_passwords;
>+-----------------+
>| @@old_passwords |
>+-----------------+
>| 1 |
>+-----------------+
>1 row in set (0.00 sec)
>
>
>-- 16桁ハッシュで保存されています --
>
>
>bash-4.1# mysql -uroot -phoge
>Warning: Using a password on the command line interface can be insecure.
>ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)
>
>
>-- クライアントが16桁ハッシュでの認証を拒否するので、Error 2049(2000番台はクライアントのエラーコードです)が出ます --
>
>
>bash-4.1# mysql -uroot -phoge --skip-secure-auth
>Warning: Using a password on the command line interface can be insecure.
>ERROR 1275 (HY000): Server is running in --secure-auth mode, but 'root'@'localhost' has a password in the old format; please change the password to the new format
>
>
>-- クライアントに16桁ハッシュを許可させても、サーバーが16桁ハッシュを拒否するのでError 1275(1000番台はサーバーのエラーコード)になりました --
>
>
># vim /usr/my.cnf
>
>..
>[mysqld]
>old_passwords= 1
>skip-secure-auth
>..
>
>
>bash-4.1# /etc/init.d/mysql restart
>Shutting down MySQL.. SUCCESS!
>Starting MySQL. SUCCESS!
>
>
>-- サーバー側でもskip-secure-authにして再起動します --
>
>
>bash-4.1# mysql -uroot -phoge
>Warning: Using a password on the command line interface can be insecure.
>ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)
>
>
>-- サーバー側でskip-しても、クライアント側で拒否するのでクライアントからskip-secure-authを外すと2049になります --
>
>
>bash-4.1# mysql -uroot -phoge --skip-secure-auth
>Warning: Using a password on the command line interface can be insecure.
>Welcome to the MySQL monitor. Commands end with ; or \g.
>Your MySQL connection id is 2
>Server version: 5.6.22 MySQL Community Server (GPL)
>
>
>Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
>
>
>Oracle is a registered trademark of Oracle Corporation and/or its
>affiliates. Other names may be trademarks of their respective
>owners.
>
>
>Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
>
>
>mysql>
>
>
>-- 両方のsecure-authがOFFになることで初めて16桁ハッシュで認証できました --
>
>
>
>
>取り敢えず5.6.21ではこれでしのげるかも知れませんが、
>5.7ではskip-secure-authは完全に解釈されなくなっているので
>(5.6にもいつバックポートされるかされないかわかりませんし)
>old_passwordsの設定を消して最初からセットアップするのが良いとは思います。
>
>
>
>
>
>
>余談ですが、
>> パスワードハッシュの管理に
>> 変更が入ったこと、およびMySQL5.6から新しい管理方式が標準となったこと
>> により発生している問題と理解した
>
>パスワードハッシュが変わったのも、新しい方が標準になったのも10年以上前です :-P
>
>
>解決しますように。
>
>
>
>
>yoku0825,
>
>
>2014年12月16日 15:07 koichi.s <asp91462@yahoo.co.jp>:
>メーリングリストの皆さま
>>
>>はじめまして
>>WEBシステム構築をメインとしている技術者の佐々木浩一と申します。
>>いつもはJAVA+Oracleを使用しての開発が多いMySQL初心者です。
>>
>>MySQLは初めてですが、Oracle以外にPostgreSQLなどは環境構築の経験ありです。
>>
>>今回、依頼元の要望によりシステムの一部をRHEL+MySQL+Perl(CGI)にて
>>構築する事になり、環境構築を行っているのですが、表題のとおりrootにて
>>ログイン出来ない状況に陥ってしまいました。過去ログなどを拝見したのですが
>>ピンと来る情報にたどり着けませんでしたので、ご存知の方がいらっしゃれば
>>勝手なお願いで恐縮ですが、ご教示頂けませんでしょうか?
>>
>>【状況】
>>・依頼元指定のOS(RHEL6.2)のカスタムインストール版OS(MySQLはmysql-libs
>> 5.1.52-1.el6_0.1のみインストール済)のマシンにMySQL5.6.20-1.el6を
>> バンドル版アーカイブファイルからyumでインストール
>>・MySQLのsharedインストール時、mysql-libs 5.1.52-1.el6_0.1が競合したため、
>> 代わりにMySQL-shared-compat-5.6.20-1.el6にてmysql-libsのアップデート
>>・インストールしたパッケージは以下(全て5.6.20-1.el6)
>> MySQL-client
>> MySQL-devel
>> MySQL-server
>> MySQL-shared-compat
>> MySQL-test
>>・インストール完了後にOSのrootでMySQLを起動し、起動後に以下のコマンドを実行
>> msql -uroot -p
>> すると、以下のメッセージが表示された
>> Connection using old(pre-4.1.1)authentication protocol refused(client option 'secure_auth' enavled)
>>・過去ログや他の方のblogなどを拝見した結果、パスワードハッシュの管理に
>> 変更が入ったこと、およびMySQL5.6から新しい管理方式が標準となったこと
>> により発生している問題と理解した
>>・msql -uroot -pのコマンドに追加パラメータとして--skip-secure-authを追加
>> その結果、ログインに成功(rootにパスワードを設定してログアウト)
>>・mysql起動状態でメモリ使用状況を確認したところ、2Gbyte以上を使用していたため、
>> my.cnfに初期メモリなどの設定値を設定しmysqlを再起動
>>・再度rootでログインしようとしたところ、以下のエラーが発生し再度ログイン出来ず
>> Server is running in --secure-auth mode, but 'root@localhost' has a password in the old format; please change the password to the new format
>>それ以降、何をやっても上記エラーでログイン出来ず
>>
>>といった状況です。
>>過去ログや色々な方の記事を拝見すると、そもそも5.1から5.6への更新は推奨されていない
>>などの断片的な情報は見つかるものの、見つけ出した断片的な情報を試しても解決出来ませんでした。
>>
>>rootでログイン出来ないとどうする事も出来ず、困っております。
>>
>>よろしくお願いいたします。
>>
>>
>>
>
>