Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb

B.5.2.4 クライアントは認証プロトコルに対応できません

認証プロトコルの現在の実装は、古い (4.1 より前) クライアントによって使用されるアルゴリズムと互換性がないパスワードハッシュアルゴリズムを使用しています。古いクライアントを使用して 4.1 以降のサーバーに接続しようとすると、次のメッセージが表示されて失敗することがあります。

shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

この問題に対処する場合、推奨される解決方法はすべてのクライアントプログラムをアップグレードして、4.1.1 以降のクライアントライブラリが使用されるようにすることです。これを行うことができない場合は、次のいずれかの方法を使用します。

  • 4.1 より前のクライアントプログラムを使用してサーバーに接続する場合に、4.1 より前のスタイルのパスワードを持つアカウントを使用します。

  • 4.1 より前のクライアントプログラムを使用する必要がある各ユーザーのパスワードを 4.1 より前のスタイルにリセットします。これは、SET PASSWORD ステートメントおよび OLD_PASSWORD() 関数を使用して行うことができます。MySQL 5.6.6 の時点では、アカウントの認証プラグインが mysql_old_password であることも最初に確認する必要があります。

    mysql> UPDATE mysql.user SET plugin = 'mysql_old_password'
    mysql> WHERE User = 'some_user' AND Host = 'some_host';
        -> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

    上記の例では、newpwd を使用するパスワードに置き換えます。MySQL は元のパスワードを教えることはできないため、新しいパスワードを指定する必要があります。

  • 古いパスワードハッシュアルゴリズムをデフォルトで使用することをサーバーに通知します。

    1. old_passwords システム変数に 1 を設定して、mysqld を起動します。

    2. 長い 4.1 形式のパスワードにアップデートされた各アカウントに、古い形式のパスワードを割り当てます。これらのアカウントは次のクエリーを使用して識別できます。

      mysql> SELECT Host, User, Password FROM mysql.user
          -> WHERE LENGTH(Password) > 16;

      そのクエリーによって表示された各アカウントレコードについて、Host 値および User 値を使用し、前述したいずれかの方法を使用してパスワードを割り当てます。

「クライアントは認証プロトコルに対応できません」というエラーは、複数のバージョンの MySQL がインストールされているが、クライアントプログラムが動的にリンクされ、古いライブラリにリンクされる場合にも発生することがあります。クライアントが互換性のある最新のライブラリバージョンを使用していることを確認してください。これを行う手順はシステムによって異なります。


PHP の mysql 拡張は、MySQL 4.1.1 以降の認証プロトコルをサポートしていません。これは使用している PHP バージョンに関係なく当てはまります。mysql 拡張を MySQL 4.1 以降とともに使用する場合は、古いクライアントとともに動作するように MySQL を構成するために、前述のいずれかの方法を使用する必要があることがあります。mysqli 拡張 (PHP 5 で追加された「MySQL Improved」を意味します) は MySQL 4.1 以降で採用されている改善されたパスワードハッシュと互換性があり、この MySQL クライアントライブラリを使用するために MySQL で特別な構成を行う必要はありません。mysqli 拡張については、を参照してください。

パスワードハッシュおよび認証の背景情報については、セクション6.1.2.4「MySQL でのパスワードハッシュ」を参照してください。

User Comments
  Posted by Kristiono Setyadi on May 14, 2008
If you are using PHPMyAdmin, just go the the "Privileges" tab.
Edit the user containing username and host you want to use with. In the "Change Password" box below, you can choose whether using password or no. The solution is in there: Choose "MySQL 4.0 Compatible" and "Go".

I have solved my problem using this simple way.
  Posted by Max Power on August 17, 2010
I had a 4.1 server which was still configured to generate only old passwords (16 digit) and a newer client which did not support old passwords. I could modify neither the server nor the client configuration.

On the client side, I used the following command to generate a 41-digit password:
SELECT PASSWORD('blablabla');

Then on the server side, I set the password to this 41-digit string:
SET PASSWORD FOR 'bob'@'somehost' = '*73C98624E32963F3D4828B9398FD3F67B8D58E40'

The client then connected flawlessly to the server.
  Posted by Glenn Bullock on November 23, 2010
I'm on Snow Leopard, Intel MacBook Pro, and finally had to install the mysql gem by hand (I was getting the "uninitialized constant MysqlCompat::MysqlRes" error).

The mysql download for Snow Leopard had the client libraries on board, I just had to give the ruby extconf.rb script the needed paths (ruby extconf.rb --with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib --with-mysql-include=/usr/local/mysql/include), and make sure permissions on those files and directories were right.

I used the mysql-ruby-2.8.2.tar.gz version.

Once I make install-ed it, things worked. Thanks for all the help.
  Posted by Toni Cordon Batlle on June 28, 2011
This can occurr if you set an incorrect "Plugin" on "User" table in "mysql" database.

Connecting from PHP using Authentication parameters, from a user with incorrect "Plugin", makes PHP can't connect, and shown the error message "Warning: mysql_connect() [function.mysql-connect]: Client does not support authentication protocol requested by server; consider upgrading MySQL client"

Best regards
  Posted by Charles Peterson on June 4, 2013
--secure-auth is default on after 5.6.?

you may need to disable this also if using an old mysql client.
Sign Up Login You must be logged in to post a comment.