MySQL 8.0 में उपयोगकर्ता को रूट करने के लिए सभी विशेषाधिकार कैसे प्रदान करें


110

कोशिश की

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

मिल रहा

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

नोट: पिछले संस्करणों में कोशिश किए जाने पर वही काम कर रहा है।

भी आजमाया

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

मिल रहा

ERROR 1410 (42000): आपको GRANT वाला उपयोगकर्ता बनाने की अनुमति नहीं है

MySQL (8.0.11.0) उपयोगकर्ता नाम / पासवर्ड रूट / रूट है।


क्या आप सीधे mysql से जुड़ रहे हैं या आप ssh का उपयोग करते हैं?
हराल्ड

रूट उपयोगकर्ता के रूप में कमांड प्रॉम्प्ट से सीधे
प्रवीण


7
im भी एक ही मुद्दे के साथ अटक गया। मैं mysql शेल का उपयोग करके लॉन्च कर रहा हूं mysql -u root -p, फिर रूट पासवर्ड दर्ज कर रहा हूं । फिर मैंने कोशिश की GRANT GRANT OPTION ON *.* TO 'root'@'%';और मुझे त्रुटि मिलीERROR 1410 (42000): You are not allowed to create a user with GRANT
लक्ष्य

जवाबों:


198

MySQL 8 से शुरू होकर आप GRANTकमांड का उपयोग करके उपयोगकर्ता नहीं बना सकते (निहित) । इसके बजाय CREATE USER का उपयोग करें , उसके बाद GRANT स्टेटमेंट:

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'root';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

सुरक्षा जोखिमों के बारे में सावधानीWITH GRANT OPTION , देखें:


3
यह कमांड एक नया उपयोगकर्ता बनाएगा। लेकिन मैं मौजूदा रूट उपयोगकर्ता को विशेषाधिकार देना चाहता हूं। mysql> USATE 'root' @ '%' IDENTIFIED BY 'रूट'; क्वेरी ठीक है, 0 पंक्तियाँ प्रभावित (0.31 सेकंड) mysql> सभी PRIVILEGES पर अनुदान विकल्प के साथ '' ''% ''; क्वेरी ठीक, 0 पंक्तियाँ प्रभावित (0.16 सेकंड) mysql> Mysql.user से उपयोगकर्ता का चयन करें; + ------------------ + | उपयोगकर्ता | + ------------------ + | जड़ | | mysql.infoschema | | mysql.session | | mysql.sys | | जड़ | + ------------------ + सेट में ५ पंक्तियाँ (०.०० सेकंड)
प्रवीण

उपयोगकर्ता तालिका में नाम रूट के साथ अब दो उपयोगकर्ता मौजूद हैं !! इसके अलावा, मैं दूरस्थ रूप से कनेक्ट करने में सक्षम नहीं हूं (रूट उपयोगकर्ता)। ------------- विवरण: प्रकार: com.mysql.jdbc.exception.jdbc4.MySQLNonTransientConnectionException SQL राज्य: 08001
प्रवीण

अजीब। आपके प्रश्न में त्रुटि संदेश इंगित करता है कि यह उपयोगकर्ता मौजूद नहीं है। यही एकमात्र कारण है कि मैंने इसे पहले बनाने का सुझाव दिया। और एकल MySQL उदाहरण में एक ही उपयोगकर्ता का दो बार होना असंभव है। वे या तो नाम या मेजबान भाग में भिन्न होते हैं।
माइक लिस्चके

2
ये 2 उपयोगकर्ता विभिन्न होस्ट से कनेक्ट होते हैं। SELECT User, Host FROM mysql.user;इसके बजाय भागो ।
माइक लिस्चके

3
वह त्रुटि मिली:ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
adi

31

1) यह मेरे लिए काम किया। सबसे पहले, एक नया उपयोगकर्ता बनाएं। उदाहरण: fooपासवर्ड वाला उपयोगकर्ताbar

> mysql> CREATE USER 'foo'@'localhost' IDENTIFIED WITH mysql_native_password BY 'bar';

2) नीचे दिए गए कोड को 'फू' के साथ एक यूज़रनेम से बदलें।

> mysql> GRANT ALL PRIVILEGES ON database_name.* TO'foo'@'localhost';

नोट: Database_Name डेटाबेस है कि आप विशेषाधिकार होना चाहता हूँ, सभी पर मतलब है

3) उपयोगकर्ता फू के रूप में लॉगिन करें

mysql> mysql -u foo -p

पासवर्ड: बार

