web-dev-qa-db-ja.com

エラー:mysqlndは古い安全でない認証を使用してMySQL 4.1+に接続できません

次のエラーが表示されます。

データベース接続に失敗しました:mysqlndは、古い安全でない認証を使用してMySQL 4.1+に接続できません。コマンドSET PASSWORD = PASSWORD('your_existing_password')を使用して、管理ツールを使用してパスワードをリセットしてください。

これにより、新しい安全なハッシュ値がmysql.userに保存されます。このユーザーがPHP 5.2以前で実行される他のスクリプトで使用されている場合、my.cnfファイルからold-passwordsフラグを削除する必要がある場合があります

ローカルマシンでPHP 5.3.8およびMySQL 5.5.16を使用しており、ホスト(メディアテンプル)でPHP 5.3 MySQL 5.0.51aを実行しています。ライブサーバー上のバージョンは、私のマシン上のバージョンよりも古いです。

このエラーを修正し、ローカルマシンからMySQLに接続するにはどうすればよいですか?

私はこれに似た投稿があることを知っていますが、すべて試してみましたが、どれも機能していません。

23
user982853
  • My.cnfでold_passwords = 1を削除またはコメント化します

MySQLを再起動します。そうしないと、MySQLは古いパスワード形式を使用し続けます。つまり、組み込みのPASSWORD()ハッシュ関数を使用してパスワードをアップグレードすることはできません。

古いパスワードハッシュは16文字、新しいパスワードハッシュは41文字です。

  • データベースに接続し、次のクエリを実行します。

    SELECT user, Length(`Password`) FROM  `mysql`.`user`;
    

これにより、どのパスワードが古い形式であるかが表示されます。例:

 + ---------- + -------------------- + 
 |ユーザー|長さ( `パスワード`)| 
 + ---------- + -------------------- + 
 |ルート| 41 | 
 |ルート| 16 | 
 | user2 | 16 | 
 | user2 | 16 | 
 + ---------- + -------------------- +

ここで、各ユーザーが複数の行(異なるホスト仕様ごとに1行)を持つことができることに注意してください。

各ユーザーのパスワードを更新するには、次を実行します。

UPDATE mysql.user SET Password = PASSWORD('password') WHERE user = 'username';

最後に、特権をフラッシュします。

FLUSH PRIVILEGES;

ソース: PHP5.3で「古い認証を使用してmysqlndがMySQL 4.1+に接続できない」の修正方法

40

古いパスワードがデフォルトでサーバーによって有効にされていたため、単純なSET PASSWORD FOR 'some-user' @ '%' = PASSWORD( 'XXXX');動作しません(理由は古いソフトウェアと私が入らないレガシーのためです...)

解決 :

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;

詳細:

ログインしたユーザーとしてこれを行う

SET Password = PASSWORD('password')

単に機能しませんでした

例えばここでテスト可能

SHOW CREATE TABLE `mysql`.`user`;

パスワードはからにシフトしません

| Host | USER | PASS |

以前のパスワード

| % | some-user | 7fa559aa33d844b4 |

私が望んだこと、例えば新しいパスワード

| % | some-user | *CF04AECA892176E6C0C8206F965C03374D12F93E |

そこで、古いパスワードの変数を調べました

SHOW VARIABLES;

...
old_passwords = ON
...

したがって、基本的にmysqlサーバー変数をold_password = OFFに設定する必要がありました。たとえば、これは私のために働きました

SET old_passwords = 0;
SET PASSWORD FOR 'some-user'@'%' = PASSWORD ('XXXX');
FLUSH PRIVILEGES;
3
aqm

ターゲットのMysqlサーバーを設定して、古い安全でない認証を許可します。

http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_old-passwords

ターゲットMysqldサーバーのmy.cnfファイルで、old_passwordsをコメントアウトします。

おそらく、互換性のある(古い)認証モードを使用するPHP build(または自分でビルド)を取得する方法があります。

2
rkosegi

ローカルWindowsマシンでIISを使用してmediatemple external-dbに接続しようとすると、同じ問題が発生しました。特定のdbユーザーのパスワードを更新すると、データベースへの接続の問題が解決しました。

(mt)アカウントセンター内で、パスワードを更新するだけです。同じパスワードを使用して、すべての問題を解決しました。

2
Joe K

グリッドサーバー上のMedia Temple dbで初めてこのエラーに遭遇しました。

この問題は、古いパスワード形式のままのデータベースユーザーにパスワードを使用したために発生しました。新しい形式では、10以上の文字、特殊文字、数字などが必要です。

新しいデータベースユーザーとパスワードを新しい形式で作成しましたが、うまく機能しました。

0
INSITE MOBILE

MySQLの古いバージョンからデータベースをインポートしたときにこの問題が発生しました。最大の問題-ルートユーザーでMySQLに接続できなかったため、reset the root password以下の指示に従ってください。

この後、上記の修正を適用することができました。

例えば。沿って:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
0
littledynamo

私は同じ問題を抱えており、これはこの問題を解決するために行ったすべての手順です:

  1. 正しい資格情報を使用しているかどうかを確認してください
  2. このコマンドを使用して、パスを確実に変更してください。文字、数字、および文字(10以上)を使用してください。

    UPDATE mysql.user SET Password = PASSWORD( 'NewPassword')WHERE user = 'username';

  3. /etc/my.cnfのoldpassword値をコメント化してください
  4. mysqlサービスを再起動して、他の問題を回避します
0
abdelaziz barda