mysql:16081
From: "yoku ts." <"yoku ts." <yoku0825@xxxxxxxxxx>>
Date: Fri, 17 Jan 2014 23:11:06 +0900
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 */ 2014年1月17日 22:07 Watanabe Tomoyuki <WATANABE.TOMOYUKI.2@xxxxxxxxxx>: > 渡辺です。お詫びして訂正します。 > > 勘違いしておりました。申し訳ありません。 >>「Enable Cleartext Authentication」のチェックボックスがあります。 >>これにチェックを入れるとどうでしょうか? > この部分はこの件とは無関係ですので無視してください。 > > > ただ、当該のエラーメッセージは古い暗号化形式であるがゆえ、というのは恐らく確かですので、 > 以下のいずれかが有効かと思います。 > (最近のドライバは新しい暗号化方式にしか対応していないものがあります) > > 1.パスワードを新しい暗号化方式に変える。 > 接続できる端末で先述のSET PASSWORD構文によって変更 > ただし、極端に古いクライアントがあるとそこから接続できなくなる可能性があります。 > その場合は新しいODBCドライバを使う、などの対応が必要です。 > > 2.別のユーザーを作る。 > 接続できる端末で新しいユーザーを作り、同じ権限を付与します。 > 接続できない端末からは新しいユーザーで接続させます。 > (新しく作った場合は新しい暗号化方式になります。) > この場合は他の端末には影響しません。 > > 私の環境で試して有効だったのは以上です。 > > よろしくお願いします。 > > > > -----Original Message----- > From: Watanabe Tomoyuki [mailto:WATANABE.TOMOYUKI.2@xxxxxxxxxx] > Sent: Friday, January 17, 2014 9:16 PM > To: ml@xxxxxxxxxx > Subject: [mysql 16079] RE: [mysql 16076] odbc接続について > > お世話になります。渡辺です。 > > > ODBCドライバのバージョンが5.2.5以降であれば(最新版は5.2.6) > であれば、「Connector/ODBC」の設定画面に > 「Details」のボタンがあり、それを押したときに表示される > 「Connection」タブの中に > 「Enable Cleartext Authentication」のチェックボックスがあります。 > これにチェックを入れるとどうでしょうか? > > > もしこれで回避できるようであれば、 > サーバーに保存されているパスワードの暗号化方式が古い状態(MySQL4.0以前)である可能性があります。 > 長く使い続けるのであれば暗号化方式を新しくしておくことをお勧めします。 > > (参考) > MySQL5.1 マニュアル 12.5.1.6. SET PASSWORD構文 > http://dev.mysql.com/doc/refman/5.1/ja/set-password.html > (「注意」もお読みください。) > > > よろしくお願いします。 > > > -----Original Message----- > From: 旭日 太郎 [mailto:asahips@xxxxxxxxxx] > Sent: Friday, January 17, 2014 6:04 PM > To: ml@xxxxxxxxxx > Subject: [mysql 16076] odbc接続について > > (中略) > > Connnection Failed:[HY000][MySQL][ODBC 5.2(w)Driver] Connection using old(pre-4.1.1) authentication protocol refused(client option ‘secure_auth’ enabled) > というエラーメッセージが出て接続ができませんでした。 > > (中略) > > ★:サーバのバージョン: 5.1.50 - Source distribution > > (後略)
@ 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@]