Eski kimlik doğrulaması kullanarak MySQL 4.1 + bağlanamıyor

7 Cevap php

I http://bluesql.net bir mySQL veritabanına bağlanmak için çalışıyorum, ama ben bağlanmaya çalıştığınızda, bu hata veriyor:

Connect Error (2000) mysqlnd cannot connect to MySQL 4.1+ using old authentication

Ben bu içine baktım ve MySQL 4.1 önce kullanılan bazı eski şifre düzeni ile ilgisi yoktur. Yeni sürümleri bu soruna neden olabilir okudum eski şifreleri kullanmak seçeneği var.

Ben php 5.3 çalıştıran ve mysqli (yeni mysqli (...)) ile bağlıyorum. Açıkça ben kendi veritabanı kurmak nasıl kontrol etmiyoruz - Ben bluesql.net de DB bağlanmak için ben kod şey yapabilirsiniz umuyorum. Php sürümleri Downgrading bir seçenek değildir.

Herkes herhangi bir fikir var mı?

7 Cevap

edit: Eğer MySQL sunucusu kontrol eğer Mysql password hashing method old vs new bakmak değil, eğer bu sadece ... geçerlidir

SQL sorgusu ile ilk onay

SHOW VARIABLES LIKE 'old_passwords'

(in the MySQL command line client, HeidiSQL or whatever frontend you like) whether the server is set to use the old password schema by default. If this returns old_passwords,Off you just happen to have old password entries in the users tables. The MySQL will use the old authentication routine for these accounts. But you can simply set a new password for the account and the new routine will be used.
You can check which routine will be used by taking a look at the mysql.users table (with an account that has access to that table)

SELECT `User`, `Host`, Length(`Password`) FROM mysql.user

This will return 16 for accounts with old passwords and 41 for accounts with new passwords (and 0 for accounts with no password at all, you might want to take care of those as well).
Either use the user managements tools of the MySQL front end (if there are any) or

SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges

(Eğer 'önceki sorgudan aldım değerleri ile kullanıcı ve Sunucuyu değiştirin). Sonra tekrar şifre uzunluğunu kontrol. Şimdi 41 olmalı ve mysqlnd sunucuya bağlanmak gerekir.

see also: 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

If you do not have control of the server

Ben sadece bu sorunu vardı ve etrafında çalışmak başardı.

Birincisi, old_passwords akla gelmez bir eski müşteri ile MySQL veritabanına bağlanmak. Script kullanarak olacak kullanıcı kullanarak bağlayın.

Bu sorguları çalıştırın:

SET SESSION old_passwords=FALSE;
SET PASSWORD = PASSWORD('[your password]');

PHP komut, istemci bayrak 1 eklemek için mysql_connect işlevini değiştirebilirsiniz:

define('CLIENT_LONG_PASSWORD', 1);
mysql_connect('[your server]', '[your username]', '[your password]', false, CLIENT_LONG_PASSWORD);

Bu bana başarıyla bağlanmak için izin.

Edit: Garland Papa'nın Yorumlarınız başı olarak, PHP 5.4 olarak PHP kodu bir daha elle CLIENT_LONG_PASSWORD ayarlamak gerekli olmayabilir!

Eğer mysql sorgu tarayıcı veya bir şey bu çizgi yapabilirsiniz

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;

Not: Kullanıcı adınızı ve şifrenizi

çalışmak mümkün olmalıdır sonra. Ben sadece çok benimkini çözüldü

OSX, benim siteground veritabanına bağlanırken aynı sorunu çözmek için MacPorts kullanılır. SiteGround sorunu çözmek değil 5.0.77mm0.1-kaydını kullanarak, ama yeni bir kullanıcı hesabı oluşturma gibi görünüyor. Bu ne yaptım

sudo port install php5-mysql -mysqlnd +mysql5

Bu php mysql sürücü kullanacak düşürdü.

Aynı sorunu vardı, ancak tek başına sorguları yürütme yardımcı olmayacaktır. Ben şu ki, bu düzeltmek için,

  1. My.cnf dosyasında old_passwords = 0 olarak ayarlayın
  2. Yeniden mysql
  3. Root olarak mysql giriş
  4. FLUSH PRIVILEGES yürütmek;

(Yani bir barındırma hizmeti kullanan) MySQL Server yapılandırması için Yönetici erişiminiz yoksa, o zaman bu işe almak için 2 seçenek vardır:

Old_passwords seçeneği MySQL sunucusu üzerinde yanlış ayarlanmış olması 1) Talebi

Opsiyon 1 oluşuncaya kadar 2) 5.2.2 PHP Düşürme.

Ben bulmak mümkün oldum ne gelen, konu 'old_passwords' ayarı true olarak ayarlanmış ise MySQL hesap şifreleri saklanır ve nasıl sahip gibi görünüyor. Bu MySQL ve PHP yeni sürümleri PHP 41-karakterlik özetini fakat MySQL sunucu hala 16 karakterlik hash kullanarak hesap şifrelerini depoluyor kullanarak bağlanmaya çalışır (5.3 +) arasında bir uyumluluk sorunu neden olur.

Ve MySQL dahil: Bu uyumsuzluk, kısa hem de uzun karma (http://dev.mysql.com/doc/refman/5.5/en/password-hashing.html MySQL sitesinden bu sayfada Senaryo 2) uzunlukları için izin MySQL 4.1 kullanılan karma yöntemin değiştirilmesi ile ilgili getirildi PHP 5.3 Native Driver (geriye doğru uyumluluk sorunu PHP belgelerine bu sayfanın mermi 7 belgelenmiştir: http://www.php.net/manual/en/migration53.incompatible.php).

, IF

  1. Paylaşılan bir hosting kullanıyorsanız, ve root erişimi yok.
  2. localhost değil: bir uzak veritabanı yani bağlanırken söz konusu hatayı alıyorsanız.
  3. ve Xampp kullanarak.
  4. ve kod canlı sunucuda iyi çalışıyor, ama sorun yalnızca geliştirme makine çalışan xampp üzerinde.

Daha sonra,

Bu yüklemeniz highly recommended olup xampp 1.7.0 . Download Link

Not: Bu yukarıdaki soruna bir çözüm, ancak gelişimi ile devam etmek için izin verecek bir Düzeltme değildir.