phpMyAdmin 不能進入的問題

更新 mysql 版本以後,尤其是從 4.0.x 到 4.1.x,發生 phpMyAdmin 有以下的問題:

  • 如果 root 密碼是空的,可以登入。
  • 如果 root 密碼改了以後,不是空的,無法登入,且有以下的訊息
    #1251 - Client does not support authentication protocol requested by server; consider upgrading MySQL client

原因是因為 mysql 4.1.x 以後,可能是因為安全性的理由,密碼的演算法更新了,這個演算法,只能在 4.1.x 以後的版本以及新的 client 端可以用。

根據官方的說法 如下:

Client does not support authentication protocol requested by server; consider upgrading MySQL client.

To solve this problem, you should use one of the following approaches:

  • Upgrade all client programs to use a 4.1.1 or newer client library.
  • When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.
  • Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function:mysql> SET PASSWORD FOR
        -> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');

    Alternatively, use UPDATE and FLUSH PRIVILEGES:

    mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
        -> WHERE Host = 'some_host' AND User = 'some_user'; mysql> FLUSH PRIVILEGES;

    Substitute the password you want to use for “newpwd” in the preceding examples. MySQL cannot tell you what the original password was, so you'll need to pick a new one.

  • Tell the server to use the older password hashing algorithm:
    • Start mysqld with the --old-passwords option.
    • Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query:mysql> SELECT Host, User, Password FROM mysql.user
          -> WHERE LENGTH(Password) > 16;

      For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.

以上的情形,在 Win32s 底下最常發生,解決方式以是在 MySQL Command Line Client 打入密碼登入後,執行以下指令最快:

SET PASSWORD FOR root@localhost = OLD_PASSWORD('passwd');



4 thoughts on “phpMyAdmin 不能進入的問題