web-dev-qa-db-ja.com

古い(4.1.1以前の)認証プロトコルを使用した接続は拒否されました(クライアントオプション 'secure_auth'が有効になっています)

Windows OBDCドライバーを使用してMySQLデータベースに接続しようとすると問題が発生します。明らかなことに関して多くの検索ヒットがあります...人々は古いバージョンを使用していますが、私はそうではありません。

mysqldはCentOS 6.4 32ビット上にあります

./usr/libexec/mysqld  Ver 5.1.69 for redhat-linux-gnu on i386 (Source distribution)

enter image description here

そのため、4.1.1以前のプロトコルがどこから来ているのかを理解するのに途方に暮れています。何か案は?

14
tlum

正しい質問をすると、答えを見つけやすくなると思います。

この場合、「私の」問題は、パスワードがハッシュされてデータベースに保存される方法に関連しています。従来のパスワードは、廃止された短いハッシュで保存されていました。

いくつかの重要なポイント:

mysql_upgradeはパスワードをアップグレードできません。また、一部のバージョンではパスワードについて警告もしません。 http://bugs.mysql.com/bug.php?id=65461 を参照してください。

ほとんどが最新のサーバーとクライアントを持っている場合でも、レガシーパスワードを作成するためにどこかでレガシークライアントを1つ使用するだけで、どのクライアントがそれを使用しようとしてもそのアカウントで問題が発生します。

異なるバージョンが状況を異なる方法で処理しているため、データベース内の一部のレガシーパスワードに座って、突然、明らかな理由もなく、一部のアカウントが機能しなくなります。これは、異なるバージョンが状況を処理する方法を選択したためです。

パスワードをアップグレードすることはできません。あなたはそれらが何であるかを知り、あなたはそれらを変えなければなりません。

編集:より明確にするために、より長いハッシュを使用する新しいクライアントを使用して、より短いハッシュで保存されているパスワードを変更する必要があります。そうすることで、アカウントのパスワードをより長いハッシュで記述します。その時点で、アカウントへのアクセス試行にフラグを立てるべきではありません。問題が再発する場合は、非推奨のハッシュ長でパスワードをまだ書いているサイトの古いクライアントを探す必要があります。

10
tlum

[サーバー接続の管理]、[接続]タブ、[詳細]サブタブのMySQL Workbench 6.08では、「古い認証プロトコルを使用」ボックスをオンにする必要があります。

9

ODBC Connector for Windowsを使用してPercona 5.5サーバーに接続しているときに_secure_auth_が無効になっています。

ODBCコネクタは、MySql Workbenchとは異なり、古い16バイトのハッシュされたパスワードを使用するログインを認証するオプションをサポートしていません。割り当て先は、機能のリクエストについて混乱している/混乱していた( bug#71234 を参照)。

次のコマンドを使用して、mysqlログインを更新して新しい41バイトのハッシュを使用することができました。

_ set old_passwords=0;
 set password=password('yourpasswordhere');
_

前述したように、サーバーでは_secure_auth_が無効になっているため、password()old_password()の結果を返すようです。 _set old_passwords=0;_を実行すると、password()メソッドが(セッション中に)新しい41バイトのハッシュを生成できるようになります。

3
STW

古いバージョンのドライバー3.51.30をインストールしてみてください: http://dev.mysql.com/downloads/connector/odbc/5.1.html#downloads 動作しますMysql Ver 5.0.24a-communityで

3
Sergey Bogdanov

MySQLデータベースにリモートでアクセスしようとすると、同様のエラーメッセージが表示されました。 Directadminを使用して、上記のようにMySqlデータベースのパスワードを簡単に変更しました。これにより、新しいハッシュ方式を使用してパスワードが自動的に生成されました。これにより、リモート接続の問題が即座に解決されました。

1
Shotputty

誰かがこれをヒットした場合の別の解決策を見つけました-非常に奇妙です-

  1. 5.1 64ビットをインストールしますODBCドライバー-ODBC接続自体が動作することを確認します。接続できる場合は、#2を実行した後にできるはずです
  2. [リンクサーバー-プロバイダー]をクリックし、MSDASQLを右クリックして、[プロパティ]をクリックします。
    • 「インプロセスを許可する」のチェックを外します-これは、TEXTフィールドとNTEXTフィールドを挿入する必要がない限り、良いことです。
  3. リンクサーバー接続を作成するか、競合している接続をテストします-lol

「Allow inprocess」にチェックマークを付けても、ODBCシステムDSNは正常に機能しましたが、5.2(正常に機能するサーバーと)が混在していたため、 5.1を使用していないサーバーでは、5.1ドライバーがそのエラーを出さないため、SQLはプロセスを共有していました。

0
Mike

サーバーを変更できない場合は、おそらくクライアントを変更できます。 http://bugs.mysql.com/bug.php?id=75425

0
niczero