मैं MySQL रूट उपयोगकर्ता के पूर्ण विशेषाधिकारों को कैसे पुनर्स्थापित कर सकता हूं?


108

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

UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
# MySQL returned an empty result set (i.e. zero rows).
FLUSH PRIVILEGES ;
# MySQL returned an empty result set (i.e. zero rows).


#1045 - Access denied for user 'root'@'localhost' (using password: YES)
GRANT ALL ON *.* TO 'root'@'localhost'

1
दूसरी त्रुटि पासवर्ड समस्या की तरह दिखती है। संभवत: यह मानने में मेरी गलती है कि आपका 'रूट' @ 'लोकलहोस्ट' खाता पहले से ही था। Mysqld को --स्किप-ग्रांट-टेबल के साथ फिर से चलाएं, और: "DROP USER 'रूट' @ 'लोकलहोस्ट' करें; सभी PRIVILEGES पर जाएं '' ''% '' रूट '' बजाय? यह पता लगाने का सबसे अच्छा तरीका है कि आपको किस खाते तक पहुंच प्रदान करनी चाहिए, "Select User, Host FROM mysql.user WHERE उपयोगकर्ता = 'रूट' को चलाने के लिए;" ... इससे आपको वह होस्टनाम मिलेगा, जिसका उपयोग @ के बाद किया जाना चाहिए GRANT कमांड में प्रतीक।
DMI

1
यह ऑफ़-टॉपिक के रूप में विषय को चिह्नित करने के लिए मॉड के लिए बुरा रूप है जब यह ऑफ-टॉपिक नहीं होता है, सिवाय इसके कि जिस मामले में इसे पहचाना जाना चाहिए उस विषय के लिए एक और स्टैक एक्सचेंज साइट अधिक अनुकूल हो सकती है। (मॉड पर शर्म करो।) यहाँ यह कहाँ जा सकता है: dba.stackexchange.com
जॉन डेविस

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

जवाबों:


148

यदि GRANT ALLकाम नहीं करता है, तो कोशिश करें:

  1. बंद करो mysqldऔर --skip-grant-tablesविकल्प के साथ इसे पुनरारंभ करें ।
  2. mysqldसर्वर से बस कनेक्ट करें : mysql(अर्थात कोई -pविकल्प नहीं है, और उपयोगकर्ता नाम की आवश्यकता नहीं हो सकती है)।
  3. Mysql क्लाइंट में निम्न आदेश जारी करें:

    UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

    FLUSH PRIVILEGES;

उसके बाद, आपको चलाने में सक्षम होना चाहिए GRANT ALL ON *.* TO 'root'@'localhost';और यह काम करना चाहिए ।


7
1. बस के साथ mysqld सर्वर से कनेक्ट करने के लिए कैसे: mysql 2. जब मैंने UPDATE mysql.user SET Grant_priv = '1' WHERE उपयोगकर्ता = 'रूट' जारी किया; फ्लश PRIVILEGES; मुझे क्वेरी ठीक मिली, 0 पंक्तियाँ प्रभावित (0.00 सेकंड) पंक्तियाँ मिलान: 2 परिवर्तित: 0 चेतावनियाँ: 0 क्वेरी ठीक, 0 पंक्तियाँ प्रभावित (0.00 सेकंड)। जब मैंने phpMyAdmin में रूट उपयोगकर्ता के रूप में लॉग इन किया, तब भी मुझे "कोई विशेषाधिकार नहीं" दिखाई देता है।
स्टीवन

क्षमा करें, ऊपर दिए गए चरणों के बाद आपको GRANT ALL कमांड को चलाने में सक्षम होना चाहिए। Mysqld से कनेक्ट होने के लिए, मेरा मतलब है कि आपको पासवर्ड की आवश्यकता नहीं होगी - मुझे याद नहीं है कि कोई उपयोगकर्ता नाम काम करेगा, या क्या उसे "रूट" होना चाहिए।
DMI

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

1
हाँ, यह काम करता है। और अगर आप खिड़कियों पर हैं, तो पासवर्ड के साथ कमांड लाइन पर mysql को एक्सेस skip-grant-tablesकरने के लिए अस्थायी रूप [mysqld]से अपने mysql कॉन्फ़िगरेशन फ़ाइल के अनुभाग में जोड़ें ।
अंक

1
मैं 9 घंटे से अधिक समय तक ग्रांट भाग (जो काम नहीं किया) पर अटक गया और आपके उत्तर ने मुझे बचा लिया ... आप एक lifesaver.thanks हैं
अली एसएच

91

यदि आपने rootगलती से अपना उपयोगकर्ता हटा दिया है तो आप एक काम कर सकते हैं:

  1. MySQL सेवा बंद करें
  2. Daud mysqld_safe --skip-grant-tables &
  3. टाइप करें mysql -u root -pऔर एंटर दबाएं।
  4. अपना पासवर्ड डालें
  5. Mysql कमांड लाइन में प्रवेश करें: use mysql;

फिर इस क्वेरी को निष्पादित करें:

