ubuntu 16.04 में सामान्य उपयोगकर्ता खाते से mysql उपयोगकर्ता रूट के रूप में लॉगिन नहीं कर सकता


203

मैं सिर्फ संकुल के साथ Ubuntu 16.04 LTS स्थापित किया है php, mariadbऔर nginx। मैंने mysql_secure_installationरूट पासवर्ड चलाया और बदल दिया।

अब जब मैं mysqlउबंटू में सामान्य उपयोगकर्ता खाते के रूप में लॉग इन करते हुए रूट खाते का उपयोग करने के लिए लॉगिन करने का प्रयास करता हूं तो मुझे एक्सेस से वंचित कर दिया जाता है।

जब मैं लॉगिन का उपयोग sudo mysqlकरता हूं , तो mysql मुझसे पासवर्ड भी नहीं पूछता है। अगर मैं दौड़ता mysql_secure_installtionहूं तो मुझे लगता है कि पुरानी सेटिंग्स कभी भी स्थायी रूप से सेट नहीं हुई हैं।

मैं क्या गलत कर रहा हूं?

जवाबों:


359

मैंने हाल ही में अपने Ubuntu को 15.04 से 16.04 तक अपग्रेड किया है और इसने मेरे लिए काम किया है:

  1. सबसे पहले, sudo mysql में कनेक्ट करें

    sudo mysql -u root
    
  2. अपने db में मौजूद अपने खातों की जाँच करें

    SELECT User,Host FROM mysql.user;
    +------------------+-----------+
    | User             | Host      |
    +------------------+-----------+
    | admin            | localhost |
    | debian-sys-maint | localhost |
    | magento_user     | localhost |
    | mysql.sys        | localhost |
    | root             | localhost |
    
  3. वर्तमान रूट को हटाएं @ लोकलहोस्ट अकाउंट

    mysql> DROP USER 'root'@'localhost';
    Query OK, 0 rows affected (0,00 sec)
    
  4. अपने उपयोगकर्ता को फिर से बनाएँ

    mysql> CREATE USER 'root'@'%' IDENTIFIED BY '';
    Query OK, 0 rows affected (0,00 sec)
    
  5. अपने उपयोगकर्ता को अनुमति दें (विशेषाधिकारों को न भूलें)

    mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    Query OK, 0 rows affected (0,00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0,01 sec)
    
  6. MySQL से बाहर निकलें और sudo के बिना फिर से कनेक्ट करने का प्रयास करें।

मुझे आशा है कि यह किसी की मदद करेगा :)


16
यह केवल एक चीज थी जो मेरे लिए काम करती थी, क्या किसी को पता है कि रूट उपयोगकर्ता के साथ क्या हुआ जब आप 16.04 पर mysql-server स्थापित करते हैं?
रग्गी

32
इसे पकड़ो, %इसका मतलब यह नहीं है कि आप कहीं से भी कनेक्ट कर सकते हैं ... दूर से?
स्टेवी जी

9
आप पंक्ति को इसमें बदल सकते हैं: USER 'रूट' @ 'लोकलहोस्ट' IDENTIFIED BY '' बना सकते हैं;
vladnev

11
सुरक्षा-चिंतित करने के लिए: असुरक्षित रूट @ localhost mysql कनेक्शन पैटर्न स्थानीय विकास का एक ब्रेड-एंड-स्टेपल है, लेकिन पूरी तरह से कहीं और दिखाई देना चाहिए।
चरनी केय

5
यहां नए रूट उपयोगकर्ता के लिए अनुदान विवरण "अनुदान के साथ" नहीं देता है, इसलिए रूट को रूट करने के लिए इसे बाद में चलाने के बिना अनुदान नहीं दिया जा सकता है: dba.stackexchange.com/a/62046/115679 कृपया अनुदान विवरण को बदल देंgrant all privileges on *.* to 'root'@'localhost' with grant option;
लोरेन

132

यदि आप 5.7 स्थापित करते हैं और rootउपयोगकर्ता को पासवर्ड नहीं देते हैं , तो यह auth_socketप्लगइन का उपयोग करेगा । उस प्लगइन का ध्यान नहीं है और उसे पासवर्ड की आवश्यकता नहीं है। यह सिर्फ यह जांचता है कि क्या उपयोगकर्ता UNIX सॉकेट का उपयोग करके कनेक्ट हो रहा है और फिर उपयोगकर्ता नाम की तुलना करता है।

MySQL 5.7 में Change User Password से लिया गया "प्लगइन: dif_socket"

तो pluginवापस करने के लिए बदलने के क्रम में mysql_native_password:

  1. सूडो के साथ लॉगिन करें:

    sudo mysql -u root
    
  2. pluginएक कमांड के साथ पासवर्ड बदलें और सेट करें:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test';
    

बेशक आप खाली पासवर्ड सेट करने के लिए ऊपर दिए गए कमांड का भी उपयोग कर सकते हैं।

