उपयोगकर्ता 'रूट' @ '%' के लिए अस्वीकृत


29

मैं MySQL में रूट उपयोगकर्ता तक पहुँचने के लिए ठीक था। लेकिन हाल ही में, मैं अब सक्षम नहीं हूं।

मैं ठीक लॉगिन करने में सक्षम हूं:

 mysql -u root -p

यहाँ लॉगिन के बाद mysql स्थिति है:

mysql> status
--------------
mysql  Ver 14.14 Distrib 5.5.28, for debian-linux-gnu (i686) using readline 6.2

Connection id:      37
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.5.28-0ubuntu0.12.04.3 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         4 min 16 sec

Threads: 1  Questions: 112  Slow queries: 0  Opens: 191  
Flush tables: 1  Open tables:  6  Queries per second avg: 0.437
--------------

लेकिन जब मैं कोई कार्रवाई करना चाहता हूं, जैसे:

mysql> CREATE DATABASE moyennegenerale;
ERROR 1044 (42000): Access denied for user 'root'@'%' to database 'moyennegenerale'

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

जवाबों:


17

मुझे लगता है कि आपके पास अनाम उपयोगकर्ता हैं

इसे चलाने का प्रयास करें:

SELECT user,host,password FROM mysql.user WHERE user='';

यह दिखाएगा कि अनाम उपयोगकर्ता क्या मौजूद हैं। सबसे अधिक संभावना है, आपको एक खाली उपयोगकर्ता, होस्ट %और एक खाली पासवर्ड वाली एक पंक्ति दिखाई देगी जैसा कि नीचे दिखाया गया है:

mysql> select user,host,password from mysql.user;
+-----------+-------------+-------------------------------------------+
| user      | host        | password                                  |
+-----------+-------------+-------------------------------------------+
| lwdba     | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| lwdba     | %           | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | localhost   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| root      | 127.0.0.1   | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| vanilla   | localhost   |                                           |
| mywife    | %           |                                           |
|           | %           |                                           | <<<--- LOOK !!!
| replicant | 10.64.113.% | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
| kumar     | %           |                                           |
+-----------+-------------+-------------------------------------------+

तो, आपने कैसे लॉगिन किया? यह क्वेरी चलाएँ:

SELECT USER(),CURRENT_USER();

यह आपको क्या कहता है?

  • USER () रिपोर्ट करता है कि आपने MySQL में कैसे प्रमाणित करने का प्रयास किया
  • CURRENT_USER () रिपोर्ट करता है कि आपको MySQL में प्रमाणित करने की अनुमति कैसे दी गई

दूसरे फ़ंक्शन से CURRENT_USER()पता चलता है कि लॉग इन करने के लिए किस अनाम उपयोगकर्ता का उपयोग किया गया था।

जब आपने लॉग इन किया तो आपके पास क्या विशेषाधिकार थे?

कृपया चलाएं

SHOW GRANTS;

इससे पता चलेगा कि आपके द्वारा लॉग इन करने के समय आपके पास क्या विशेषाधिकार थे। यह तथ्य कि आप डेटाबेस बनाने से अवरुद्ध थे, यह दर्शाता है कि आप रूट नहीं थे, बल्कि कुछ निचले-विशेषाधिकार वाले उपयोगकर्ता थे।

कृपया अपना उपयोगकर्ता अनुदान साफ़ करें।

रूट पासवर्ड रीसेट करने के लिए, कृपया निम्नलिखित करें:

echo "SET PASSWORD FOR root@localhost=PASSWORD('password');" > /var/lib/mysql/rootpwd.sql
service mysql restart
rm -f /var/lib/mysql/rootpwd.sql

मैंने यह कुशल विधि @ShlomiNoach से सीखी

कोशिश तो करो !!!


10

मुझे पता है तुमने क्या किया।

यह करो:

SELECT `User`, `Grant_priv` FROM `mysql`.`user` WHERE `User` = 'root';

आप शायद यह देखेंगे कि यह Grant_priv के लिए एक 'N' लौटाता है। तो ऐसा करें:

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

