अनाम उपयोगकर्ता को mysql.user से नहीं छोड़ सकते


15

मैं अपने mysql.users डेटाबेस से अनाम उपयोगकर्ताओं को DROP करने का प्रयास कर रहा हूं। हालांकि, मुझे अजीब व्यवहार मिल रहा है। जब मैं कमांड दर्ज करता हूं:

DROP User ''@'WOPR';

मुझे एक सामान्य त्रुटि संदेश मिल रहा था। इसलिए, मैंने अपनी मशीन को रिबूट किया, और फिर से कोशिश की। इस बार मुझे प्रतिक्रिया मिली है

Query OK, 0 rows affected.

लेकिन जब मैंने अंदर डाला

SELECT User, Host, Password FROM mysql.user WHERE User='';

वापसी है:

+------+------+----------+
| User | Host | Password |
+------+------+----------+
|      | WOPR |          |
+------+------+----------+

(WOPR मेरा होस्टनाम है)

मैं कमांड चलाता हूं

DROP User ''@'WOPR';

और एक ही परिणाम प्राप्त करें।

मैं आर्क लिनक्स, कर्नेल संस्करण 2.6.33 पर MySQL 5.5 की एक ताजा स्थापना चला रहा हूं।

क्या किसी को पता है कि इस व्यवहार का क्या कारण हो सकता है?


कृपया इस प्रकृति के प्रश्नों को DBA StackExchange को भेजने के लिए शब्द प्राप्त करें !!!
रोलांडोमीक्यूडीबीए

जवाबों:


15
DELETE FROM mysql.user WHERE user='' AND host='WOPR';
FLUSH PRIVILEGES;

यह आपके लिए करना चाहिए।

कोशिश करो !!!

चेतावनी

MySQL के कुछ उपयोगकर्ता mysql.user में पूर्वस्थापित हैं। इसके अलावा, mysql.db दो उपयोगकर्ताओं के साथ आता है जिनके पास डेटाबेस का परीक्षण करने के लिए अनाम पहुंच और पूर्ण विशेषाधिकार हैं।

बस यह करो

SELECT * FROM mysql.db \G

और आप देखेंगे कि कोई भी जो परीक्षण या किसी भी डेटाबेस से जुड़ता है test_ से शुरू होता है, वह बहुत कुछ परीक्षण डेटाबेस में कर सकता है। यह बुरा है क्योंकि किसी भी परीक्षण डेटाबेस तक पूर्ण पहुंच वाला व्यक्ति मिनटों के मामले में डिस्क खा सकता है।

उदाहरण:

use test
CREATE TABLE junk (INT a) ENGINE=MyISAM;
INSERT INTO junk VALUES (1);

ठीक है, बड़ी बात है। यह 4 बाइट्स के साथ एक टेबल बनाता है।

अब इस SQL ​​स्टेटमेंट को 30 बार चलाने की कोशिश कर रहे हैं:

INSERT INTO junk SELECT * FROM junk;

हे 1,073,741,824 पंक्तियों (4GB + फ़ाइल) के साथ एक इंस्टेंट टेबल !!! एक परीक्षण डेटाबेस में पूर्ण अधिकार होने पर इमेजिंग जहां आप डिस्क पर इस तरह का कहर बरपा सकते हैं।

मेरी आपसे सलाह यह है कि परीक्षण उपयोगकर्ता की पहुँच को साफ़ करने के लिए इसे चलाएं:

DELETE FROM mysql.db WHERE db LIKE 'tes%' AND user='';
FLUSH PRIVILEGES;

आगे स्पष्टीकरण के लिए, मेरी पोस्ट देखें MySQL के : mysql.db में "परीक्षण" प्रविष्टियां क्यों हैं?

चियर्स !!!


हाय रोलैंडो, कि चाल किया, धन्यवाद! मैं वास्तव में अभी अपने परीक्षण डेटाबेस एक्सेस को ठीक कर रहा हूं।
SirTasty

क्या drop userअंतर्निहित mysql.userतालिका को सीधे संशोधित करने के बजाय सिंटैक्स का उपयोग करने का कोई तरीका नहीं है ?
पचेरियर

1
@ स्पेसियर कृपया मूल प्रश्न को देखें। वास्तविक समस्या यह है कि DROP USERजब उपयोगकर्ता फ़ील्ड रिक्त (खाली स्ट्रिंग) है तो सिंटैक्स काम नहीं करता है। आपको इसका उत्तर जिस तरह से निर्दिष्ट करना चाहिए, करना चाहिए।
RolandoMySQLDBA

@RolandoMySQLDBA, क्या mysql.userतालिका के साथ हैकिंग के अलावा अन्य समाधान हैं ?
पेसरियर

@ स्पेसर यदि आप मेरा अंतिम लिंक पढ़ते हैं, तो आप महसूस करेंगे कि MySQL (अब Oracle) दो पंक्तियों को सीधे mysql.dbइंस्टॉलेशन में रखता है जो अनाम उपयोगकर्ताओं को एक परीक्षण डेटाबेस तक पहुंचने की अनुमति देगा। दिलचस्प बात यह है कि मुझे बताया गया था कि Percona Server की स्थापना पूरी होने से पहले उन पंक्तियों को हटा देती है ( dba.stackexchange.com/questions/66584/… )। चूंकि आप MySQL का उपयोग कर रहे हैं, या तो mysql_secure_installation चलाएं या उन दो पंक्तियों को स्वयं हटा दें।
RolandoMySQLDBA
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.