mysql:16082
From: Watanabe Tomoyuki <Watanabe Tomoyuki <WATANABE.TOMOYUKI.2@xxxxxxxxxx>>
Date: Fri, 17 Jan 2014 16:35:20 +0000
Subject: [mysql 16082] Re: odbc接続について
お世話になります。渡辺です。 yoku0825さんフォローありがとうございます。 動作確認してみましたので追記です。 >1) Read options from my.cnfのチェック 残念ながらmy.cnfでsecure-authのオプションを指定しても無視されました。 よってこの方法では問題解決しません。 ・ファイル名はmy.iniでもmy.cnfでも読んでくれます。 ・他のhost,userなどのオプションは有効です。 ・[client]セクションでも[odbc]セクションでもsecure-authはダメでした。 ・一応secure_authに書き換えてみましたが同じでした。 >2) 古いConnector/ODBCを使う。 Connector/ODBC 3.51.30で試したら16桁ハッシュのユーザーに接続できました。 クライアントだけで対処せざるを得ないなら2) がよいかと思います。 ですが、これはあくまで暫定対処方法です。 サーバー側で >3) MySQL Server上の該当ユーザーのパスワードを16桁ハッシュから41桁ハッシュに変更してやる。 >4) 41桁ハッシュを持つ新しいユーザーを作る。 のいずれかをやっておかないと、いずれ他のドライバで問題が発生する可能性があります。 例えばphpMyAdminをお使いのようですが、PHP5.3以降で接続できなくなる問題があります。 http://www.php.net/manual/ja/migration53.incompatible.php 参考までに。 -----Original Message----- From: yoku ts. [mailto:yoku0825@xxxxxxxxxx] Sent: Friday, January 17, 2014 11:11 PM To: ml@xxxxxxxxxx Subject: [mysql 16081] Re: odbc接続について こんばんは、yoku0825といいます。 > Connnection Failed:[HY000][MySQL][ODBC 5.2(w)Driver] Connection using old(pre-4.1.1) authentication protocol refused(client option ‘secure_auth’ enabled) MySQLのパスワードハッシュ形式は4.1で変更が入り、 ・4.0とそれ以前 .. 16桁ハッシュ ・4.1とそれ以降 .. 41桁ハッシュ になっています。 互換性の為にどちらのハッシュ形式でも認証が出来るようになってはいるんですが、最近のクライアント(この場合はConnector/ODBC)では16桁ハッシュでの認証を拒否するオプション(--secure-auth)がデフォルトでONになったようで、よくエラーメッセージの話を聞く気がします。 そのユーザーのパスワードハッシュの桁数は、(PHPMyAdminなどでrootで接続して)SELECT user, host, password FROM mysql.user; などで確認できます。 16桁ハッシュになっていた場合の解決法としては、 1) Connector/ODBC上でsecure-auth= OFFにしてやる。 ⇒"Read options from my.cnf"とかいうチェックボックスがあったのでこれをONにして、my.cnf(というかWindowsだとmy.iniのはずなんだけどなぁ。。)にsecure-auth= 0 を書いてやれば食ってくれるかと思ったんですが、ダメだったとの情報あり(未確認) ⇒オススメはしませんが、Connector/ODBCのソースを書き換えてsecure-authのデフォルトを0にすり替えるという手もあります。 2) 古いConnector/ODBCを使う。 ⇒3.51.30ならsecure-auth= OFFがデフォルトのはずなので、回避できると思います。 ⇒ http://downloads.mysql.com/archives/c-odbc/ 3) MySQL Server上の該当ユーザーのパスワードを16桁ハッシュから41桁ハッシュに変更してやる。 ⇒ただし、3.23(相当), 4.0(相当)のクライアントがそのMySQL Serverに接続できなくなりますので、接続する可能性のある全てのクライアントをチェックすることをオススメします。 ⇒PHPMyAdminからrootでログインし、 SET SESSION old_passwords= 0; SET PASSWORD FOR ユーザー名@'%'= PASSWORD('パスワード文字列'); ⇒繰り返しますが、古すぎるクライアントはこれをやると(ODBCだろうがPHPだろうがPerlだろうが)一切接続できなくなるので十分ご注意ください。 4) 41桁ハッシュを持つ新しいユーザーを作る。 ⇒PHPMyAdminなどでrootログインし、 SHOW GRANTS FOR ユーザー名@'%'; SET SESSION old_passwords= 0; SHOW GRANTSの結果をコピペしてユーザー名をよしなに変更、IDENTIFIED BY 'パスワード文字列'はコピペせずにパスワードを書いてあげてください。 あたりでしょうか。 手前味噌ですが、以前書いたこちらのメモが参考になるかも知れません(この時はレプリケーションスレーブでしたが) http://yoku0825.blogspot.jp/2013/05/mysql56mysql50ioerror-2049.html secure-authの動作的なところはこちらが参考になるかも(手前味噌その2) http://qiita.com/udzura/items/4e634606839998a18845 なお、ローカルマシンでは上手くいくというのは、 ・そのマシンにデータを入れ込んだ時に既に41桁ハッシュになっていた または ・そのマシンのConnector/ODBCが十分古い のどちらかではないかなーと推測します。 それでは。 /* yoku0825 */
@ 16076 2014-01-17 18:04 ["旭日 太郎" <asahip] odbc接続について 16079 2014-01-17 21:15 ┗[Watanabe Tomoyuki <W] RE: [mysql 16076] odbc接続について 16080 2014-01-17 22:07 ┗[Watanabe Tomoyuki <W] 16081 2014-01-17 23:11 ┗["yoku ts." <yoku0825] Re: odbc接続について -> 16082 2014-01-18 01:35 ┗[Watanabe Tomoyuki <W] 16086 2014-01-27 18:28 ┗[朝日 太郎 <asahips@]