और दीवार! उम्मीद है की वो मदद करदे।


इसके अलावा, सुरक्षा कारणों से, आपको हमेशा एक नया dba बनाने के बाद रूट उपयोगकर्ता को हटा देना चाहिए .. बस सुनिश्चित करें कि वे सभी विकल्प हैं, फिर अंत में GRANT विकल्प के साथ .. यह बिट महत्वपूर्ण है।
केविन फ्लोरिडा

यह, समापन के साथ संयुक्त, और कनेक्शन को फिर से खोलना (हेइडीएसक्यूएल से मेरे मामले में) ने चाल चली!
xorinzor

4

rootआपके द्वारा उपयोगकर्ता के रूप में दर्ज करने के बाद अपने विशेषाधिकार देखें:

 mysql> show grants for 'root'@'localhost';

अपने विशेषाधिकारों की जाँच करने के बाद आप किसी अन्य उपयोगकर्ता को सभी विशेषाधिकार देने की कोशिश कर सकते हैं, या आप देने की कोशिश कर सकते हैं root उपयोगकर्ता को फिर से सभी विशेषाधिकार :

 mysql> grant all privileges on *.* to 'root'@'localhost';

यदि तुम्हारा root उपयोगकर्ता के पास विशेषाधिकार नहीं हैं, तो आप उन्हें पुनर्स्थापित करने का प्रयास कर सकते हैं, इसलिए:

mysqldसर्वर बंद करो

सर्वर को इस तरह से रीस्टार्ट करें mysqld_safe --skip-grant-table

इसके rootसाथ विशेषाधिकार बहाल करें :

 mysql> flush privileges;
 mysql> grant all privileges on *.* to 'root'@'localhost' with grant option;

'रूट' @ 'लोकलहोस्ट' कमांड के लिए शो ग्रांट के बाद मुझे यही मिलता है: ERROR 1141 (42000): होस्ट 'लोकलहोस्ट' पर यूजर 'रूट' के लिए ऐसा कोई अनुदान निर्धारित नहीं है

दूसरी कमांड का आउटपुट क्या है?

2
डेबियन में ऐसा करने का एक "बेहतर" तरीका है, जहां आपको सर्वर को पुनरारंभ करने की आवश्यकता नहीं है। जैसे ही rootकनेक्ट debian-sys-maint@localhostकरें और पासवर्ड का उपयोग करें /etc/mysql/debian.cnf। उस उपयोगकर्ता के पास MySQL में सभी विशेषाधिकार हैं। अच्छी बात यह है कि आपको अपने सर्वर को पुनरारंभ करने की आवश्यकता नहीं है।
एंडर्स

इसे इस्तेमाल करे। sudo mysql --defaults-file = / etc / mysql / debian.cnf
एंडर्स

0

आपके विशेषाधिकार कम हो सकते हैं?

इसके अलावा, आप रूट विशेषाधिकारों के साथ एक और खाता बनाने की कोशिश कर सकते हैं।

और रूट उपयोगकर्ता को हटा दें, और निर्दिष्ट विशेषाधिकारों के साथ फिर से बनाएं।

यह मददगार हो सकता है: http://dev.mysql.com/doc/refman/5.5/en/resetting-perma.com

C.5.4.1.2 - LINUX (बनाने के लिए फ़ाइल जो पूरी जड़ विशेषाधिकारों के साथ एक नया उपयोगकर्ता बनाते हैं)

C.5.4.1.1 - विंडोज (बनाने वाले क्वेरी के साथ फ़ाइल बनाएं, पूर्ण रूट विशेषाधिकार के साथ एक नया उपयोगकर्ता)

क्वेरी: (रूट उपयोगकर्ता बनाएं)

  CREATE USER 'new_root'@'%' IDENTIFIED BY '***';
  GRANT ALL PRIVILEGES ON *.* TO 'new_root'@'%' IDENTIFIED BY '***' WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

MySQL मैनुअल उपयोगकर्ता बनाएँ: http://dev.mysql.com/doc/refman/5.5/en/adding-users.html

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