11

似たような質問がたくさんあることは知っていますが、実際、私はそれらすべて (9) を読みました。

しかし、どれも私の問題を解決しません。

共有ホスティング パッケージ (最小) を持っています。私のパッケージには、ドメイン名と、MySQL サーバーがホストされている別の IP アドレスが含まれています。開発にはhttp://localhost/、PHP 5.4 の開発サーバーを使用しており、ホスティング パッケージに含まれている MySQL サーバーを使用しています。

PHP 5.4 をインストールしたため、問題が発生するのは私の PC だけですが、Web ホストには PHP 5.2.17 がインストールされており、アップグレードされません。MySQL サーバーは MySQL 5.1.50 上にあります。

幸いなことに、phpMyAdmin には「パスワードの変更」機能が組み込まれています。

phpMyAdmin には、パスワードを変更するための 2 つのハッシュ オプションがあります。

  • MySQL 4.1+
  • MySQL 4.0 互換

MySQL 4.1+ オプションでパスワードを変更したところ、更新が成功したことが確認されました。

プロフィールを更新しました。SET PASSWORD = PASSWORD( '***' )

ただし、このクエリを実行すると:

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

パスワードの長さはまだ16であることがわかります。出力:

1     1     16

そして、問題は解決しません。

データベースに接続できません。SQLSTATE[HY000] [2000] mysqlnd は、古い安全でない認証を使用して MySQL 4.1+ に接続できません。管理ツールを使用して、コマンド SET PASSWORD = PASSWORD('your_existing_password') でパスワードをリセットしてください。これにより、新しい、より安全なハッシュ値が mysql.user に保存されます。このユーザーが PHP 5.2 以前で実行される他のスクリプトで使用されている場合、my.cnf ファイルから old-passwords フラグを削除する必要がある場合があります。

また、phpMyAdmin で DBO ユーザーとしてログインしたときに、これらのクエリを実行しようとしました。

SET SESSION old_passwords=0; 
[phpMyAdmin reloads to the home screen, but the value remains = 1]

SET GLOBAL old_passwords = 0;
#1227 - Access denied; you need the SUPER privilege for this operation

FLUSH PRIVILEGES;
#1227 - Access denied; you need the RELOAD privilege for this operation

これは、DBO ユーザーを設定するための Web ホストのメニューに記載されている内容と矛盾しています。

データベース所有者
新しいデータベースを作成するときは、データベース所有者 (DBO) ユーザーを指定する必要があります。このユーザー
には、データベースへの完全な管理者アクセス権があります。

これは私がウェブホストに相談しなければならないことですか? それとも、私の DBO ユーザーが解決できますか? それ以外の場合、これは PHP でバイパスできますか? (PHP 5.2.17 では動作しますが、PHP 5.4 では動作しないため)

4

3 に答える 3

32

解決しました!

SET SESSION old_passwords=0;phpMyAdminでは機能していませんでしたが。

MySQL GUIツールをダウンロードし、MySQLクエリブラウザを使用して、DBO以外のユーザーに対して同じコマンドを実行しました。

SET SESSION old_passwords = 0;

SELECT @@global.old_passwords, @@session.old_passwords, Length(PASSWORD('abc'));

今返される:

1      0      41

だから私は単にパスワードを変更しました:

SET PASSWORD = PASSWORD('my_old_password')

そして今、PHP 5.4 PDOはそのユーザーでデータベースに接続します!

于 2012-05-02T22:20:17.970 に答える
3

ではphpMyAdmin、セッション変数の設定は機能しますが、パスワード関数の呼び出しは同じセッション/実行で発生する必要があります。

たとえば、次のように実行すると:

SET SESSION old_passwords = 0;
SET PASSWORD = PASSWORD('notagoodpassword');

正しく設定してくれます。

于 2015-03-12T02:49:53.657 に答える