Mysql

連接錯誤 (2054) - mysql_old_password 問題仍未解決

  • May 30, 2018

我使用 PHP 5.4.3,並且我想使用普通的物件導向程式 (OOP) 方式遠端連接到 MySQL 數據庫(為簡潔起見,DB)(PHP 腳本駐留在與 DB 不同的伺服器上):

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

我得到了錯誤:

警告:mysqli::mysqli():伺服器請求客戶端未知的身份驗證方法

$$ mysql_old_password $$ 連接錯誤 (2054) 伺服器請求客戶端未知的身份驗證方法

我找到了這個這個,但它們似乎沒有幫助。我使用了 PHP 5.2.9,一切正常,但降級 PHP 版本對我來說不是解決方案。

我還必須提到,我沒有完全訪問數據庫設置的權限,因為客戶端沒有給我這種訪問權限。我告訴他向 Hostgator 尋求更新的密碼格式支持,但他們回答說他們不能做任何我不期望的事情。我從另一台遠端伺服器上做了新的努力,現在我得到了這個:

連接錯誤 (1045) 使用者 ‘user’@‘host’ 的訪問被拒絕(使用密碼:YES)

通過使用 PHP 5.3.9。由於遠端伺服器的 PHP 腳本,數據庫似乎沒有“讓我進入”,但使用 Oracle 的 Workbench 一切正常。

謝謝你的時間。

PHP 一定希望使用舊的 MySQL 身份驗證外掛算法。您不必重新啟動 mysql。由於old_passwords是一個全域動態選項,您所要做的就是執行以下命令:

SET GLOBAL old_passwords = 1;

此外,請將其添加到/etc/my.cnf

[mysqld]
old_passwords=1

讓未來重新啟動保留此設置。

為了進一步驗證是否需要這樣做,下次登錄 mysql 時,執行這個

SELECT LENGTH(password) password_length,COUNT(1) length_count
FROM mysql.user GROUP BY LENGTH(password);

如果沒有一個密碼長度為 16,這可以解釋 PHP 不願登錄的原因。

遺憾的是,另一種方法是設置 16 個字元的密碼,但您不能對 41 個字元的密碼進行逆向工程。您必須使用原始純文字值手動設置 16 個字元的密碼。

例如,如果 root@localhost 有 ‘helloworld’ 作為密碼,它會使用OLD_PASSWORD函式對其進行轉換。這是一個比較:

mysql> select password('helloworld');
+-------------------------------------------+
| password('helloworld')                    |
+-------------------------------------------+
| *D35DB127DB631E6E27C6B75E8D376B04F64FAF83 |
+-------------------------------------------+
1 row in set (0.00 sec)

mysql> select old_password('helloworld');
+----------------------------+
| old_password('helloworld') |
+----------------------------+
| 6c755a9e66debe8a           |
+----------------------------+
1 row in set (0.00 sec)

mysql>

啟動old_passwords後,要對其進行轉換,您必須執行以下操作:

UPDATE mysql.user
SET password = OLD_PASSWORD('helloworld')
WHERE password = PASSWORD('helloworld');
FLUSH PRIVILEGES;

更新 2013-02-02 22:44 EDT

如果此時更改 MySQL 端的身份驗證樣式對您不起作用,我有一些壞消息要告訴您。你之前說過:

我使用了 php 5.2.9,一切正常,但降低 php 對我來說不是解決方案。我還必須提到我沒有完全訪問數據庫設置的權限,因為客戶端沒有給我完全訪問權限。

畢竟你可能需要降級 PHP。如果您的託管服務提供商不合適或不願意調整 MySQL 或為您提供降級的 PHP,您將不得不與一家託管服務提供商合作。

作為替代方案,當您可以在執行後完全控制所有軟體升級時,您可能希望查看 Amazon EC2 sudo -s。您之前提到的連結為您提供了您需要知道的內容。我給了你可以做些什麼來適應 MySQL 方面。做你知道必須做的事情來解決這個問題。

有多種解決方案,但在大多數情況下,除非您有權訪問並能夠:

  1. 降級 PHP
  2. 升級 MYSQL 庫以匹配伺服器上的 MYSQL 版本。
  3. 更改 my.cnf 文件

註釋掉 OLD_PASSWORDS = 1

重啟mysql

使用所需密碼創建或修改使用者

取消註釋 OLD_PASSWORDS = 1

重啟mysql

引用自:https://dba.stackexchange.com/questions/33447