http://bluesql.net でmySQLデータベースに接続しようとしていますが、接続しようとするとこのエラーが発生します。
Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication
私はこれを調べましたが、MySQL 4.1より前に使用されていた古いパスワードスキームに関係しています。新しいバージョンには古いパスワードを使用するオプションがありますが、私が読んだことでこの問題が発生する可能性があります。
Php 5.3を実行し、mySQLiで接続しています(新しいmysqli(...))。 bluesql.netのDBに接続するために、コードで何かできることを望んでいます。明らかに、データベースのセットアップ方法を制御していません。 PHPバージョンのダウングレードはオプションではありません。
誰にもアイデアはありますか?
編集:これは、MySQLサーバーを制御している場合にのみ適用されます... MySQLパスワードハッシュ方式の古い方法と新しい方法
SQLクエリで最初に確認する
SHOW VARIABLES LIKE 'old_passwords'
(MySQLコマンドラインクライアント、 HeidiSQL または任意のフロントエンド)サーバーがデフォルトで古いパスワードスキーマを使用するように設定されているかどうか。これがold_passwords,Off
を返す場合、たまたまuser
テーブルに古いパスワードエントリがあります。 MySQLサーバーは、これらのアカウントに古い認証ルーチンを使用します。アカウントに新しいパスワードを設定するだけで、新しいルーチンが使用されます。
mysql.user
テーブルを見ると、どのルーチンが使用されるかを確認できます(そのテーブルにアクセスできるアカウントで)
SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
これは、古いパスワードを持つアカウントの場合は16を、アカウントの場合は41を返します新しいパスワード(およびパスワードをまったく持たないアカウントの場合は0、それらの世話をすることもできます)。
MySQLフロントエンドのユーザー管理ツールを使用する(存在する場合)または
SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges;
(User
とHost
を前のクエリから取得した値に置き換えます。)パスワードの長さをもう一度確認します。これは41になり、クライアント(mysqlndなど)がサーバーに接続できるはずです。
mySQLのドキュメントも参照してください:* http://dev.mysql.com/doc/refman/5.0/en/old-client.html
* http://dev.mysql.com/doc/refman/5.0/en/password-hashing.html
* http://dev.mysql.com/doc/refman/5.0/en/set-password.html
これらの行は、mysqlクエリブラウザなどで実行できます。
SET old_passwords = 0;
UPDATE mysql.user SET Password = PASSWORD('testpass') WHERE User = 'testuser' limit 1;
SELECT LENGTH(Password) FROM mysql.user WHERE User = 'testuser';
FLUSH PRIVILEGES;
注:ユーザー名とパスワード
その後、動作するはずです。私も自分で解決しました
OSXでは、Macgroundsを使用して、サイトグラウンドデータベースに接続するときに同じ問題に対処しました。 Sitegroundは5.0.77mm0.1-logを使用しているようですが、新しいユーザーアカウントを作成しても問題は解決しませんでした。これがやったことです
Sudo port install php5-mysql -mysqlnd +mysql5
これにより、phpが使用するmysqlドライバーがダウングレードされます。
同じ問題がありましたが、クエリだけを実行しても役に立ちません。これを修正するために、次のことを行いました。
MySQL Server構成への管理者アクセス権がない場合(つまり、ホスティングサービスを使用している場合)、これを機能させるための2つのオプションがあります。
1)MySQLサーバーでold_passwordsオプションをfalseに設定することを要求します
2)オプション1が発生するまでPHPを5.2.2にダウングレードします。
私が見つけることができたものから、問題はMySQLアカウントのパスワードがどのように保存されているか、「old_passwords」設定がtrueに設定されている場合にあるようです。これにより、MySQLとPHP(5.3+)の新しいバージョンの間で互換性の問題が発生します。ここでPHPは41文字のハッシュを使用して接続を試みますが、MySQLサーバーはそれでも16文字のハッシュを使用してアカウントパスワードを保存します。
この非互換性は、短いハッシュと長いハッシュの両方を許可するMySQL 4.1で使用されるハッシュ方式の変更によってもたらされました(MySQLサイトのこのページのシナリオ2: http://dev.mysql.com/ doc/refman/5.5/en/password-hashing.html )およびMySQL Native DriverのPHP 5.3(このページの箇条書き7で文書化された後方互換性の問題) PHP documentation: http://www.php.net/manual/en/migration53.incompatible.php )。
IF
その後、
それは 強くお勧めします あなたがインストールする xampp 1.7.0 。 リンクのダウンロード
注:これは上記の問題の解決策ではありませんが、開発を続行できるようにするFIXです。