2012-01-12 14 views
22

मैं निम्न त्रुटि हो रही है का उपयोग कर MySQL से कनेक्ट नहीं कर सकते हैं:त्रुटि: mysqlnd 4.1+ वर्ष असुरक्षित प्रमाणीकरण

Database connection failed: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password') .

This will store a new, and more secure, hash value in mysql.user . If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file

मैं PHP 5.3.8 और मेरे स्थानीय मशीन पर MySQL 5.5.16 और मेरे मेजबान (का उपयोग करते हुए मीडिया मंदिर) PHP 5.3 MySQL 5.0.51a चला रहा है। लाइव सर्वर पर संस्करण मेरी मशीन पर एक से बड़ा है।

मैं इस त्रुटि को कैसे ठीक करूं और अपनी स्थानीय मशीन से MySQL से कनेक्ट कैसे करूं?

मुझे पता है कि इस पर समान पोस्ट हैं लेकिन मैंने उन सभी की कोशिश की है और कोई भी काम नहीं कर रहा है।

+0

यह http://stackoverflow.com/questions/1575807/cannot-connect-to-mysql-4-1-using-old- प्रमाणीकरण – rkosegi

+5

का डुप्लिकेट है जैसा कि मेरी पोस्ट में बताया गया है, मैंने उन सुझावों का प्रयास किया है और कोई नहीं मेरे लिए काम कर रहे हैं वह पोस्ट भी 09 में वापस आया था इसलिए मैंने यह देखने के लिए दोबारा पोस्ट किया कि क्या अन्य/अधिक हालिया समाधान थे। – user982853

उत्तर

36
  • निकालें या टिप्पणी old_passwords = 1 my.cnf में

पुनः प्रारंभ MySQL। यदि आप नहीं करते हैं, तो MySQL पुराने पासवर्ड प्रारूप का उपयोग जारी रखेगा, जिसका अर्थ यह होगा कि आप बिल्टिन पासवर्ड() हैशिंग फ़ंक्शन का उपयोग करके पासवर्ड को अपग्रेड नहीं कर सकते हैं।

पुराना पासवर्ड हैश 16 वर्ण हैं, नए 41 वर्ण हैं।

  • कनेक्ट डेटाबेस के लिए, और निम्न क्वेरी चलाएँ:

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

यह तुम्हें दिखाता हूँ जो पासवर्ड जैसे पुराने प्रारूप में हैं,:

 
+----------+--------------------+ 
| user  | Length(`Password`) | 
+----------+--------------------+ 
| root  |     41 | 
| root  |     16 | 
| user2 |     16 | 
| user2 |     16 | 
+----------+--------------------+

सूचना यहां प्रत्येक उपयोगकर्ता के पास कई पंक्तियां हो सकती हैं (प्रत्येक अलग मेजबान विनिर्देश के लिए एक)।

प्रत्येक उपयोगकर्ता के लिए पासवर्ड को अद्यतन करने के लिए निम्न चलाएँ:

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

अंत में, फ्लश विशेषाधिकार:

FLUSH PRIVILEGES; 

स्रोत: How to fix "mysqlnd cannot connect to MySQL 4.1+ using old authentication" on PHP5.3

+0

मैं थोड़ा उलझन में हूं, क्या मुझे अपने स्वयं के COMP की कमांड लाइन करनी चाहिए या क्या मुझे बाहरी डीबी से कनेक्ट करने के लिए myadminphp का उपयोग करना चाहिए। मेरा डीबी एक रिमोट सर्वर पर है जो मेरे COMP पर नहीं है। – user982853

+0

मैं जो कुछ भी phpmyadmin के अंदर चलाता हूं, वह मुझे अस्वीकार कर देता है। मैं सामान्य प्रश्न कर सकता हूं लेकिन मुझे कोई भी व्यवस्थापक आदेश अस्वीकार कर रहा है। – user982853

+0

