उपयोगकर्ता को सुपर विशेषाधिकार कैसे प्रदान करें?


44

मैंने एक उपयोगकर्ता बनाया है और उपयोगकर्ता को विशेषाधिकार दिए हैं 1।

`grant all privileges on db1.* to user1@'%' with grant option;

अपने डेटाबेस में डंप आयात करने के लिए mysql कार्यक्षेत्र का उपयोग कर रहा हूँ। डेटाबेस db1 में डंप आयात करते समय, त्रुटि बताते हुए कहा कि

ERROR 1227 (42000) at line 49: Access denied; you need (at least one of) the SUPER privilege(s) for this operation

उस डंप में सभी तालिकाओं को सफलतापूर्वक आयात किया जाता है लेकिन डेटाबेस में रूटीन आयात करते समय त्रुटि होती है। क्या विशेषाधिकार के साथ कुछ गलत है, मैंने user1 को दिया है। कृपया सलाह दें।

जवाबों:


35

राजनीतिक रूप से सही अर्थों में, आपने जो मांगा है वह असंभव है। क्यों ?

सुपर विशेषाधिकार एक वैश्विक विशेषाधिकार है, नहीं एक डेटाबेस स्तर विशेषाधिकार है।

जब आपने उपयोगकर्ता को बनाया है

grant all privileges on db1.* to user1@'%' with grant option;

आपने mysql.userउपयोगकर्ता = user1 और होस्ट = '%' के साथ तालिका को आबाद किया । अन्य सभी कॉलम (वैश्विक विशेषाधिकार) 'एन' के लिए डिफ़ॉल्ट थे। उन स्तंभों में से एक है Super_priv। यहाँ तालिका है:

mysql> desc mysql.user;
+------------------------+-----------------------------------+------+-----+---------+-------+
| Field                  | Type                              | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+---------+-------+
| Host                   | char(60)                          | NO   | PRI |         |       |
| User                   | char(16)                          | NO   | PRI |         |       |
| Password               | char(41)                          | NO   |     |         |       |
| Select_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Insert_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Update_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Delete_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Create_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Drop_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Reload_priv            | enum('N','Y')                     | NO   |     | N       |       |
| Shutdown_priv          | enum('N','Y')                     | NO   |     | N       |       |
| Process_priv           | enum('N','Y')                     | NO   |     | N       |       |
| File_priv              | enum('N','Y')                     | NO   |     | N       |       |
| Grant_priv             | enum('N','Y')                     | NO   |     | N       |       |
| References_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Index_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Alter_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Show_db_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Super_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Create_tmp_table_priv  | enum('N','Y')                     | NO   |     | N       |       |
| Lock_tables_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Execute_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Repl_slave_priv        | enum('N','Y')                     | NO   |     | N       |       |
| Repl_client_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Create_view_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Show_view_priv         | enum('N','Y')                     | NO   |     | N       |       |
| Create_routine_priv    | enum('N','Y')                     | NO   |     | N       |       |
| Alter_routine_priv     | enum('N','Y')                     | NO   |     | N       |       |
| Create_user_priv       | enum('N','Y')                     | NO   |     | N       |       |
| Event_priv             | enum('N','Y')                     | NO   |     | N       |       |
| Trigger_priv           | enum('N','Y')                     | NO   |     | N       |       |
| Create_tablespace_priv | enum('N','Y')                     | NO   |     | N       |       |
| ssl_type               | enum('','ANY','X509','SPECIFIED') | NO   |     |         |       |
| ssl_cipher             | blob                              | NO   |     | NULL    |       |
| x509_issuer            | blob                              | NO   |     | NULL    |       |
| x509_subject           | blob                              | NO   |     | NULL    |       |
| max_questions          | int(11) unsigned                  | NO   |     | 0       |       |
| max_updates            | int(11) unsigned                  | NO   |     | 0       |       |
| max_connections        | int(11) unsigned                  | NO   |     | 0       |       |
| max_user_connections   | int(11) unsigned                  | NO   |     | 0       |       |
| plugin                 | char(64)                          | YES  |     |         |       |
| authentication_string  | text                              | YES  |     | NULL    |       |
| password_expired       | enum('N','Y')                     | NO   |     | N       |       |
+------------------------+-----------------------------------+------+-----+---------+-------+
43 rows in set (0.00 sec)

mysql>

Super_privठीक बाद दिखाई देता है Show_db_priv

डेटाबेस स्तर विशेषाधिकारों में आबाद हो गया mysql.db। यहाँ है:

mysql> desc mysql.db;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(16)      | NO   | PRI |         |       |
| Select_priv           | enum('N','Y') | NO   |     | N       |       |
| Insert_priv           | enum('N','Y') | NO   |     | N       |       |
| Update_priv           | enum('N','Y') | NO   |     | N       |       |
| Delete_priv           | enum('N','Y') | NO   |     | N       |       |
| Create_priv           | enum('N','Y') | NO   |     | N       |       |
| Drop_priv             | enum('N','Y') | NO   |     | N       |       |
| Grant_priv            | enum('N','Y') | NO   |     | N       |       |
| References_priv       | enum('N','Y') | NO   |     | N       |       |
| Index_priv            | enum('N','Y') | NO   |     | N       |       |
| Alter_priv            | enum('N','Y') | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Event_priv            | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.00 sec)

mysql>

जो नोटिस Super_privमें मौजूद नहीं है mysql.db

शुद्ध SQL शब्दों में इसे देखने के लिए, user1 के रूप में लॉगिन करें और रन करें SHOW GRANTS;आउटपुट में दो लाइनें होंगी:

  • GRANT USAGE ON *.* TO user1@'%' ...
  • GRANT ALL PRIVILEGES ON db1.* TO user1@'%' ...

एक हैक है जिसे आप आजमा सकते हैं लेकिन मैं आमतौर पर इसकी सिफारिश नहीं करूंगा।

STEP 01) mysql को रूट @ localhost के रूप में लॉगिन करें (सभी निजी होना चाहिए)

STEP 02) इस क्वेरी को रन करें

UPDATE mysql.user SET Super_Priv='Y' WHERE user='user1' AND host='%';

STEP 03) इस क्वेरी को रन करें

FLUSH PRIVILEGES;

वह सैद्धांतिक रूप से काम करना चाहिए। फिर, user1 काम कर सकता है (मैं कोई गारंटी नहीं देता)।

अद्यतन 2014-12-19 15:24 ईएसटी

मेटाफैनियल ने बस पूछा

महान व्याख्या, धन्यवाद। हालाँकि अगर आप समस्या को हल करने के लिए उस तरीके को आगे नहीं बढ़ाते हैं, तो इस सुपर-ग्रिप के उपयोगकर्ता के लिए एक और तरीका क्या है? धन्यवाद! - मेटाफैनियल

चूंकि केवल DB पहुंच वाले उपयोगकर्ता के पास SUPER नहीं हो सकता है , केवल एक चीज जो कर सकती है वह है डंप में मैन्युअल रूप से DEFINER को बदलना। मूल विचार एक पाठ फ़ाइल को रूटीन mysqldump करने के लिए होगा। फिर, निश्चित को संपादित करें user1@'%'। फिर, आपको पुनः लोड करने में सक्षम होना चाहिए।

दृश्यों के लिए एक ही बात है


mariadb और अपडेट स्टेटमेंट "ERROR 1348 (HY000) का उपयोग करना: कॉलम 'Super_priv' अपडेट नहीं है '
c4f4t0r


-6

रूट उपयोगकर्ता के साथ लॉगिन करें और डेटाबेस का चयन करें और निम्नलिखित एसक्यूएल क्वेरी को चलाएं

SET @ @ global.sql_mode = 'NO_ENGINE_SUBSTITUTION'


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