आपके पास शायद एक अनाम उपयोगकर्ता है ''@'localhost' या ''@'127.0.0.1' ।
मैनुअल के अनुसार :
<ब्लॉकक्वॉट>जब कई मैच संभव हों, तो सर्वर को यह निर्धारित करना होगा कि उनमें से किसका उपयोग करना है। यह इस समस्या को इस प्रकार हल करता है:(...)
- जब कोई क्लाइंट कनेक्ट करने का प्रयास करता है, तो सर्वर [टेबल mysql.user] की पंक्तियों को देखता है क्रमबद्ध क्रम में।
- सर्वर पहली पंक्ति का उपयोग करता है जो क्लाइंट होस्ट नाम और उपयोगकर्ता नाम से मेल खाती है।
(...)सर्वर सॉर्टिंग नियमों का उपयोग करता है जो पंक्तियों को सबसे विशिष्ट होस्ट मान पहले . के साथ क्रमित करता है .शाब्दिक होस्ट नाम [जैसे 'लोकलहोस्ट'] और आईपी पते सबसे विशिष्ट हैं।
इसलिए, ऐसा अनाम उपयोगकर्ता '[any_username]'@'%' जैसे किसी अन्य उपयोगकर्ता को "मुखौटा" देगा localhost . से कनेक्ट करते समय ।
'bill'@'localhost' 'bill'@'%' . से मेल खाता है , लेकिन मेल खाएगा (उदा.) ''@'localhost' पहले से।
अनुशंसित समाधान इस अनाम उपयोगकर्ता को छोड़ना है (यह आमतौर पर वैसे भी करना एक अच्छी बात है)।
नीचे के संपादन ज्यादातर मुख्य प्रश्न के लिए अप्रासंगिक हैं। ये केवल इस थ्रेड में अन्य टिप्पणियों में उठाए गए कुछ सवालों के जवाब देने के लिए हैं।
1 संपादित करें
'bill'@'%' . के रूप में प्रमाणित किया जा रहा है सॉकेट के माध्यम से।
example@sqldat.com:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass --socket=/tmp/mysql-5.5.sock
Welcome to the MySQL monitor (...)
mysql> SELECT user, host FROM mysql.user;
+------+-----------+
| user | host |
+------+-----------+
| bill | % |
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
+------+-----------+
4 rows in set (0.00 sec)
mysql> SELECT USER(), CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| example@sqldat.com | example@sqldat.com% |
+----------------+----------------+
1 row in set (0.02 sec)
mysql> SHOW VARIABLES LIKE 'skip_networking';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| skip_networking | ON |
+-----------------+-------+
1 row in set (0.00 sec)
2 संपादित करें
ठीक वैसा ही सेटअप, सिवाय मैंने नेटवर्किंग को फिर से सक्रिय करने के, और अब मैं एक अनाम उपयोगकर्ता बनाता हूं ''@'localhost' ।
example@sqldat.com:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql
Welcome to the MySQL monitor (...)
mysql> CREATE USER ''@'localhost' IDENTIFIED BY 'anotherpass';
Query OK, 0 rows affected (0.00 sec)
mysql> Bye
example@sqldat.com:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
--socket=/tmp/mysql-5.5.sock
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
example@sqldat.com:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-h127.0.0.1 --protocol=TCP
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
example@sqldat.com:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -ppass \
-hlocalhost --protocol=TCP
ERROR 1045 (28000): Access denied for user 'bill'@'localhost' (using password: YES)
3 संपादित करें
संपादन 2 की तरह ही स्थिति, अब अनाम उपयोगकर्ता का पासवर्ड प्रदान कर रही है।
example@sqldat.com:/home/mysql-5.5.16-linux2.6-x86_64# ./mysql -ubill -panotherpass -hlocalhost
Welcome to the MySQL monitor (...)
mysql> SELECT USER(), CURRENT_USER();
+----------------+----------------+
| USER() | CURRENT_USER() |
+----------------+----------------+
| example@sqldat.com | @localhost |
+----------------+----------------+
1 row in set (0.01 sec)
निष्कर्ष 1, संपादन 1 से:कोई 'bill'@'%' . के रूप में प्रमाणित कर सकता है सॉकेट के माध्यम से।
निष्कर्ष 2, संपादन 2 से:चाहे कोई टीसीपी के माध्यम से या सॉकेट के माध्यम से जुड़ता है, प्रमाणीकरण प्रक्रिया पर कोई प्रभाव नहीं पड़ता है (सिवाय एक को किसी और के रूप में नहीं जोड़ा जा सकता है, लेकिन 'something'@'localhost' एक सॉकेट के माध्यम से, जाहिर है)।
निष्कर्ष 3, संपादन 3 से:हालांकि मैंने -ubill निर्दिष्ट किया है , मुझे एक अनाम उपयोगकर्ता के रूप में पहुँच प्रदान की गई है। यह ऊपर बताए गए "सॉर्टिंग नियम" के कारण है। ध्यान दें कि अधिकांश डिफ़ॉल्ट इंस्टॉलेशन में, नो-पासवर्ड, अनाम उपयोगकर्ता मौजूद है
(और सुरक्षित/निकाल दिया जाना चाहिए)।