सभी होस्ट से MySQL रूट एक्सेस


152

मैंने एक दूरस्थ उबंटू मशीन पर MySQL सर्वर स्थापित किया है। rootउपयोगकर्ता में परिभाषित किया गया है mysql.userतालिका इस तरह:

mysql> SELECT host, user, password FROM user WHERE user = 'root';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| localhost        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ip-10-48-110-188 | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| 127.0.0.1        | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| ::1              | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

मैं rootमानक mysqlक्लाइंट का उपयोग करके उसी रिमोट मशीन कमांड-लाइन इंटरफ़ेस से उपयोगकर्ता के साथ पहुंच सकता हूं । अब मैं इंटरनेट पर प्रत्येक होस्ट से रूट एक्सेस की अनुमति देना चाहता हूं , इसलिए मैंने निम्नलिखित पंक्ति जोड़ने की कोशिश की (यह hostकॉलम को छोड़कर, पिछले डंप से पहली पंक्ति का एक सटीक डुप्लिकेट है ):

mysql> SELECT host, user, password FROM user WHERE host = '%';
+------------------+------+-------------------------------------------+
| host             | user | password                                  |
+------------------+------+-------------------------------------------+
| %                | root | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
+------------------+------+-------------------------------------------+

लेकिन मेरे व्यक्तिगत पीसी पर मेरा क्लाइंट मुझे बताता है (मैंने सर्वर आईपी को अस्पष्ट किया है):

SQL त्रुटि (2003): '46 .xxx '(10061) पर MySQL सर्वर से कनेक्ट नहीं हो सकती

अगर यह एक प्रमाणीकरण त्रुटि या एक नेटवर्क त्रुटि है मैं नहीं बता सकता। सर्वर पर फ़ायरवॉल मैं बंदरगाह सक्षम 3306 / टीसीपी के लिए 0.0.0.0/0 , और यह मेरे लिए ठीक है ...


क्या आप पोर्ट 3306 पर मशीन को टेलनेट कर सकते हैं
मिहासिमी

3
सबसे अधिक संभावना है कि MySQL डेमॉन 46.xxx पर नहीं बल्कि केवल लोकलहोस्ट पर सुनता है। के लिए देखो bind-addressmy.cnf में
मैक्सिम Krizhanovsky

1
तो, वर्ल्ड + डॉग के पास अब आपके रूट पासवर्ड का हैश है, यह ज्ञान कि रूट इंटरनेट पर किसी भी होस्ट से और आपके आईपी पते के पहले बाइट से सुलभ है। आपको नहीं लगता कि यह सिर्फ एक छोटा सा विषय है?
अहग्याल

जवाबों:


362

उस प्रक्रिया में दो चरण हैं:

a) अनुदान विशेषाधिकार। रूट उपयोगकर्ता 'password'अपने वर्तमान रूट पासवर्ड के साथ इस प्रतिस्थापन के साथ निष्पादित करते हैं:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

बी) सभी पते पर बाँधें:

सबसे आसान तरीका है टिप्पणी बाहर अपने में लाइन my.cnfफ़ाइल:

#bind-address = 127.0.0.1 

और mysql को पुनरारंभ करें

service mysql restart

डिफ़ॉल्ट रूप से यह केवल लोकलहोस्ट के लिए बाध्य होता है, लेकिन यदि आप इस लाइन को कमेंट करते हैं तो यह सभी इंटरफेस को बांधता है जो इसे पाता है। लाइन के बाहर टिप्पणी करना बराबर है bind-address=*

यह जांचने के लिए कि mysql सर्विस ने रूट के रूप में किस तरह से बाइंड किया है:

netstat -tupan | grep mysql

Ubuntu 16 के लिए अपडेट करें:

कॉन्फ़िगरेशन फ़ाइल है (अब)

/etc/mysql/mysql.conf.d/mysqld.cnf 

(कम से कम मानक Ubuntu 16 पर)


5
ठीक है, समस्या बाध्यकारी पता था। धन्यवाद। @Dhahazer आपको भी धन्यवाद :)
lorenzo-s

