SSH सुरंग के माध्यम से कनेक्ट करते समय MySQL एक्सेस ने त्रुटि को अस्वीकार कर दिया


12

महीनों से मैं बिना किसी समस्या के SSH सुरंग के माध्यम से हमारे स्थानीय परीक्षण सर्वर पर चल रहे MySQL के उदाहरण से जुड़ रहा हूं। अचानक हालांकि, बिना किसी बदलाव के, जिसके बारे में मैं सोच भी नहीं सकता, सर्वर ने त्रुटि के लिए सीक्वल प्रो से प्रयास में लॉग को अस्वीकार करना शुरू कर दिया है:

127.0.0.1 होस्ट करने के लिए कनेक्ट करने में असमर्थ क्योंकि एक्सेस से इनकार कर दिया गया था।

अपने उपयोगकर्ता नाम और पासवर्ड को दोबारा जांचें और सुनिश्चित करें कि आपके वर्तमान स्थान से प्रवेश की अनुमति है।

MySQL ने कहा: उपयोगकर्ता 'रूट' @ 'लोकलहोस्ट' (पासवर्ड का उपयोग कर: YES) के लिए प्रवेश निषेध है

मैं सीधे SSH के माध्यम से सर्वर से कनेक्ट होने पर टर्मिनल से लॉग इन करने में सक्षम हूं, बस SSH सुरंग के माध्यम से नहीं। समस्या सीक्वल प्रो या सिर्फ खुद के लिए विशिष्ट नहीं है, मुझे MySQL वर्कबेंच के माध्यम से कनेक्ट करते समय एक ही त्रुटि मिलती है जैसे कि कार्यालय में अन्य करते हैं। मैंने mysqladminकेवल विवेक के लिए पासवर्ड रीसेट किया है , यह निश्चित रूप से समस्या नहीं है।

जब मैंने इसे देखना शुरू किया तो मैंने देखा कि त्रुटि "127.0.0.1" के बजाय "लोकलहोस्ट" के रूप में सर्वर को रिपोर्ट कर रही थी, जिसे मैंने सीक्वल प्रो में दर्ज किया। एक मित्र ने सुझाव दिया कि शायद सिर्फ खराब त्रुटि से निपटना है, लेकिन ऐसा लगता है कि MySQL में लोकलहोस्ट और 127.0.0.1 के बीच महत्वपूर्ण अंतर दिया गया है।

सुरंग के मुद्दे के आसपास जाने के प्रयास में, मैंने रूट @% तक पहुंच प्रदान की, ताकि मैं सीधे कनेक्ट कर सकूं। यह अधिकांश भाग के लिए काम करता है, मैं टेबल डेटा देख सकता हूं, नए डेटाबेस बना सकता हूं, आदि। एकमात्र समस्या यह है कि जब मैं उन उपयोगकर्ताओं को बनाने के लिए आता हूं जिन्हें मैं त्रुटि देता हूं:

उपयोगकर्ता 'रूट' @ '%' के लिए अस्वीकृत (पासवर्ड का उपयोग करके: YES)

अजीब तरह से उपयोगकर्ता वास्तव में बनाया गया है, मुझे लगता है कि यह अनुदान के साथ सिर्फ एक मुद्दा है। फिर से, टर्मिनल से मैं रूट के रूप में लॉग इन करने पर कुछ भी कर सकता हूं।

क्या कोई सुरंग कनेक्शन और (शायद) अनुदान आदेशों का उपयोग करने से इनकार कर दिया गया है, जिससे एक्सेस अस्वीकृत त्रुटि प्राप्त हो रही है?

संदर्भ के लिए MySQ का संस्करण 5.6.16 है जो ज्यादातर डिफ़ॉल्ट सेटिंग्स के साथ है, मैक ओएस एक्स सर्वर मशीन पर होमब्रे के माध्यम से स्थापित किया गया है।

अपडेट करें

यहां उन मेजबानों की सूची दी गई है जिन पर वर्तमान में रूट की पहुंच दी गई है:

mysql> select host,user from mysql.user where user='root';
+----------------+------+
| host           | user |
+----------------+------+
| %              | root |
| 127.0.0.1      | root |
| ::1            | root |
| localhost      | root |
+----------------+------+
4 rows in set (0.00 sec)

जैसा कि मैंने इसे समझा, पहली पंक्ति ("%") को वास्तव में दूसरों को निरर्थक बनाना चाहिए?

अपडेट २

अनुदान मुद्दा तय; रूट @% उपयोगकर्ता को with grant optionअंत में अतिरिक्त के साथ सभी विशेषाधिकार प्रदान नहीं किए गए हैं , इसलिए यह सब कुछ कर सकता है लेकिन अनुदान। अभी भी जानना पसंद करेंगे कि SSH सुरंगों को क्यों नकारा जा रहा है।


इसलिए, इससे पहले कि आप "%" खाता बनाते, आपने "127.0.0.1" और "लोकलहोस्ट" बना दिया और इन दोनों ने काम नहीं किया, क्या यह सही है?
सेवर्रे

यदि आप वास्तव में सही होस्ट पर हैं, तो लोकलहोस्ट केवल तभी काम करता है, इसलिए सिद्धांत में केवल 127.0.0.1 (लोकलहोस्ट के बराबर नेटवर्क) एक ssh सुरंग पर काम करना चाहिए। कम से कम OSes की तरह यूनिक्स में।
सेवर्रे

जवाबों:


18

MySQL में, localhostMySQL सॉकेट का उपयोग करके कनेक्शन के लिए कीवर्ड आरक्षित है और आपको 127.0.0.1127.0.0.1 पर MySQL नेटवर्क पोर्ट के लिए टीसीपी कनेक्शन के लिए आईपी-एड्रेस का उपयोग करना चाहिए । इसका मतलब है कि दोनों सर्वर को विशेष रूप से उपयोगकर्ताओं को विशेषाधिकार प्रदान करना चाहिए 127.0.0.1, और ग्राहक को -h 127.0.0.1स्थानीय सॉकेट से कनेक्ट होने के बजाय सुरंग से गुजरने के लिए उपयोग करना चाहिए ।

SSH पोर्ट का उपयोग करके आपको एक्सेस करने की अनुमति देने के लिए आपको कुछ इस तरह की आवश्यकता है:

GRANT SELECT ON *.* TO user@`127.0.0.1`

और फिर चला

FLUSH PRIVILEGES;

और संभवतः

FLUSH QUERY CACHE;

यदि यह अभी भी काम नहीं करता है, तो सर्वर प्रक्रिया को पुनरारंभ करें।

त्रुटि संदेशों में 127.0.0.1 के बाद रिवर्स DNS लुकअप localhostडिबगिंग को कठिन बनाने के लिए अनुवादित हो जाता है।

जैसा कि मैनुअल इसका वर्णन करता है:

यूनिक्स पर, MySQL प्रोग्राम होस्ट नाम लोकलहोस्ट का विशेष रूप से इलाज करते हैं, एक तरह से, जो अन्य नेटवर्क-आधारित कार्यक्रमों की तुलना में आप जो अपेक्षा करते हैं, उससे अलग है। लोकलहोस्ट के कनेक्शन के लिए, MySQL प्रोग्राम एक यूनिक्स सॉकेट फ़ाइल का उपयोग करके स्थानीय सर्वर से कनेक्ट करने का प्रयास करता है। पोर्ट संख्या निर्दिष्ट करने के लिए a - -portया -Pविकल्प दिए जाने पर भी यह होता है। यह सुनिश्चित करने के लिए कि ग्राहक स्थानीय सर्वर के लिए टीसीपी / आईपी कनेक्शन बनाता है, का उपयोग करें --hostया -hएक होस्ट नाम मान 127.0.0.1या स्थानीय सर्वर का आईपी पता या नाम निर्दिष्ट करें। आप --protocol=TCPविकल्प का उपयोग करके, स्थानीय प्रोटोकॉल के लिए भी, स्पष्ट रूप से कनेक्शन प्रोटोकॉल निर्दिष्ट कर सकते हैं । उदाहरण के लिए:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP

--protocolविकल्प आपको कनेक्शन की एक विशेष प्रकार की स्थापना के लिए भी जब अन्य विकल्प सामान्य रूप से कुछ अन्य प्रोटोकॉल के लिए डिफ़ॉल्ट होगा सक्षम बनाता है।


2
आह! इसके बाद मैं बताता हूं कि जब मैं 127.0.0.1 देखने की उम्मीद कर रहा था, तो मैं त्रुटि संदेश में लोकलहोस्ट क्यों देख रहा हूं। कभी भी कम नहीं, रूट उपयोगकर्ता को सभी विशेषाधिकार @ 127.0.0.1 दिए गए हैं, लेकिन मुझे अभी भी एसएसएच सुरंग के माध्यम से कनेक्ट करते समय एक्सेस अस्वीकृत त्रुटि मिलती है। सटीक कथन जो मैंने चलाया वह है:grant all on *.* to 'root'@'127.0.0.1' with grant option;
एडम

मुझे यह समस्या आ रही है, और यह स्पष्ट है कि वास्तव में होस्ट बनाम सॉकेट मुद्दा है। जब मैं ssh -h 127.0.0.1 -u root -pसर्वर पर दूरस्थ रूप से टाइप करता हूं , तो कनेक्शन भी अस्वीकार कर दिया जाता है।
फजाइटीव्यू

मैंने -h 127.0.0.1mysql को रिबूट करके सर्वर पर विफल होने वाले कनेक्शनों को हल किया , लेकिन ssh सॉकेट अब भी काम नहीं करेगा
fuzzyTew

ये रहा। 1. सर्वर को @ 127.0.0.1 पर अनुदान देना होगा। जब तक मैंने सर्वर को रिबूट नहीं किया, यह मेरे लिए नहीं था। 2. स्थानीय कनेक्शन 127.0.0.1 होना चाहिए कि लोकलहोस्ट, ताकि स्थानीय सॉकेट के बजाय सुरंग का उपयोग किया जाए।
फजाइटीव्यू

1

मैंने अतीत में ssh सुरंगों के साथ देखा है, कि सभी "लोकलहोस्ट" को अनुदान और "127.0.0.1" को अनुदान के बीच एक अंतर है, इसलिए "127.0.0.1" के बजाय या आपके "स्थानीयहोस्ट" अनुदान के लिए अनुदान का प्रयास करें।


या इसके विपरीत, आपके मामले में यह दिखता है
सेवरे

धन्यवाद, मैंने मेजबान रूट की सूची को शामिल करने के लिए प्रश्न को अपडेट कर दिया है। मुझे यह अजीब लगा कि सीक्वल प्रो में MySQL सर्वर के रूप में "127.0.0.1" दर्ज करने के बावजूद, MySQL त्रुटि इसे "लोकलहोस्ट" के रूप में रिपोर्ट कर रही थी। मुझे नहीं लगता कि यह समस्या है।
एडम

क्या आपके पास सभी विभिन्न उपयोगकर्ताओं के पासवर्ड हैं? यह भी जब आप सुरंग से अधिक mysql से कनेक्ट करते हैं, तो आपके द्वारा उपयोग किया जाने वाला वास्तविक सिंटैक्स क्या है?
Sverre

क्या आपके mysql सेटअप में रूट उपयोगकर्ता पर कोई प्रतिबंध है?
सेवर्रे

सभी रूट पासवर्ड सुनिश्चित करने के लिए बस grantबयानों को फिर से चलाएं identified by .., लेकिन कोई खुशी नहीं है।
एडम

0

सुरंग बनाने के लिए सीक्वल का उपयोग करने के बजाय, आप स्वयं सुरंग क्या बना रहे हैं?

ssh -Cc ब्लोफिश -Nf -vv -L3306: लोकलहोस्ट: 3306 sshuser का डोमेन

फिर Sequel से 127.0.0.1.13306 से कनेक्ट करें क्या आप कनेक्ट कर सकते हैं? क्या आपके टर्मिनल पर कुछ भी दिखाई देता है (या ssh क्लाइंट लॉग्स)?

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.