次のエラーが表示されます。
データベース接続に失敗しました: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に接続するにはどうすればよいですか?
私はこれに似た投稿があることを知っていますが、すべて試してみましたが、どれも機能していません。
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;
古いパスワードがデフォルトでサーバーによって有効にされていたため、単純な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;
ターゲットのMysqlサーバーを設定して、古い安全でない認証を許可します。
http://dev.mysql.com/doc/refman/5.0/en/server-options.html#option_mysqld_old-passwords
ターゲットMysqldサーバーのmy.cnfファイルで、old_passwordsをコメントアウトします。
おそらく、互換性のある(古い)認証モードを使用するPHP build(または自分でビルド)を取得する方法があります。
ローカルWindowsマシンでIISを使用してmediatemple external-dbに接続しようとすると、同じ問題が発生しました。特定のdbユーザーのパスワードを更新すると、データベースへの接続の問題が解決しました。
(mt)アカウントセンター内で、パスワードを更新するだけです。同じパスワードを使用して、すべての問題を解決しました。
グリッドサーバー上のMedia Temple dbで初めてこのエラーに遭遇しました。
この問題は、古いパスワード形式のままのデータベースユーザーにパスワードを使用したために発生しました。新しい形式では、10以上の文字、特殊文字、数字などが必要です。
新しいデータベースユーザーとパスワードを新しい形式で作成しましたが、うまく機能しました。
MySQLの古いバージョンからデータベースをインポートしたときにこの問題が発生しました。最大の問題-ルートユーザーでMySQLに接続できなかったため、reset the root password
以下の指示に従ってください。
この後、上記の修正を適用することができました。
例えば。沿って:
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
私は同じ問題を抱えており、これはこの問題を解決するために行ったすべての手順です:
UPDATE mysql.user SET Password = PASSWORD( 'NewPassword')WHERE user = 'username';