केवल रिकॉर्ड के लिए, (और MariaDB < 10.2उपयोगकर्ता) केवल pluginपासवर्ड प्रदान किए बिना इसे बदलने का एक और तरीका है (इसे खाली छोड़ देना):

update mysql.user set plugin = 'mysql_native_password' where User='root';
// to change the password too (credits goes to Pothi Kalimuthu)
// UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root';
FLUSH PRIVILEGES;

2
धन्यवाद, किसी कारण के लिए यह अचानक सेट हो गया, क्योंकि मुझे लगता है कि अपग्रेड के बाद अचानक ...
टोमिनेटर

4
इसके अलावा, मुझे यह उत्तर अधिक पसंद है - यह बहुत कम विनाशकारी ;-)
बेंज़की

3
MariaDB <10.2 के लिए, पासवर्ड के साथ-साथ प्लगइन बदलने के लिए, यहाँ क्वेरी: UPDATE mysql.user SET plugin = 'mysql_native_password', Password = PASSWORD('secret') WHERE User = 'root'; FLUSH PRIVILEGES;Source: stackoverflow.com/a/41537019/1004587
Pothi Kalimuthu

5
यह स्वीकृत उत्तर होना चाहिए
जियो सी।

3
काश मैं इसे दो बार वोट कर पाता।
जेम्स स्मिथ

21

संक्षेप में, मारियाडीबी पर

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बयान बिल्कुल सही नहीं मिलता - बस पहले से ही आपके पास रूट को अपडेट करना आसान है।

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


2
यह पूरी तरह से काम करने के लिए मिला। मुझे आश्चर्य होता है कि क्यों रूट पासवर्ड बदलने के साथ mysql_secure_installationएक ही प्रभाव नहीं था। यह नया पासवर्ड कहाँ संग्रहीत करता है?
Mausy5043

क्या आप अपने उत्तर को संपादित कर सकते हैं और प्रत्येक आदेश के बारे में अधिक बता सकते हैं? मैं स्पष्ट नहीं हूं कि कौन से लागू हैं। क्या यह दो UPDATEs है जो मारियाडीबी <10.2 और ALTERअन्य संस्करणों के लिए लागू है ? और क्या दूसरा UPDATEपहला विकल्प है, या हमें दोनों टाइप करने की आवश्यकता है? अंत में, 'mysql_native_password' वर्बटीम टाइप करने के लिए कुछ है, या क्या हमें इसे MySQL के लिए हमारे इच्छित रूट पासवर्ड से बदलना चाहिए?
माइकल शेपर

1
@MichaelScheper यह कुछ समय पहले की बात है, इसलिए मैं बहुत अधिक संपादन नहीं करना चाहता, लेकिन यहाँ मुझे याद है। (१) केवल पहले अद्यतन करें (<10.2 एक आवश्यकता नहीं हो सकती है)। (2) हां, 'mysql_native_password' शब्द लिखें। अनिवार्य रूप से, आप जो कर रहे हैं, उसे मरिदब बता रहा है: "यूनिक्स प्रिविलेज का प्रयोग न करें, डेटाबेस प्रिवियल्स का उपयोग करें"। mysql_native_passwordउस विकल्प है।
गाजर

लानत है मैंने 'विशेषाधिकार' गलत लिखा!
गाजर

1
लगता है कि आप केवल 1, मिनट की समय सीमा संपादित करने से चूक गए! मुझे कभी-कभी इससे निराशा भी होती है। किसी भी तरह, धन्यवाद!
माइकल स्कीपर

8

यदि आपने आधार भंडार से MySQL / MariaDB स्थापित किया है, तो उपयोगकर्ता MySQL रूट उपयोगकर्ता के रूप में उनके Unix लॉगिन से MySQL में प्रवेश नहीं कर सकते हैं (यदि उनके पास sudo एक्सेस नहीं है तो लागू नहीं )

  1. MySQL रूट शेल में लॉगिन करें:

    $ sudo mysql -u root -p
    
  2. प्रश्नों के नीचे निष्पादित करें:

    use mysql;
    update user set plugin='mysql_native_password' where user='root';
    flush privileges; 
    quit;
    
  3. एक नया शेल खोलें, फिर:

    $ mysql -u root -p
    

स्रोत


जब मैंने ऐसा किया, तो मैं अब तक रूट के रूप में अपने आप को सूडो नहीं कर सका। मुझे पहले मुकदमा करना पड़ा, और फिर रूट के रूप में mysql में लॉग इन किया। इसलिए मैंने इसे वापस बदलकर भूलकरभी_से कर दिया।
तक

सिंगल कमांड:mysql -u root -p -e "use mysql;update user set plugin='mysql_native_password' where user='root';flush privileges;"
क्रिस स्ट्राइकिनस्की

यदि आप अपने MySQL उदाहरण तक पहुंच खोना चाहते हैं, तो यह उत्तर आसान तरीका है।
दानिला वर्सिनिन

2

