उपयोगकर्ता के लिए mysql सर्वर को रिमोट एक्सेस की अनुमति कैसे दें?


118

अगर मैं SHOW GRANTSअपने mysql डेटाबेस में मिलता हूं

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' 
    IDENTIFIED BY PASSWORD 'some_characters' 
    WITH GRANT OPTION

अगर मैं गलत नहीं हूं, तो root@localhostइसका मतलब है कि उपयोगकर्ता rootसर्वर से ही एक्सेस कर सकता है localhost। मैं अपने rootMySQL सर्वर को हर दूसरी मशीन (उसी नेटवर्क में) से एक्सेस करने की अनुमति देने के लिए MySQL को कैसे बताऊँ ?


6
सार्वजनिक नेटवर्क तक जड़ पहुंच प्रदान localhostकरने के लिए सरल परिवर्तन %flush privileges;

6
जड़ @% जोड़ने से आप बहुत जोखिम में पड़ जाते हैं और ऐसा नहीं करना चाहिए। मुझे पता है कि यह एक पुरानी पोस्ट है लेकिन यह चेतावनी यहां होनी चाहिए। रूट खाता हमलावरों द्वारा लक्षित पहला खाता है, और रूट @ '%' का अर्थ है कि रूट उपयोगकर्ता आपके MySQL खाते से कहीं से भी कनेक्ट कर सकता है। टिप्पणियों में कवर करने के लिए बहुत कुछ है, लेकिन आपको संभव के रूप में कई उपयोगकर्ताओं @ '%' को हटाने की कोशिश करनी चाहिए, और जो भी उस पर घोषित किए गए हैं, उनके पास बहुत सीमित विशेषाधिकार होने चाहिए। कोई बात नहीं, आपको निश्चित रूप से रूट @ '%' नहीं जोड़ना चाहिए, और आपके अनुप्रयोगों को उस खाते के मौजूद होने की उम्मीद नहीं करनी चाहिए।
डेमन


हे दोस्तों, इस कमांड को PASSWORD स्ट्रिंग को हटा देना चाहिए ... यह एक त्रुटि पैदा कर रहा है ... बस IDENTIFIED BY से समाप्त करें और फिर पासवर्ड ही।
मेरियो डे सा वेरा

जवाबों:


143

यह किसी भी मशीन से उसी पासवर्ड के साथ रूट एक्सेस देता है *.example.com:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%.example.com' 
    IDENTIFIED BY 'some_characters' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

यदि नाम संकल्प काम नहीं कर रहा है, तो आप आईपी या सबनेट द्वारा पहुंच प्रदान कर सकते हैं:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%'
    IDENTIFIED BY 'some_characters'  
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

MySQL GRANTसिंटैक्स डॉक्स।


15
मुझे लगता है ...TO 'root'@'%' IDENTIFIED...कि हर जगह से अनुदान मिलेगा?
अनफ्विन

3
मैंने mysql में कमांड निष्पादित की, लेकिन फिर SHOW GRANTSभी वही दिखाता है (जैसा कि मेरे प्रश्न में है)। मैंने भी किया FLUSH PRIVILGES। क्या मुझे कुछ याद है?
अनफ्विन

@Aufwind मैं आपको इसके अलावा कुछ और की जरूरत नहीं होगी FLUSH PRIVILEGES। लॉगआउट और वापस, यदि आपके पास पहुँच है तो mysqld सेवा को पुनरारंभ करें। इसके अलावा, सुनिश्चित करें कि skip networkingलाइन आपके में सक्षम नहीं है, my.cnfहालांकि यह आपके खाते के लिए SHOW GRANTSअभी भी समान नहीं है।
माइकल बर्कोव्स्की 22

@ इसके विपरीत, आपको इसके बजाय ServerFault.com पर पूछने की आवश्यकता हो सकती है।
माइकल बेरकोव्स्की 22

10
ध्यान दें कि IDENTIFIED BY PASSWORDएक हैशेड 41-अंकीय हेक्साडेसिमल संख्या के साथ है। IDENTIFIED BY 'password'यदि आप पासवर्ड को सीधे शामिल करना चाहते हैं तो इसका उपयोग करें ।
रेनफूल

94

प्रयत्न:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Pa55w0rd' WITH GRANT OPTION;

1
umm क्या Pa55w0rdबेवकूफी लगती है, मुझे वह पासवर्ड न बताएं जो आप बनाना चाहते हैं। हर कोई जो आपके mysql को लॉगिन करने की कोशिश करता है?
एसएसपोके

23
यह आमतौर पर पासवर्ड रखने वाले को जगह देने के लिए इस्तेमाल किया जाता है, यह कहते हुए कि "इस जगह पर अपना पढ़ा हुआ अच्छा पासवर्ड डालें"।
मोशे बीरी

2
सामान्य आदेश के साथ यह आदेश जिसे आप केवल उन अनुप्रयोगों के लिए उपयोग करना चाहते हैं जहां सुरक्षा चिंता का विषय नहीं है, उदाहरण के लिए देव या क्यूए।
einnocent

