संक्षेप में, मारियाडीबी पर
UPDATE mysql.user SET plugin = 'mysql_native_password',
Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
जहाँ आप चाहते हैं कि पासवर्ड के साथ NEWPASSWORD बदलें, और बाकी सब कुछ शब्दशः।
यहाँ मुद्दा यह है कि जब MariaDB या MySQL स्थापित / अपडेट किया जाता है (विशेषकर यदि किसी बिंदु पर बिना पासवर्ड के रूट सेट होता है) तो उपयोगकर्ता तालिका में पासवर्ड वास्तव में खाली है (या अनदेखा किया गया है), और लॉगिंग सिस्टम उपयोगकर्ता पर निर्भर करता है एक MySQL उपयोगकर्ता के लिए। आप सिस्टम रूट पर स्विच करके निम्नानुसार इसका परीक्षण कर सकते हैं, और फिर टाइप करें:
mysql -uroot -p
फिर कोई पासवर्ड या गलत पासवर्ड दर्ज करें। आपको शायद अंदर जाने दिया जाएगा (आप यूनिक्स रूट से लॉग इन करने में भी सक्षम हो सकते हैं # mysql
जैसे कि पासवर्ड अप्रासंगिक है और उपयोगकर्ता परिभाषित है)।
तो क्या चल रहा है? ठीक है, यदि आप रूट के रूप में लॉग इन करते हैं और निम्नलिखित करते हैं:
select User,host,plugin from mysql.user;
+----------------+-----------+-----------------------+
| User | host | plugin |
+----------------+-----------+-----------------------+
| root | localhost | auth_socket |
+----------------+-----------+-----------------------+
आप ध्यान दें auth_socket
(जो unix_socket
मारियाडीबी पर पढ़ सकते हैं )। ये सॉकेट पासवर्डों को अनदेखा करते हैं और पासवर्ड की जांच के बिना संबंधित यूनिक्स उपयोगकर्ता को अनुमति देते हैं। यही कारण है कि आप रूट के साथ लॉग इन कर सकते हैं लेकिन एक अलग उपयोगकर्ता के साथ नहीं।
तो इसका उपयोग उपयोगकर्ताओं को अपडेट करने auth_socket/unix_socket
और पासवर्ड को ठीक से सेट न करने के लिए अपडेट करना है ।
MariaDB पर (<10.2, नीचे टिप्पणी देखें) जो कि 2017 के उबंटू संस्करण 16 पर है क्योंकि यह पर्याप्त होना चाहिए। NEWPASSWORD आपका पासवर्ड है। mysql_native_password
आप शब्दशः लिखते हैं।
UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
(यह संभव है कि प्लगइन को खाली करने के लिए काम करना। YMMV। मैंने यह कोशिश नहीं की। इसलिए यह एक विकल्प है।)
UPDATE mysql.user SET plugin = '', Password = PASSWORD('NEWPASSWORD') WHERE User = 'root';
अन्यथा:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NEWPASSWORD';
फिर
FLUSH PRIVILEGES;
रिकॉर्ड के लिए, उपयोगकर्ता को हटाने और '%' के साथ इसे फिर से जोड़ने के समाधान ने मुझे डेटाबेस से पूरी तरह से बंद कर दिया, और अन्य समस्याओं का कारण बन सकता है जब तक कि आपको grant
बयान बिल्कुल सही नहीं मिलता - बस पहले से ही आपके पास रूट को अपडेट करना आसान है।
मेरे अनुभव में, समस्या केवल रूट उपयोगकर्ता के साथ होती है, क्योंकि अन्य उपयोगकर्ता मैन्युअल रूप से जोड़े जाएंगे जो प्रारंभिक इंस्टॉल / अपडेट का हिस्सा नहीं है।