4) सुनिश्चित करें कि Sequelize से आपका प्रारंभिक कनेक्शन pw बार के साथ foo करने के लिए सेट है।


5
यह अब तक इस सवाल का जवाब नहीं है। यह वैश्विक अनुमतियों के बारे में है, और डेटाबेस विशिष्ट अनुमतियों के बारे में नहीं।
tmuecksch

29

मुझे बहुत सारे (गलत) उत्तर मिलते हैं, यह इस तरह से सरल है:

USE mysql;
CREATE USER 'user'@'localhost' IDENTIFIED BY 'pass';
GRANT ALL ON *.* TO 'user'@'localhost';
FLUSH PRIVILEGES;

नोट: स्व-निर्मित के बजाय userआप rootडेटाबेस से कनेक्ट करने के लिए उपयोग कर सकते हैं । हालाँकि, किसी एप्लिकेशन को डेटाबेस से कनेक्ट करने के लिए डिफ़ॉल्ट रूट अकाउंट का उपयोग करना पसंदीदा तरीका नहीं है।

वैकल्पिक विशेषाधिकार (सावधान रहें और कम से कम विशेषाधिकार प्राप्त सिद्धांत को याद रखें):

-- Grant user permissions to all tables in my_database from localhost --
GRANT ALL ON my_database.* TO 'user'@'localhost';

-- Grant user permissions to my_table in my_database from localhost --
GRANT ALL ON my_database.my_table TO 'user'@'localhost';

-- Grant user permissions to all tables and databases from all hosts --
GRANT ALL ON *.* TO 'user'@'*';

यदि आप किसी तरह निम्नलिखित त्रुटि में भाग लेंगे:

ERROR 1130 (HY000): होस्ट '1.2.3.4' को इस MySQL सर्वर से कनेक्ट करने की अनुमति नहीं है

आपको निम्नलिखित दो पंक्तियों को जोड़ने और बदलने की आवश्यकता है /etc/mysql/my.cnfऔर mysql को पुनरारंभ करें:

bind-address           = 0.0.0.0
skip-networking

क्या आप इस बात पर विस्तार से बता सकते हैं कि सिर्फ शिकायत करने के बजाय यह काम क्यों नहीं करता है? इस तरह मैं आपकी मदद कर सकता हूं या अतिरिक्त जानकारी पोस्ट कर सकता हूं।
नेबुलास्टिक

यह उत्तर मूल उपयोगकर्ता विशेषाधिकार के प्रश्न को भी हल नहीं करता है ।
जोसेफ 8

तदनुसार जवाब अपडेट करें।
नेबुलास्टिक

1
सबसे अच्छा जवाब, अब यह GRANT ALL ONMySQL 8.0 के लिए है। इसके अलावा, मेरा मानना ​​है कि अक्षम करने के बजाय bind-addressआप किसी भी कमांड में 127.0.0.1शामिल हो सकते हैं --protocol=tcp। परफॉर्मेंस लॉन्ग-टर्म भी इससे बेहतर है localhost
जेसी निकल्स

3

मेरी ऐनक:

mysql --version
mysql  Ver 8.0.16 for Linux on x86_64 (MySQL Community Server - GPL)

मेरे लिए क्या काम किया:

mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'desired_password';
mysql> GRANT ALL PRIVILEGES ON db_name.* TO 'username'@'localhost' WITH GRANT OPTION;

दोनों प्रश्नों में प्रतिक्रिया:

Query OK, O rows affected (0.10 sec*)

NB: मैंने पहले एक डेटाबेस (db_name) बनाया था और डिफ़ॉल्ट रूट उपयोगकर्ता का उपयोग करने के स्थान पर DB में सभी तालिकाओं को दिए गए सभी विशेषाधिकारों के साथ एक उपयोगकर्ता क्रेडेंशियल बना रहा था, जो मैंने कहीं पढ़ा है एक सर्वोत्तम अभ्यास है।


3

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

इस बिंदु पर MySQL के सुंदर गूंगे, इसलिए यदि आपके पास '' @ '' लोकलहोस्ट '' है और 'रूट' @ '%' पर विशेषाधिकार देने की कोशिश कर रहा है, तो यह उन्हें अलग-अलग उपयोगकर्ताओं के रूप में मानता है, बजाय किसी होस्ट पर रूट उपयोगकर्ता के सामान्यीकृत धारणा के। स्थानीय होस्ट।

त्रुटि संदेश भी भ्रामक है।