जब मैं उपरोक्त कोड को अपनी स्थानीय मशीन पर चलाता हूं तो मुझे रूट मिलता है। 0 तीन बार। रूट की तीन पंक्तियां | 0। जैसे कोई पासॉर्ड नहीं है या पासवर्ड लंबाई में 0 है। जब मैं इसे phpmyadmin (बाहरी डीबी) में चलाता हूं तो मुझे पहुंच से वंचित कर दिया जाता है। – user982853

1

पुराने असुरक्षित ऑथ को अनुमति देने के लिए लक्ष्य MySQL सर्वर को कॉन्फ़िगर करें।

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

, बस लक्ष्य mysqld सर्वर बाहर टिप्पणी old_passwords पर my.cnf फ़ाइल में

शायद PHP बिल्ड (या इसे स्वयं बनाना) प्राप्त करने का तरीका है जो संगत (पुराने) ऑथ मोड का उपयोग करता है।

+0

मेरे पास मेरी my.cnf फ़ाइल तक पहुंच है। मैंने उस पंक्ति को टिप्पणी करने के परिवर्तन किए हैं और अब मुझे त्रुटि मिलती है: डेटाबेस चयन विफल: उपयोगकर्ता 'db95658_ewr' @ '%' डेटाबेस के लिए डेटाबेस 'mvc' से इनकार कर दिया गया। मैंने अपना उपयोगकर्ता नाम और पासवर्ड जांच लिया है और वे सही हैं। – user982853

+0

अपने पासवर्ड को रीसेट करने का प्रयास करें जैसा आपने किया था।जब mysqld ने ऑथ मोड बदल दिया, तो इसे उपयोगकर्ता तालिका में पासवर्ड हैश बदलने की जरूरत है। – rkosegi

2

मैं एक ही मुद्दा कनेक्ट करने का प्रयास किया था मेरी स्थानीय विंडोज मशीन पर आईआईएस के माध्यम से मध्य-डीबी मध्यस्थता के लिए। विशिष्ट डीबी उपयोगकर्ता के लिए अपना पासवर्ड अपडेट करने से डेटाबेस से कनेक्ट होने वाली समस्या हल हो गई।

(एमटी) खाता केंद्र के भीतर, बस पासवर्ड अपडेट करें। मैंने एक ही पासवर्ड इस्तेमाल किया और यह मेरी सभी समस्याओं का समाधान किया।

0

जब मैंने MySQL के पुराने संस्करण से डेटाबेस आयात किया तो मुझे यह समस्या थी।सबसे बड़ी समस्या यह है - यह मुझे मेरी जड़ उपयोगकर्ता के साथ MySQL से कनेक्ट होने से रोकने की गई थी, तो मैं नीचे दिए गए निर्देशों का पालन करते हुए reset the root password पड़ा:

इस के बाद मैं सुधार लागू करने में सक्षम था ऊपर दिया गया है।

उदा। द्वारा:

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

मैं एक मुद्दा जहां पुराने पासवर्ड डिफ़ॉल्ट रूप से सर्वर द्वारा सक्षम किया गया था, तो ('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 
... 

तो बुनियादी तौर पर मैं बंद old_password करने के लिए पहले mysql सर्वर वर सेट करने के लिए = था, जैसे इस बात के लिए मुझे

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

मैं एक पर एक मीडिया मंदिर db के साथ पहली बार के लिए इस त्रुटि का सामना किया काम ग्रिड सर्वर

समस्या इसलिए हुई क्योंकि मैंने डेटाबेस उपयोगकर्ता के लिए एक पासवर्ड का उपयोग किया जो अभी भी उनके पुराने पासवर्ड प्रारूप में था। नया प्रारूप 10+ अक्षरों, विशेष पात्रों, संख्या आदि के लिए कॉल करता है ...

मैंने नए प्रारूप में एक नया डेटाबेस उपयोगकर्ता और पासवर्ड बनाया और यह ठीक काम किया।

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