insert into `user` (`Host`, `User`, `Password`, `Select_priv`, `Insert_priv`, `Update_priv`, `Delete_priv`, `Create_priv`, `Drop_priv`, `Reload_priv`, `Shutdown_priv`, `Process_priv`, `File_priv`, `Grant_priv`, `References_priv`, `Index_priv`, `Alter_priv`, `Show_db_priv`, `Super_priv`, `Create_tmp_table_priv`, `Lock_tables_priv`, `Execute_priv`, `Repl_slave_priv`, `Repl_client_priv`, `Create_view_priv`, `Show_view_priv`, `Create_routine_priv`, `Alter_routine_priv`, `Create_user_priv`, `ssl_type`, `ssl_cipher`, `x509_issuer`, `x509_subject`, `max_questions`, `max_updates`, `max_connections`, `max_user_connections`) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

फिर mysqld को पुनरारंभ करें

EDIT: 6 अक्टूबर, 2018

यदि किसी और को इस उत्तर की आवश्यकता है, तो मैंने आज की कोशिश की innodb_version 5.6.36-82.0 और 10.1.24-MariaDB का उपयोग करके। यह काम करता है यदि आप BACKTICKS को रिमूव करते हैं (कोई एकल उद्धरण भी नहीं है, बस उन्हें हटा दें):

insert into user (Host, User, Password, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Reload_priv, Shutdown_priv, Process_priv, File_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Show_db_priv, Super_priv, Create_tmp_table_priv, Lock_tables_priv, Execute_priv, Repl_slave_priv, Repl_client_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Create_user_priv, ssl_type, ssl_cipher, x509_issuer, x509_subject, max_questions, max_updates, max_connections, max_user_connections) 
values('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','','0','0','0','0');

1
@ बिपिन, अजीब फ़ोल्डर mysqld.exeमें ही है bin, नहीं mysqld_safe.exe। "Mysqld_safe" से आपका क्या अभिप्राय है?
पेसियर

4
MySQL 5.5 के लिए, आपको दो और निजी, Event_priv और Trigger_priv की आवश्यकता है।
ग्रेग बेल

मुझे लगता है कि यह 5.6.5 में टूट जाता है
ओथियस

1
@ स्पेसर - इस पोस्ट के अनुसार आपको वास्तव में ज़रूरत नहीं है mysqld_safe, बस सामान्य mysqld बाइनरी mysqld.exe --skip-grant-tables
चलाएं

2
ERROR 1054 (42S22): Unknown column 'Password' in 'field list'
जेमी हटबर

24

जब मैं रूट यूजर था तो मैं mysql कंसोल में रूट और डेटाबेस के विशेषाधिकारों को नहीं दिखाता, इसलिए उपयोगकर्ता द्वारा बदल दिया गया mysql>mysql -u 'userName' -p;और पासवर्ड;

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';

FLUSH PRIVILEGES;

इस कमांड के बाद यह सभी डेटाबेस को रूट में दिखाता है।

धन्यवाद


1
मुझे चीजों का एक संयोजन करना था। मुझे mysqld सेवा को रोकना था, फिर mysqld_safe --skip-crant-tables और फिर ऊपर बताए गए कमांड को चलाएँ, फिर mysql को पुनरारंभ करें, फिर GRANT ALL ON चलाएं 'उपयोगकर्ता' @ 'लोकलहोस्ट' के लिए;
निक वुडहम्स

5

मैंने डालने से इनकार किया था और विशेषाधिकारों को रूट करने के लिए पुनः लोड किया था। इसलिए अनुमतियां अपडेट करने के बाद, FLUSH PRIVILEGES काम नहीं कर रहा था (पुनः लोड विशेषाधिकार की कमी के कारण)। इसलिए मैंने user.root विशेषाधिकारों को पुनर्स्थापित करने के लिए Ubuntu 16.04 पर debian-sys-maint उपयोगकर्ता का उपयोग किया। आप इस फ़ाइल से user.debian-sys-maint का पासवर्ड पा सकते हैं

sudo cat /etc/mysql/debian.cnf

आप मुझे बचा लीजिए! ग्रांट न तो --स्किप-अनुदान-टेबल मोड में काम नहीं कर रहा था, इसलिए ubuntu-system के रूप में प्रवेश करने से मुझे अपने रूट उपयोगकर्ता को फिर से बनाने की अनुमति
मिली

4
GRANT ALL ON *.* TO 'user'@'localhost' with GRANT OPTION;

बस संबंधित पासवर्ड का उपयोग कर रूट से लॉग इन करें यदि कोई हो और बस उपर्युक्त कमांड को चलाने के लिए जो भी उपयोगकर्ता है।

उदाहरण के लिए:

GRANT ALL ON *.* TO 'root'@'%' with GRANT OPTION;

3
लेकिन अगर 'रूट' उपयोगकर्ता ने निजीकरण खो दिया है, तो यह काम कैसे कर सकता है, क्या रूट उपयोगकर्ता को ऐसा करने के लिए उन्नत विशेषाधिकार की आवश्यकता नहीं है? इसने मेरे लिए काम नहीं किया।
तेरुंगवा

3

बस प्रत्येक कॉलम विशेषाधिकारों में mysql.userमूल्य के साथ डालें या अपडेट करें Y


2

यदि आप WAMP का उपयोग स्थानीय कंप्यूटर पर कर रहे हैं (mysql संस्करण 5.7.14) चरण 1: my.ini फ़ाइल खोलें चरण 2: सेमी-कोलोन चरण 3 को हटाकर इस लाइन को 'स्किप-ग्रांट-टेबल' पर अन-कमेंट करें: mysql को पुनरारंभ करें सर्वर चरण 4: लॉन्च mySQL कंसोल चरण 5:

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='root';
FLUSH PRIVILEGES;

चरण 6: समस्या हल हो गई !!!!

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