इसलिए, यदि आपको त्रुटि संदेश मिल रहा है, तो अपने मौजूदा उपयोगकर्ताओं को कुछ इस तरह से जांचें

SELECT CONCAT("'", user, "'@'", host, "'") FROM mysql.user;

और फिर लापता उपयोगकर्ता बनाएं (जैसा कि माइक ने सलाह दी है) या अपने विदेशी कमांड को वास्तविक एक्सिसिटिंग यूजर स्पेसियन में समायोजित करें।


यह मेरे लिए एक वैध समाधान था! मैं बस उपयोगकर्ता @ लाइन को ठीक से टाइप करने में विफल रहा था। सुझाए गए अन्य समाधानों को आज़माने से पहले इसे अवश्य देखें। मेरे लिए यह था: क्रिएट USER 'user'@'%domain.com' और फिर जब मैंने फेल होने वाले GRANT स्टेटमेंट को जारी किया, तो मेरा सिंटैक्स एक 'बंद हो गया।' ऐसा लग रहा था कि ये GRANT .... TO 'user'@'%.domain.com' है। मैं 'लगाना भूल गया।' मेरे सृजनात्मक कथन में और इसने इस मुद्दे को ठीक करने में सभी अंतर बनाए।
दीवार

2

बस विषय पर मेरे 2 सेंट। मैं MySQL कार्यक्षेत्र से कनेक्ट करने की कोशिश के साथ सटीक एक ही समस्या थी। मैं विकास के लिए एक स्थानीय सैंडबॉक्स स्थापित करने के लिए एक बिटनामी-मैस्कल वर्चुअल मशीन चला रहा हूं।

बिटमनी के ट्यूटोरियल ने कहा कि 'ग्रांट ऑल प्रिविलेज' कमांड को चलाएं:

/opt/bitnami/mysql/bin/mysql -u root -p -e "grant all privileges on *.* to 'root'@'%' identified by 'PASSWORD' with grant option";

यह स्पष्ट रूप से काम नहीं कर रहा था, मुझे अंततः माइक लिस्चके के जवाब का उपयोग करके काम करने के लिए मिला।

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

  1. उपयोगकर्ता को छोड़ देना।
  2. उपयोगकर्ता को फिर से बनाएँ।
  3. सुनिश्चित करें कि आपके पास my.cnf config फाइल पर सही बाइंडिंग है। मेरे मामले में मैंने टिप्पणी की है क्योंकि यह सिर्फ सैंडबॉक्स वातावरण के लिए है।

मैसकल कंसोल से:

सूची उपयोगकर्ता (आपके सभी उपयोगकर्ताओं को देखने में सहायक):

select user, host from mysql.user;

वांछित उपयोगकर्ता छोड़ें:

drop user '{{ username }}'@'%';

उपयोगकर्ता और अनुदान अनुमतियाँ बनाएँ:

CREATE USER '{{ username }}'@'%' IDENTIFIED BY '{{ password }}';
GRANT ALL PRIVILEGES ON *.* TO '{{ username }}'@'%' WITH GRANT OPTION;

यह आदेश चलाएँ:

FLUSH PRIVILEGES;

अपनी mysql config फाइल 'my.cnf' की स्थिति जानें और इस तरह दिखने वाली लाइन की तलाश करें:

bind-address=127.0.0.1

और '#' का उपयोग करके यह टिप्पणी करें:

#bind-address=127.0.0.1

फिर अपनी mysql सेवा को पुनरारंभ करें।

आशा है कि यह किसी को एक ही मुद्दा होने में मदद करता है!


1

यह मेरे लिए काम किया:

mysql> FLUSH PRIVILEGES 
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES

1

अपना उपयोगकर्ता नाम और डोमेन पहले की तरह ही बना हुआ है। उपयोगकर्ता तालिका में दो कॉलम्स द्वारा मेराकल का चयन करें। यदि यह अलग है, तो mysql सोच सकता है कि आप अनुदान द्वारा एक नया खाता बनाना चाहते हैं, जो 8.0 संस्करण के बाद समर्थित नहीं है।


1

मेरी ऐनक:

mysql --version
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

मेरे लिए क्या काम किया:

mysql> USE mysql;
mysql> UPDATE User SET Host='%' WHERE User='root' AND Host='localhost';

यद्यपि यह आपकी विशिष्ट स्थिति में काम करेगा। Sql सिंटैक्स के यह टुकड़े एक उपयोगकर्ता को अपडेट करते हैं, और यह एक उपयोगकर्ता खाता सेट नहीं करता है। यह विशेषाधिकार भी नहीं देता है।
नेबुलास्टिक