अगर मैक पर काम नहीं कर रहा है तो 'root' @ '%' को 'root' @ 'localhost' या / etc / मेजबानों के नाम से बदलने की कोशिश करें जिसे आप विशेषाधिकार दे रहे हैं।
मोशे बीरी

2
इसके बाद इसे चलाना ना भूलें:FLUSH PRIVILEGES;
dane

44

आपको यह सुनिश्चित करने के लिए कुछ कदम उठाने की जरूरत है कि पहले mysql और फिर रूट उपयोगकर्ता बाहर से सुलभ है:

  1. अक्षम skip-networkingमें my.cnf(यानी: /etc/mysql/my.cnf)

  2. के मान की जाँच bind-addressमें my.cnf, अगर यह के लिए सेट 127.0.0.1है, तो आप इसे बदलने के लिए कर सकते हैं 0.0.0.0सब IP से उपयोग की अनुमति या जो कुछ भी आईपी है कि आप से जुड़ना चाहते हैं।

  3. किसी भी आईपी से रूट उपयोगकर्ता को रिमोट एक्सेस प्रदान करें (या इसके बजाय अपना आईपी निर्दिष्ट करें %)

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'
        IDENTIFIED BY 'your_root_password'
        WITH GRANT OPTION;
    FLUSH PRIVILEGES;`
    
  4. Mysql सेवा पुनरारंभ करें:

    sudo service mysql restart

आपको फ़ायरवॉल से mysql पोर्ट 3306 खोलने की आवश्यकता है अन्यथा दूरस्थ क्लाइंट कनेक्ट नहीं होंगे
डेविड ओक्वी

@Khashayar से अंक 2 पर बस एक त्वरित सूचना: 0.0.0.0 का अर्थ है किसी भी IPv4 पता। * किसी भी पते का मतलब है, यह IPv4 या IPv6 हो।
गुस्तावो पिंसार्ड

34
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'YOUR_PASS' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;  

*.* = DB.TABLE आप उपयोगकर्ता को विशिष्ट डेटाबेस और विशिष्ट तालिका तक सीमित कर सकते हैं।

'root'@'%'आप अपने द्वारा बनाए गए किसी भी उपयोगकर्ता के साथ रूट बदल सकते हैं और सभी आईपी को अनुमति देने के लिए% है। आप इसे% .168.1.1 आदि बदलकर भी प्रतिबंधित कर सकते हैं।


यदि वह हल नहीं करता है, तो my.cnf या my.ini को भी संशोधित करें और इन पंक्तियों पर टिप्पणी करें

bind-address = 127.0.0.1करने के लिए #bind-address = 127.0.0.1
और
skip-networkingकरने के लिए#skip-networking

  • MySQL को पुनरारंभ करें और फिर से ऊपर के चरणों को दोहराएं।

रास्पबेरी पाई, मुझे बाइंड-एड्रेस कॉन्फ़िगरेशन के तहत मिला \etc\mysql\mariadb.conf.d\50-server.cnf


2
केवल उत्तर जो समझाता है *.*और 'user'@'address'भाग। धन्यवाद! :)
फिलिप

सभी पर अनुदान हैकर्स को आमंत्रित करता है।
रिक जेम्स

इसलिए मैंने * * समझाया। *
वसीम ए।

8

उन एसक्यूएल अनुदान दूसरों को साझा कर रहे हैं काम करते हैं। यदि आप अभी भी डेटाबेस तक पहुँचने में असमर्थ हैं, तो संभव है कि आपके पास पोर्ट के लिए बस फ़ायरवॉल प्रतिबंध हो। यह आपके सर्वर प्रकार (और बीच में कोई रूटर्स) पर निर्भर करता है कि कनेक्शन कैसे खोलें। टीसीपी पोर्ट 3306 इनबाउंड खोलें, और इसे बाहरी मशीनों (सभी / सबनेट / सिंगल आईपी / आदि) के लिए एक समान एक्सेस नियम दें।


4

/etc/mysql/mysql.conf.d/mysqld.cnfफ़ाइल खोलें और निम्न पंक्ति टिप्पणी करें:

#bind-address = 127.0.0.1

Ubuntu 19.4 पर काम कर रहे हैं
Ngô Văn Thao

3

मेरे मामले में मैं सेंट ओएस पर एक दूरस्थ mysql सर्वर से कनेक्ट करने का प्रयास कर रहा था। बहुत सारे समाधानों से गुजरने के बाद (सभी विशेषाधिकारों को प्रदान करते हुए, आईपी बाइंडिंग को हटाने, नेटवर्किंग को सक्षम करना) समस्या अभी भी हल नहीं हो रही थी।

जैसा कि यह निकला, विभिन्न समाधानों को देखते हुए, मैं iptables में आया, जिससे मुझे पता चला कि mysql पोर्ट 3306 कनेक्शन स्वीकार नहीं कर रहा है।

यहाँ एक छोटा सा नोट है कि कैसे मैंने इस मुद्दे की जाँच की और हल किया।

  • यदि पोर्ट कनेक्शन स्वीकार कर रहा है, तो जाँच करना:
टेलनेट (mysql सर्वर आईपी) [portNo]

पोर्ट पर कनेक्शन की अनुमति देने के लिए IP तालिका नियम जोड़ना:

iptables-INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

-इसके लिए उत्पादन वातावरण की अनुशंसा न करें, लेकिन यदि आपके iptables को ठीक से कॉन्फ़िगर नहीं किया गया है, तो नियम जोड़ने से समस्या अभी भी हल नहीं हो सकती है। उस मामले में निम्नलिखित किया जाना चाहिए:

सेवा iptables बंद करो

उम्मीद है की यह मदद करेगा।


3

दो चरण:

  1. वाइल्डकार्ड वाला उपयोगकर्ता सेट करें:
    create user 'root'@'%' identified by 'some_characters'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'some_characters' WITH GRANT OPTION

  2. vim /etc/my.cnf
    निम्नलिखित जोड़ें:
    bind-address=0.0.0.0

सर्वर को पुनरारंभ करें, आपको इससे कनेक्ट करने में कोई समस्या नहीं होनी चाहिए।


निम्नलिखित के साथ, "ERROR 1827 (HY000): पासवर्ड हैश के पास अपेक्षित प्रारूप नहीं है। जांचें कि क्या सही पासवर्ड एल्गोरिदम का उपयोग PASSWORD () फ़ंक्शन के साथ किया जा रहा है।" क्या आप बता सकते हैं कि मैं यहाँ क्या कर रहा हूँ?
लैंपशेड्सप्रेटर

2

Mysql 8 और बाद के संस्करण के द्वारा, आप विशेषाधिकार प्रदान करके किसी उपयोगकर्ता को नहीं जोड़ सकते। इस क्वेरी के साथ इसका मतलब है:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' 
    IDENTIFIED BY 'type-root-password-here' 
    WITH GRANT OPTION;
FLUSH PRIVILEGES;

mysql यह त्रुटि लौटाएगा:

त्रुटि 1064 (42000): आपके SQL सिंटैक्स में कोई त्रुटि है; लाइन 1 पर 'IDENTIFIED BY' लिखित पासवर्ड के पास उपयोग करने के लिए सही सिंटैक्स के लिए आपके MySQL सर्वर संस्करण से मेल खाने वाले मैनुअल की जाँच करें

इसका मतलब है कि आपके पास% डोमेन के लिए रूट उपयोगकर्ता नहीं है। इसलिए आपको पहले उपयोगकर्ता को सम्मिलित करने की आवश्यकता है और फिर इस तरह विशेषाधिकार प्रदान करें:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'your password';
Query OK, 0 rows affected (0.11 sec)

mysql> GRANT ALL ON *.* TO 'root'@'%';
Query OK, 0 rows affected (0.15 sec)

mysql> FLUSH PRIVILEGES;

अपने विशिष्ट पासवर्ड के साथ पासवर्ड बदलना न भूलें।


0

इसने मेरे लिए काम किया। लेकिन एक अजीब समस्या यह भी थी कि मैंने पहले उन लोगों को प्रभावित करने की कोशिश की जो प्रभावित नहीं हुए। मैंने phpmyadmin पेज को अपडेट किया और इसे किसी तरह काम कर लिया।

यदि आपको स्थानीय-xampp-mysql तक पहुंच की आवश्यकता है। आप xampp-shell -> कमांड कमांड प्रॉम्प्ट पर जा सकते हैं।

फिर mysql -uroot -p --port = 3306 या mysql -uroot -p (यदि पासवर्ड सेट है)। उसके बाद आप mysql शेल पेज से उन एसेस को दे सकते हैं (लोकलहोस्ट / phpmyadmin से भी काम कर सकते हैं)।

बस अगर कोई इस विषय को ढूंढता है और शुरुआती समस्याएं रखता है तो उन्हें जोड़ रहा है।


0

उबुन्टु 18.04

स्थापित करें और सुनिश्चित करें कि हमें mysqld चल रहा है ।।

डेटाबेस और सेटअप रूट उपयोगकर्ता में जाएं:

sudo mysql -u root
SELECT User,Host FROM mysql.user;
DROP USER 'root'@'localhost';
CREATE USER 'root'@'%' IDENTIFIED BY 'obamathelongleggedmacdaddy';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit;

Mysqld अनुमतियाँ संपादित करें और पुनः आरंभ करें:

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

# edit the line to be this:
bind-address=0.0.0.0

sudo systemctl stop mysql
sudo systemctl start mysql

एक अन्य मशीन से, परीक्षण .. Mysqld मशीन पर Obvs port (3306) को टेस्ट मशीन से कनेक्शन की अनुमति देनी चाहिए।

mysql -u root -p -h 123.456.789.666

MySql के सभी अतिरिक्त "सुरक्षा" सुरक्षा में बिल्कुल भी मदद नहीं करते हैं, यह सिर्फ उलझता है और बाधा डालता है, अब वास्तव में पुराने दिनों की तुलना में इसे पेंच करना आसान है, जहां आपने अभी-अभी एक लंबे पासवर्ड का उपयोग किया था।

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