MySQL db पर वाइल्डकार्ड (%) एक्सेस की अनुमति, त्रुटि प्राप्त करना "एक्सेस के लिए अस्वीकृत <<user> '@' localhost '"


17

मैंने एक डेटाबेस और एक उपयोगकर्ता बनाया है, और निम्नलिखित के माध्यम से पहुंच की अनुमति दी है:

create user 'someuser'@'%' identified by 'password';
grant all privileges on somedb.* to 'someuser' with grant option;

हालाँकि, जब मैं MySQL से जुड़ने की कोशिश करता हूँ तो मुझे निम्नलिखित त्रुटि मिलती है:

$ mysql -u someuser -p
> Enter Password:
> ERROR 1045 (28000): Access denied for user 'someuser'@'localhost' (using password: YES)

यदि "%" वाइल्डकार्ड है, तो क्या यह लोकलहोस्ट को भी सक्षम नहीं करेगा? हालाँकि, यदि मैं यह निर्दिष्ट नहीं करता कि मैं पासवर्ड का उपयोग करना चाहता हूं, तो मैं डेटाबेस के लिए बस ठीक से कनेक्ट कर सकता हूं, जिसका कोई मतलब नहीं है क्योंकि मैं एक पासवर्ड निर्दिष्ट कर रहा हूं जब मैंने उपयोगकर्ता बनाया था।

जवाबों:


17

से जुड़ने का प्रयास करें mysql -u someuser -p -h 127.0.0.1

यदि आप पासवर्ड के बिना कनेक्ट कर सकते हैं, या तो आपने .my.cnf में क्रेडेंशियल सहेजे हैं या आपने एक खाता बनाया है जो पासवर्ड के बिना एक्सेस की अनुमति देता है।


Mysql डॉक्स की यह टिप्पणी भी संबंधित हो सकती है।

http://dev.mysql.com/doc/refman/5.1/en/access-denied.html

यदि आप यह पता नहीं लगा सकते हैं कि आपको प्रवेश से वंचित क्यों रखा गया है, तो उपयोगकर्ता तालिका से वे सभी प्रविष्टियाँ निकालें जिनमें होस्ट मान वाइल्डकार्ड (ऐसी प्रविष्टियाँ जिनमें '%' या '_' अक्षर हैं) हैं। एक बहुत ही सामान्य त्रुटि है होस्ट = '%' और उपयोगकर्ता = 'some_user' के साथ एक नई प्रविष्टि सम्मिलित करना, यह सोचकर कि यह आपको उसी मशीन से कनेक्ट करने के लिए लोकलहोस्ट निर्दिष्ट करने की अनुमति देता है। इसका कारण यह नहीं है कि डिफ़ॉल्ट विशेषाधिकार में होस्ट = 'लोकलहोस्ट' और उपयोगकर्ता = '' के साथ एक प्रविष्टि शामिल है। क्योंकि उस प्रविष्टि का होस्ट मान 'लोकलहोस्ट' है जो '%' से अधिक विशिष्ट है, इसका उपयोग स्थानीयहोस्ट से कनेक्ट करते समय नई प्रविष्टि के लिए किया जाता है! सही प्रक्रिया होस्ट = 'लोकलहोस्ट' और उपयोगकर्ता = 'some_user' के साथ दूसरी प्रविष्टि सम्मिलित करना है।


+1 को होस्ट परिभाषा और ~ / .my.cnf संदर्भ सहित
एंडी

7

मुझे पूरा यकीन है कि आपको निम्नलिखित की आवश्यकता होगी:

किसी दिन सभी विशेषाधिकार प्रदान करें। अनुदान विकल्प के साथ 'someuser' @ '%' पर;

आपके GRANT स्टेटमेंट में होस्टनाम घोषणा की कमी है।


एक स्थान निर्दिष्ट किया जाना चाहिए:GRANT ALL ON somedb.* TO 'someuser'@'10.1.10.1';
tacotuesday

6

यदि आप someuser @ '%' का उपयोग करके mysql से कनेक्ट करने में असमर्थ हैं, जहां '%' होस्टनाम के लिए वाइल्डकार्ड है, तो सुनिश्चित करें कि आपके उपयोगकर्ता तालिका में @localhost प्रविष्टि नहीं है। निम्न SQL कथन का उपयोग करने की पुष्टि करें:

    mysql> SELECT * FROM user WHERE user='' AND host='localhost';

यदि '' @localhost विद्यमान है, तो निम्नलिखित एसक्यूएल बयान जारी करके इसे हटा दें:

    mysql> DELETE FROM user WHERE user='' AND host='localhost';

फिर अंत में

    FLUSH PRIVILEGES;

अब someuser @ '%' डेटाबेस से जुड़ जाएगा।


'यूजरनेम' @ '' लोकलहोस्ट '' विशेषाधिकारों को प्रदान करने से एक ही उपयोगकर्ता को अलग-अलग स्थान पर काम न करने के कारण अनुदान नहीं मिलेगा।
ताकॉट्सडे

यह कैसे प्रासंगिक है? '' लोकलहोस्ट 'पर' उपयोगकर्ता 'का क्या कारण है?
स्टीव बुज़ोनास