नया mysql खाता बनाने का प्रयास करें, मेरे लिए यह काम किया है (mysql 5.7.12):

  1. सूडो के रूप में लॉगिन करें:

    sudo mysql -uroot
    
  2. नया उपयोगकर्ता बनाएं और उसे विशेषाधिकार दें (कोई पासवर्ड नहीं):

    CREATE USER 'admin'@'localhost' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
    
  3. नए उपयोगकर्ता के रूप में लॉगिन करें:

    mysql -uadmin
    

2

मुझे दो काम करने थे (@Todor और @Loremhipsum के लिए धन्यवाद):

update mysql.user set plugin = 'mysql_native_password' where User='root';
grant all privileges on *.* to 'root'@'localhost';

और फिर:

FLUSH PRIVILEGES;

मैं उपयोगकर्ता को छोड़ने की सिफारिश नहीं करूंगा root


1

इस कोड को पहले आज़माएं,

echo "CREATE USER 'root'@'localhost' IDENTIFIED BY 'root';" > your_init_file.sql
echo "GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;" >> your_init_file.sql 
echo "FLUSH PRIVILEGES;" >> your_init_file.sql

और फिर,

killall mysqld
mysqld_safe --init-file=$PWD/your_init_file.sql

फिर प्रेस Ctrl+Zऔर टाइप करें: bgअग्रभूमि से प्रक्रिया को पृष्ठभूमि में चलाने के लिए, फिर अपनी पहुंच को सत्यापित करें:

mysql -u root -proot
mysql> show grants;

1

यदि आप रूट उपयोगकर्ता के तहत mysql कमांड चलाते हैं, तो आपको पासवर्ड के बिना पूछे एक्सेस दिया जाएगा, क्योंकि सॉकेट प्रमाणीकरण रूट @ लोकलहोस्ट के लिए सक्षम है। ।

पासवर्ड सेट करने का एकमात्र तरीका मूल प्रमाणीकरण पर स्विच करना है:

$ सूडो मायस्कल

mysql> ALTER USER 'root' @ 'localhost' mysql_native_password BY 'परीक्षण' के साथ IDENTIFIED;


0

मैं कुछ प्रोविजनिंग स्क्रिप्ट्स को एडाप्ट कर रहा हूं, जो मैंने मारबीडीबी का उपयोग करने के लिए बनाई हैं और इस सटीक मुद्दे में भाग गया हूं। एक बहुत सारी जानकारी एक साथ पेश करना, एक गज़्ज़ेर का जवाब वास्तव में इस मुद्दे में शून्य; यह सभी auth_socket/ unix_socketसेटिंग के लिए नीचे फोड़े ।

इसलिए जब मारियाबीडी 5.5 (उबंटू 14.04 के तहत) और मारियाबीडी 10 अंडर (उबंटू 16.04) का उपयोग कर रहे हैं, तो MySQL में लॉग इन करें और इस कमांड को चलाने से चीजें तुरंत साफ हो जाती हैं:

UPDATE mysql.user SET plugin='' WHERE User='root';
FLUSH PRIVILEGES;

लोरिमशिपम द्वारा इस पोस्ट के रूप में सर्वोच्च मतदान सहित अन्य जवाब- एक उपयोगकर्ता को छोड़ने और फिर उन्हें फिर से बनाने की सिफारिश करके बुरी प्रथाओं को प्रोत्साहित करते हैं। मेरे लिए, यह एक बहुत ही कट्टरपंथी समाधान है। pluginमूल्य को कम करने , विशेषाधिकारों को प्रवाहित करने और जीवन के साथ प्राप्त करने के लिए सबसे अच्छा / सरलतम समाधान ओएस ।


-1

मेरे पास एक ही मुद्दा था और निम्नलिखित इसे चला रहा था:

mysql_upgrade --force

अफसोस की बात है कि काम नहीं किया। मैं ubuntu को फिर से स्थापित कर रहा हूं।
कोडस्कोप

1
मैंने सिर्फ ubuntu 16.04 की ताजा स्थापना की और मारीड-सर्वर स्थापित किया। इंस्टॉल करने के बाद मैंने mysql_secure_installation और पासवर्ड सेट किया। Mysql_secure_installation में बाकी चरणों से गुजरने के बाद, मैंने इसे फिर से चलाया और ऐसा लग रहा है कि यह परिवर्तनों को सहेज नहीं रहा है। मैं अब भी अपने सामान्य उपयोगकर्ता खाते से लॉगिन नहीं कर सकता। यह एक बग हो सकता है?
कोडस्कोप

इससे कभी मदद नहीं मिलेगी। इस समस्या का मारियाडीबी बाइनरी की वास्तविक स्थापना से कोई लेना-देना नहीं है, बल्कि उपयोगकर्ता rootको ऐसी pluginसेटिंग्स के साथ सेट किया जा रहा है जो गैर-मानक हैं। एकमात्र किनारे का मामला जहां डीबी का अपग्रेड इस तरह के मामले में मदद कर सकता है, यदि mysql_upgradeप्रक्रिया स्वयं उस pluginसेटिंग के लिए जिम्मेदार है जिस पर मुझे संदेह है।
जेकगोल्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.