"सार उपयोग" को हटा नहीं सकते


15

मैं कुछ सामान का परीक्षण कर रहा था, और एक जोड़ा:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password';

तो अब जब मैं करता हूँ

show grants for cptnotsoawesome@localhost;

मैं देख सकता हूँ कि उनमें से एक है:

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

अब मैं इसे हटा देना चाहता हूं क्योंकि मुझे लगता है कि यह एक सुरक्षा खतरा है, इसलिए मैं यह करता हूं:

REVOKE USAGE ON *.* FROM 'cptnotsoawesome'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

लेकिन फिर भी यह दर्शाता है कि अनुदान सूची में USAGE अनुदान है।

Grants for cptnotsoawesome@localhost
----------------------------------
GRANT USAGE ON *.* TO 'cptnotsoawesome'@'localhost' IDENTIFIED BY PASSWORD 'somePEW-PEWstring' 

कोई विचार क्यों? मैं क्या गलत कर रहा हूं?

जवाबों:


20

हुड के तहत, जब आप किसी उपयोगकर्ता को केवल USAGE के साथ देखते हैं, तो वह उपयोगकर्ता mysql.user तालिका में लिखा जाता है जिसमें सभी वैश्विक विशेषाधिकार बंद हैं।

आपने मूल रूप से कहा था कि उपयोगकर्ता के पास यह है:

grant usage on statistics.* to cptnotsoawesome@localhost identified by 'password'; 

आपको mysql.userMD5 पासवर्ड और सभी ग्लोबल्स प्राइवेट के साथ एक पंक्ति देखनी चाहिए N। आपको mysql.db में एक पंक्ति भी देखनी चाहिए

  • उपयोगकर्ता = 'cptnotsoawesome'
  • मेजबान = 'स्थानीय होस्ट'
  • db = 'आँकड़े'
  • सभी DB स्तर निजी 'Y' के लिए सेट

आपको उन्हें इस क्वेरी के साथ देखने में सक्षम होना चाहिए

SELECT * FROM mysql.db
WHERE user='cptnotsoawesome'
AND host='localhost'
AND db='statistics'\G

जब आप REVOKE कमांड चलाते हैं, तो आप बस से पंक्ति हटाते हैं mysql.db। यह पंक्ति को स्पर्श नहीं करता था mysql.user। इस प्रकार, आप अभी भी mysql में प्रवेश कर सकते हैं और केवल चलाने के लिए निजी हैं

SHOW GLOBAL VARIABLES;
SHOW GLOBAL STATUS;

यदि एक परीक्षण डेटाबेस कहा जाता है testया एक डेटाबेस जिसका पहले 5 अक्षर हैं test_, (इसका उपयोग करने के लिए देखें SELECT * FROM mysql.db WHERE db LIKE 'test%';) तो केवल उपयोग करने वाले उपयोगकर्ता के पास परीक्षण डेटाबेस के लिए पूर्ण अधिकार हो सकते हैं। मैंने इसके बारे में ServerFault Sep 2011 में लिखा था

यदि आप mysql.user से पंक्ति निकालना चाहते हैं तो आप चला सकते हैं

DROP USER cptnotsoawesome@localhost;

या

DELETE FROM mysql.user WHERE
WHERE user='cptnotsoawesome'
AND host='localhost';
FLUSH PRIVILEGES;

9

उपयोग का अर्थ है कि उपयोगकर्ता के पास कोई विशेषाधिकार नहीं है।

You have to use 'DROP USER'. 

drop user cptnotsoawesome@localhost;

आप उपयोगकर्ता को छोड़ने के बिना, वास्तव में USAGE को रद्द नहीं कर सकते ।USAGE एक वैश्विक स्तर का विशेषाधिकार है।

इस लिंक पर एक नज़र है ।


मैं इसे करूंगा, अगर वह डेटाबेस में कुछ भी गलत कर रहा था, जैसे कि यह सुरक्षा का खतरा है या ऐसा कुछ, अन्यथा - मैं इसे छोड़ सकता
हूं

2

कृपया इस प्रश्न को देखें: -

/programming/2126225/why-is-a-grant-usage-created-the-first-time-i-grant-a-user-privileges

मूल रूप से USAGE विशेषाधिकार एक सिस्टम स्तर विशेषाधिकार की तरह काम करता है जिसे आप हटा नहीं सकते। यह MySQL द्वारा आंतरिक रूप से उपयोग किया जाता है ताकि आप विशेषाधिकार प्रणाली में हेरफेर कर सकें।


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