1
@SteveBuzonas यह बिल्कुल प्रासंगिक है। यह उस उत्तर के लिए एक कोड उदाहरण प्रदान करता है जो ज़ॉर्दाचे ने पोस्ट किया था। लोकलहोस्ट '%' से अधिक विशिष्ट है, इसलिए यदि आप किसी ऐसे उपयोगकर्ता के साथ लोकलहोस्ट के माध्यम से जुड़ने का प्रयास करते हैं, जिसके पास केवल '%' तक पहुंच है, तो लोकलहोस्ट प्रविष्टि अधिक विशिष्ट है, इसलिए mysql स्थानीयहोस्ट पर लॉगिन करने का प्रयास करता है, लेकिन एक खाली उपयोगकर्ता की अपेक्षा करता है खाली पासवर्ड। चूँकि वे क्रेडेंशियल नहीं हैं, इसलिए आपको पहुँच अस्वीकृत त्रुटि मिलती है। इन प्रविष्टियों को हटाकर, यह '%' पर उपयोगकर्ताओं के लिए उपयोग की अनुमति देता है।
bstakes

@bstakes mysql क्लाइंट का डिफ़ॉल्ट व्यवहार यदि आप एक निर्दिष्ट नहीं करते हैं तो अपने शेल उपयोगकर्ता नाम का उपयोग करें। प्रश्न के उदाहरण में और त्रुटि संदेश में एक उपयोगकर्ता है। मैं उत्सुक था कि एक '' उपयोगकर्ता नाम वाले उपयोगकर्ता के साथ कैसे संघर्ष करेगा। एक वाइल्डकार्ड है?
स्टीव बुज़ोनास

@SteveBuzonas '' लोकलहोस्ट के संबंध में वाइल्डकार्ड की तरह काम कर रहा है। MySQL डॉक्स से और आपके द्वारा बताए गए डिफ़ॉल्ट को संदर्भित करने के ऊपर एक उत्तर में दिखाया गया है: "क्योंकि उस प्रविष्टि का होस्ट मान 'लोकलहोस्ट' है जो '%' से अधिक विशिष्ट है, इसका उपयोग स्थानीयहोस्ट से कनेक्ट होने पर नई प्रविष्टि के लिए प्राथमिकता में किया जाता है सही प्रक्रिया होस्ट = 'लोकलहोस्ट' और यूजर = 'some_user' के साथ दूसरी प्रविष्टि डालने या होस्ट = 'लोकलहोस्ट' और यूजर = '' के साथ प्रविष्टि को हटाने की है।
19

4

मेरी समझ, और मैं इस पर सही होने के लिए तैयार हूं, यह है कि MySQL लोकलहोस्ट को अलग से% पर व्यवहार करता है। यानी वाइल्डकार्ड में लोकलहोस्ट शामिल नहीं है।


Dev.mysql.com/doc/refman/5.1/en/connection-access.html में दिए गए उदाहरण मुझे विश्वास दिलाते हैं कि यह सटीक नहीं हो सकता है। क्या आपके पास संदर्भ हैं अन्यथा?
वार्नर

इस मामले की मेरी समझ दूसरों पर एक ही मुद्दे की रिपोर्ट करने पर आधारित है, दोनों प्रिंट और मौखिक रूप से, और "%" और "लोकलहोस्ट" का उपयोग करके 2 उपयोगकर्ताओं को बनाकर इसे हल करना। मैं कभी भी वास्तव में इसे आधिकारिक तौर पर प्रलेखित देखकर याद नहीं कर सकता।
जॉन गार्डनियर्स

1
यह Ubuntu 12.04 LTS पर कम से कम
Dex

मेरे साथ जो हुआ वह यह है कि मेरे पास user@%तब तक काम नहीं था जब तक मैं इसमें शामिल नहीं हुआ user@localhost। तब मैंने उत्तर stackoverflow.com/a/29421084/4850646 देखा और महसूस किया कि होस्ट के साथ मेरा एक अनाम उपयोगकर्ता था localhost। मैंने सभी अनाम उपयोगकर्ताओं को हटा दिया और हटाने के बाद भीlocalhost उपयोगकर्ता के लिए उपयोग कर सकता था (और केवल दे रहा था )। ऐसा लगता है कि क्योंकि यह अधिक विशिष्ट है , यह पहले उपयोगकर्ता की कोशिश करता है , भले ही यह एक अनाम उपयोगकर्ता हो! user@localhostuser@%localhost%localhost
लुकास बस्केरोटो

0

क्या आप flush privileges;उपयोगकर्ता बनाने के बाद चले हैं ? यदि आप नहीं करते हैं, तो सर्वर के पुनः आरंभ होने तक उपयोगकर्ताओं / अनुमतियों में परिवर्तन नहीं होगा।

फिर, जांचें कि आपके पास '' लोकलहोस्ट '' एंट्री '' नहीं है।


4
'उपयोगकर्ता बनाएँ' और 'अनुदान' का उपयोग करने से विशेषाधिकारों का स्वतः प्रवाह होता है। यदि आप सीधे mysql डेटाबेस में हेरफेर कर रहे हैं तो आपको विशेषाधिकारों को फ्लश करना चाहिए।
5
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.