0

खैर, मैं सिर्फ एक ही समस्या थी। यहां तक ​​कि अगर रूट '%' था, तो दूरस्थ रूप से कनेक्ट नहीं हो सकता है। अब, my.iniफ़ाइल पर एक नज़र रखना (विंडोज़ में कॉन्फ़िग फ़ाइल) bind-addressस्टेटमेंट छूट गया था।

इसलिए ... मैंने इसके bind-address = *बाद [mysqld]सेवा शुरू की और सेवा को फिर से शुरू किया। अब यह काम कर रहा है!


यह वास्तव में सही उत्तर के सबसे करीब है।
जोसेफ

0

1. अनुदान विशेषाधिकार

mysql> सभी मूल्यों पर अनुदान। अनुदान विकल्प के साथ '' @ '%';

mysql> FLUSH PRIVILEGES

2. उपयोगकर्ता तालिका की जाँच करें:

mysql> mysql का उपयोग करें

mysql> होस्ट, उपयोगकर्ता से उपयोगकर्ता का चयन करें यहां छवि विवरण दर्ज करें

3. कॉन्फ़िगरेशन फ़ाइल को संशोधित करें

mysql default bind ip .0 127.0.0.1, अगर हम रिमोट विजिट सर्विसेज में जाना चाहते हैं, तो बस कॉन्फिग डिलीट करें

#Modify the configuration file
vi /usr/local/etc/my.cnf

#Comment out the ip-address option
[mysqld]
# Only allow connections from localhost
#bind-address = 127.0.0.1

4. सेवाओं को पुनः आरंभ करें

काढ़ा सेवा mysql को पुनरारंभ करें


हालांकि यह काम करेगा, मैं कुछ निजी कंपनियों को अनुदान देते समय उत्पादन में mysql उदाहरण को पुनः आरंभ नहीं करूंगा। इसके बजाय फ्लश विशेषाधिकारों का प्रयास करें।
नेबुलास्टिक

-1

यह काम कर सकता है:

grant all on dbtest.* to 'dbuser'@'%' identified by 'mysql_password';

1
कोड टॉस करने के बजाय, यह भी बताएं कि यह उचित समाधान क्यों है। लक्ष्य यह है कि ओपी जानता है कि अगली बार क्या करना है, न कि केवल तत्काल समस्या का समाधान करना है।
द टिन मैन

-1

मेरे पास यही मुद्दा था, जिसने मुझे यहां तक ​​पहुंचाया। विशेष रूप से, स्थानीय विकास के लिए, मैं इसके mysql -u root -pबिना सक्षम होना चाहता था sudo। मैं एक नया उपयोगकर्ता नहीं बनाना चाहता। मैं उपयोग करना चाहता हूँroot एक स्थानीय PHP वेब ऐप से ।

त्रुटि संदेश भ्रामक है, क्योंकि डिफ़ॉल्ट में कुछ भी गलत नहीं था'root'@'%' उपयोगकर्ता विशेषाधिकारों के ।

इसके बजाय, जैसा कि कई लोगों ने अन्य उत्तरों में उल्लेख किया है, समाधान केवल मेरे कॉन्फ़िगरेशन के bind-address=0.0.0.0बजाय सेट करना था । अन्यथा किसी परिवर्तन की आवश्यकता नहीं थी।bind-address=127.0.0.1/etc/mysql/mysql.conf.d/mysqld.cnf


यह भी पूरी तरह से सवाल का जवाब नहीं है।
नेबुलास्टिक

-2

मुझे CentOS पर यही समस्या थी और यह मेरे लिए काम करता था (संस्करण: 8.0.11):

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'

त्रुटि 1064 (42000): आपके एसक्यूएल सिंटैक्स में एक त्रुटि है; उस मैनुअल का चेक करें जो आपके MySQL सर्वर वर्जन से संबंधित सही सिंटैक्स के पास 'उपयोग करने के लिए' है। लाइन 1 पर '' ''% '' के लिए
GDefender

mysql> सभी PRIVILEGES पर जाएं। जड़ को'@'%'; त्रुटि 1064 (42000): आपके एसक्यूएल सिंटैक्स में एक त्रुटि है; उस मैनुअल का चेक करें जो आपके MySQL सर्वर वर्जन से संबंधित सही सिंटैक्स के पास 'उपयोग करने के लिए' है। लाइन 1 mysql>
PGOEL
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.