web-dev-qa-db-ja.com

MySQL ODBC「認証プロトコルが拒否されました」が原因でリンクが失敗する

私はよく調べましたが、この問題を修正するための答えはまだ見つかりませんでした。

MSAccessからリモートサーバー上のMySQL5.2データベースに接続しようとしています。

問題のテーブルに対する選択、挿入、更新、削除の権限を持つユーザーアカウントを設定しました。ただし、このアカウントに接続しようとすると、次のようになります。

接続に失敗しました[HY000] [MySQL] [ODBC 5.2(w)ドライバー]古い(4.1.1より前の)認証プロトコルを使用した接続が拒否されました(クライアントオプション 'secure_auth'が有効)

Rootアカウントでアクセスしようとすると、接続が機能します。同じドライバーが使用されているため、なぜ認証プロトコルエラーが返されるのか不思議に思います。変更されるのは、使用されているアカウントだけです。したがって、パスワードは必ず同じ認証プロトコル?あるユーザー名とパスワードの組み合わせがプロトコルエラーを返し、別の組み合わせは返さないのはなぜですか?

このエラーは非常に一般的なようですが、明確な解決策を提供する応答はまだ見つかりません。手伝ってくれますか?

10
Ambulare

ここでの問題は、2つの同時問題が原因でした。

  1. リモートサーバーでは、グローバル設定OLD_PASSWORDSが1に設定されていました。これは、4.1より前の方法でパスワードがハッシュされていたことを意味します。
  2. ルートアカウントは、グローバル設定(おそらくこのパラメーターが設定される前に入力された)にもかかわらず、新しいハッシュメソッドでエンコードされていました。つまり、ODBC接続を介してアクセスが許可されていたため、新しいハッシュが認識されました。

グローバル設定により、MySQLのPASSWORD()関数は、想定されていた新しいメソッドではなく、古いメソッドに入力された値をハッシュしました。

私が使用したソリューションとして、DBAが正当な理由でOLD_PASSWORDSを1に設定したと想定しました

セッションold_passwords = 0を設定します。 'user' @ '%' = password( 'mypassword');のパスワードを設定します。

グローバル設定OLD_PASSWORDS = 1により、OLD_PASSWORD()関数と同じハッシュが使用されるため、password()関数の使用は以前は機能しませんでした。セッション設定により、正しいパスワードを生成できました。

9
Ambulare

「代わりに5.1.12をインストールしたとき、問題はありませんでした」

同上! ODBCドライバーバージョン5.1.12を使用してMySQLに正常に認証されました。MySQLが新しいドライバーでこのエラーを処理するためのより良い方法を提供しない理由はわかりませんが、確認できますODBCドライバー5.1.12を使用すると機能します。

5.1.12 ODBCドライバのインストールページへのリンクは次のとおりです。

http://dev.mysql.com/downloads/file.php?id=411741

3
Justin

同僚が問題を抱えていないときに、同じエラーメッセージが表示されていました。私はMySQL ODBCドライバー5.1.13(最新のGAバージョンが利用可能))を使おうとしていましたが、彼女は5.1.12を持っていました。代わりに5.1.12をインストールしたとき、問題ありませんでした。

1
Beth