2012-05-02 12 views
11

का उपयोग कर MySQL 4.1+ से कनेक्ट नहीं हो सका, मुझे पता है कि समान प्रश्नों का एक टन है, वास्तव में मैंने उनमें से सभी (9) पढ़े हैं।PHP 5.4 पीडीओ पुराने असुरक्षित प्रमाणीकरण

हालांकि, उनमें से कोई भी मेरी समस्या का समाधान नहीं करता है।

मेरे पास साझा-होस्टिंग पैकेज (न्यूनतम) है। मेरे पैकेज में क्या शामिल है डोमेन नाम है, और एक अलग आईपी पता है जहां MySQL सर्वर होस्ट किया गया है। विकास के लिए, मैं PHP 5.4 के विकास सर्वर के साथ http://localhost/ का उपयोग कर रहा हूं, और मैं अपने होस्टिंग पैकेज में प्राप्त MySQL सर्वर का उपयोग कर रहा हूं।

समस्या केवल मेरे पीसी पर उत्पन्न होती है, क्योंकि मैंने PHP 5.4 स्थापित किया है, लेकिन मेरे वेब होस्ट ने PHP 5.2.17 स्थापित किया है और अपग्रेड नहीं करेगा। MySQL सर्वर MySQL 5.1.50 पर है।

सौभाग्य से, phpMyAdmin में एक अंतर्निहित "पासवर्ड बदलें" सुविधा है।

वहाँ एक पासवर्ड बदलने के लिए phpMyAdmin में दो हैशिंग विकल्प हैं:

  • MySQL 4.1+
  • MySQL 4.0 संगत

मैं MySQL 4.1+ विकल्प के साथ पासवर्ड बदल दिया है, और यह पुष्टि की कि अद्यतन सफल रहा था।

प्रोफ़ाइल अद्यतन कर दी गई है। SET PASSWORD = PASSWORD('***')

हालांकि, जब मैं इस क्वेरी निष्पादित:

1  1  16 

और इसलिए समस्या:

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

यह मेरे पासवर्ड लंबाई बताता है अभी भी 16. आउटपुट है बनी हुई है।

डेटाबेस से कनेक्ट नहीं हो सका। SQLSTATE [HY000] [2000] mysqlnd पुराने असुरक्षित प्रमाणीकरण का उपयोग कर MySQL 4.1+ से कनेक्ट नहीं हो सकता है। SET PASSWORD = PASSWORD ('your_existing_password') आदेश के साथ अपना पासवर्ड रीसेट करने के लिए कृपया एक व्यवस्थापन टूल का उपयोग करें। यह mysql.user में एक नया, और अधिक सुरक्षित, हैश मान संग्रहीत करेगा। इस प्रयोक्ता या उससे पहले पीएचपी 5.2 द्वारा निष्पादित अन्य लिपियों में प्रयोग किया जाता है, तो आप

मैं भी इन प्रश्नों करने की कोशिश की है, तो आपके my.cnf फ़ाइल से पुराने पासवर्ड झंडा दूर करने के लिए आवश्यकता हो सकती है, जब साथ में लॉग इन phpMyAdmin में डीबीओ उपयोगकर्ता:

डाटाबेस मालिक
आप एक नया डेटाबेस बनाते हैं, y:

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 

यह वही है डीबीओ उपयोगकर्ता की स्थापना के लिए webhost के मेनू में कहा गया है के विपरीत है कहां डेटाबेस डेटाबेस (डीबीओ) उपयोगकर्ता निर्दिष्ट करने की आवश्यकता है, जिसमें
डेटाबेस के लिए पूर्ण व्यवस्थापक पहुंच होगी।

क्या मुझे ऐसा कुछ है जो मुझे अपने वेबहोस्ट के साथ लेना है? या इसे मेरे डीबीओ उपयोगकर्ता द्वारा हल किया जा सकता है? अन्यथा यह PHP में बाईपास किया जा सकता है? (चूंकि यह PHP 5.2.17 के साथ काम करता है लेकिन PHP 5.4 नहीं)

+1

वे PHP 5.2.17 (2011-01-06) और MySQL 5.1.50 (2010-08-03) पर फंस गए हैं और अपग्रेड नहीं करेंगे? मैं कहूंगा कि एक नए मेजबान में जाएं। लेकिन इसके बावजूद, आपको हमेशा इस तरह की समस्या से बचने के लिए, उसी संस्करण के साथ स्थानीय रूप से विकसित और परीक्षण करना चाहिए। –

उत्तर

32

हल हो गया!

हालांकि SET SESSION old_passwords=0; phpMyAdmin में काम नहीं कर रहा था।

मैं MySQL GUI Tools डाउनलोड किया है और गैर डीबीओ उपयोगकर्ता पर एक ही आदेश पर अमल करने MySQL क्वेरी ब्राउज़र का उपयोग:

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 पीडीओ उस उपयोगकर्ता के साथ डेटाबेस से जुड़ता है!

+2

यह मेरे लिए काम किया, उत्कृष्ट आदमी! – hiennt

+2

हां, अच्छा काम :) MySQL कंसोल –

+1

के माध्यम से भी अच्छी तरह से काम किया मेरे लिए भी काम किया! –

3

phpMyAdmin में, सत्र चर सेट करने पर काम करेगा, लेकिन पासवर्ड फ़ंक्शन पर कॉल उसी सत्र/निष्पादन में होना चाहिए।

उदाहरण के लिए

, अगर मैं निष्पादित करें:

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

यह सही ढंग से सेट हो जाएगा।

+0

यह जानना अच्छा है कि यह पीएमए से भी काम करता है – qdev

+0

बहुत बहुत धन्यवाद :) दोनों को निष्पादित करना किसी भी अन्य समाधान की तुलना में मेरे लिए एक ही समय में पूछताछ –

+0

यह मेरे लिए काम किया। धन्यवाद! :-) – Jacob

-1

इस समाधान ने काम किया: सेट सत्र old_passwords = 0;

लेकिन मुझे बाद में "पुरानी" उपयोगकर्ताफ्रॉस्टिंग तालिका छोड़नी पड़ी और इसे नया बनाना पड़ा - फिर यह एक आकर्षण की तरह काम करता था।

संबंधित मुद्दे