2
वर्तमान अनुदानों को क्वेरी करने के लिए: `''% '' रूट 'के लिए' 'SHOW GRANTS;
रोब्सच

5
अन्य उपयोगकर्ताओं को अनुमति देने के लिए रूट @% की अनुमति देने के लिए, चरण (क) चलाने के तुरंत बाद: अनुदान का उपयोग करें। * * रूट विकल्प के साथ 'रूट' @ '%' करने के लिए;
कालेब

1
कॉन्फ़िग फ़ाइल (अभी) /etc/mysql/mysql.conf.d/mysqld.cnf (कम से कम मानक Ubuntu 16 पर)
jgp

2
मुझे बस ऐसा करने की आवश्यकता है, जिससे मैं दूर से सर्वर से कनेक्ट करने में सक्षम हो:USE mysql; UPDATE user SET Grant_priv='Y' WHERE user='root';
Sviderskiy Dmitriy

35

निम्नलिखित क्वेरी चलाएँ:

use mysql;

update user set host='%' where host='localhost'

नोट: उत्पादन के उपयोग के लिए अनुशंसित नहीं है।


2
यह सही समाधान नहीं है। यह काम कर सकता है। मेरे लिए इसने एक त्रुटि उत्पन्न की: ERROR 1062 (23000): कुंजी 'प्राथमिक' के लिए डुप्लिकेट प्रविष्टि '% -root'
Scriptlabs

2
@Scriptlabs, संभावना है कि 'लोकलहोस्ट' के होस्ट के साथ उपयोगकर्ता तालिका में एक से अधिक प्रविष्टियाँ हैं। और root.localhost, root.127.0.0.1, root.::1 सहित रूट के साथ एक से अधिक पंक्ति। इसलिए आप अपडेट करने के बजाय एक अलग उपयोगकर्ता जोड़ना बेहतर समझते हैं, यही कारण है कि मैं इस उत्तर को अस्वीकार कर रहा हूं।
माइक परसेल

4
फ्लश PRIVILEGES नहीं है; इसके बाद भी आवश्यक है?
नोम

1
यह मेरे लिए काम कर रहा है। इसे इस्तेमाल करे। update mysql.user set host='%' where user='root'
नर्स ज़ाज़िन

7

कभी कभी

बाइंड-पता = 127.0.0.1

होना चाहिए

बाँध-पता = *


7

MYSQL 8.0 - mysql कमांड लाइन क्लाइंट को
सभी PRIVILEGES पर खोलें । * * 'जड़' @'hosthost 'पर खोलें ;
mysql
UPDATE mysql.user SET host = '%' WHERE उपयोगकर्ता = 'root' का उपयोग करें;
Mysql सेवा को पुनरारंभ करें


4

रास्पियन पर चलने वाली मारियाबीडी - बाइंड-एड्रेस वाली फाइल को पिनपॉइंट करना कठिन है। मारियाबडी के पास इस विषय पर कुछ नहीं बहुत उपयोगी जानकारी है

मैंनें इस्तेमाल किया

# sudo grep -R bind-address /etc 

यह पता लगाने के लिए कि लानत कहाँ है।

मुझे भी हर किसी की तरह विशेषाधिकार और मेजबानों को सेट करना था, जैसा कि ऊपर बताया गया है।

और मेरे रास्पबेरी पाई के लिए रिमोट कनेक्शन के लिए 3306 पोर्ट खोलने में कुछ मजेदार समय भी था - आखिरकार iptables-persistent का उपयोग किया ।

सभी अब महान काम करते हैं।


1

अगर आपके पास ओएस से जुड़े कई नेटवर्क हैं, तो आपको my.conf फ़ाइल से बाइंड-एडरेस में इस नेटवर्क में से किसी एक को सपॉर्ट करना होगा। एक उदाहरण:

[mysqld]
bind-address = 127.100.10.234

यह आईपी एक ईएक्सएक्स कॉन्फ़िगरेशन से है।


1
कृपया अधिक विवरण जोड़ें। किस फाइल या फ्रेमवर्क में उस सेटिंग को होने की जरूरत है? कृपया ईएक्सएक्स कॉन्फ़िगरेशन के बारे में अधिक विशिष्ट रहें।
BPS

1

मेरे मामले में "बाइंड-एड्रेस" सेटिंग समस्या थी। इस सेटिंग को टिप्पणी करते हुए में my.cnfकिया था नहीं क्योंकि मेरे मामले mysql में मदद, किसी कारण के लिए 127.0.0.1 करने के लिए डिफ़ॉल्ट सेट।

यह सत्यापित करने के लिए कि वर्तमान में MySql किस सेटिंग का उपयोग कर रहा है, अपने स्थानीय बॉक्स पर कमांड लाइन खोलें:

mysql -h localhost -u myname -pmypass mydb

वर्तमान सेटिंग पढ़ें:

Show variables where variable_name like "bind%"

यदि आप सभी मेजबानों से पहुंच की अनुमति देना चाहते हैं तो आपको यहां 0.0.0.0 देखना चाहिए। यदि यह मामला नहीं है, /etc/mysql/my.cnfतो [mysqld] सेक्शन के तहत अपना एडिट और बाइंड-एड्रेस सेट करें :

bind-address=0.0.0.0

अंत में नई सेटिंग लेने के लिए अपने MySql सर्वर को पुनरारंभ करें:

sudo service mysql restart

फिर से कोशिश करें और जांचें कि नई सेटिंग को उठाया गया है या नहीं।


-2

mysql_update आपको क्या चाहिए

मुझे नहीं पता कि क्यों कोई भी इस मुद्दे को सही करने के अधिक जटिल तरीकों का पालन करेगा, जब MySql ने विनम्रतापूर्वक एक ऐसा उपकरण बनाया जो ऐसा नहीं करता है ...

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