क्या यह MySQL विशेषाधिकार का एक सामान्य सेट है?


9

एक स्थानीय परीक्षण वैंप सेटअप पर phpmyadmin का उपयोग करना, और साथ ही शीर्षक शीर्षक बहुत सुंदर है, वहाँ 3 उपयोगकर्ता उपयोगकर्ता के रूप में चिह्नित हैं = कोई भी, पासवर्ड = NO, जैसे:

USER | HOST    | Password | Global Priv | Grant
-----+---------+----------+-------------+------
Any  | %       | No       | USAGE       | No
Any  | Local   | No       | USAGE       | No
Any  | Domain  | No       | USAGE       | No
-----+---------+----------+-------------+------

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


यह वास्तव में एक बहुत अच्छा सवाल है क्योंकि mysql डिफ़ॉल्ट अनुमतियों के साथ आता है जो प्रकाशित नहीं होते हैं। +1 !!!
रोलैंडमाइसीडीडीबीए

जवाबों:


6

वास्तव में, वे तीन उपयोगकर्ता खाते वास्तव में काफी खतरनाक हैं। वे डेटाबेस का परीक्षण करने के लिए एक बहुत बड़ा खतरा पैदा करते हैं।

दुर्भाग्य से, mysql डेटाबेस का परीक्षण करने के लिए पूर्ण पहुँच के साथ आता है। आप उन्हें कैसे पा सकते हैं?

यह क्वेरी चलाएँ:

 SELECT user,host,db from mysql.db;

Mysql की स्थापना होने पर, आपको दो पंक्तियाँ दिखाई देंगी जो किसी भी डेटाबेस को 'परीक्षण' नाम से पूर्ण अभिगम देती हैं या जिनके पहले 5 अक्षर 'test_' हैं।

यह समस्या क्यों है ???

इस आदेश को चलाने का प्रयास करें:

$ mysql -u'' -Dtest

आपने परीक्षण डेटाबेस को बिना पासवर्ड के जोड़ा होगा।

अब, एक तालिका बनाएं और इसे एक पंक्ति के साथ लोड करें:

CREATE TABLE mytable (a int);
INSERT INTO mytable VALUES (1);

ठीक है, बड़ी बात है। क्या आप इस तालिका को 30 बार आकार में दोहरा सकते हैं ???

INSERT INTO mytable SELECT * FROM mytable;
INSERT INTO mytable SELECT * FROM mytable;
... (30 times)
INSERT INTO mytable SELECT * FROM mytable;

आपको क्या मिलेगा ?? 1,073,741,824 पंक्तियों वाली एक तालिका। आसानी से, 4 जीबी +।

किसी भी आकार की कोई भी तालिका बनाने की कल्पना करें। कैसे परीक्षण डेटाबेस में तालिकाओं का एक गुच्छा बनाने के बारे में और स्वतंत्र रूप से उन तक पहुँचने के लिए?

इन परिस्थितियों में आप जो सबसे अच्छी चीज कर सकते हैं, वह है इस क्वेरी को चलाना:

DELETE FROM mysql.db;

और mysql को पुनरारंभ करें। फिर, उन तीन खातों को ठीक से निष्क्रिय किया जाएगा।

कोशिश करो !!!

UPDATE 2011-09-12 10:00 EDT

यह हटाएं:

DELETE FROM mysql.db;
FLUSH PRIVILEGES;

एक प्रारंभिक स्थापना के लिए आपको बस यही चाहिए। हालाँकि, यदि आपके पास पहले से ही उपयोगकर्ता हैं, तो आप इसके बजाय इसे चला सकते हैं:

DELETE FROM mysql.db WHERE db IN ('test','test_%');
FLUSH PRIVILEGES;

यह विशिष्ट दो DB अनुमतियों को हटा देगा।

जैसा कि मैंने अपने उत्तर में उल्लेख किया है, तीन अनुमतियाँ परीक्षण डेटाबेस के लिए बहुत खतरनाक हैं। इस DELETE को चलाने से डेटाबेस का परीक्षण करने का पूर्ण अधिकार रखने के लिए उन खातों को निष्प्रभावी कर दिया जाएगा।


स्पष्टीकरण के लिए धन्यवाद, लेकिन क्या आप उन 3 उपयोगकर्ताओं में से कुछ भी हटा देंगे? मैं
क्रिस

@ क्रिस - मैंने आपकी टिप्पणी को संबोधित करने के लिए 3 घंटे पहले अपना उत्तर अपडेट किया।
रोलैंडम्यूसीडीडीबीए

-1

इन बेनामी खातों को रखने का खतरा पहले से ही बहुत अच्छी तरह से समझाया गया है।

मैनुअल " आरंभिक MySQL खातों को सुरक्षित करने" के लिए उठाए जाने वाले चरणों की एक व्यापक जांच सूची प्रदान करता है ।

विशेष रूप से, "असाइनमेंट बेनामी खाता पासवर्ड" अनुभाग इन खातों को हटाने की सलाह देता है।

इसके अलावा, "सुरक्षित परीक्षण डेटाबेस" अध्याय सलाह देता है:

डिफ़ॉल्ट रूप से, mysql.dbतालिका में पंक्तियाँ होती हैं जो किसी भी उपयोगकर्ता द्वारा testडेटाबेस और अन्य डेटाबेस तक पहुंचने वाले नामों के साथ पहुंच की अनुमति देती हैं test_। (...) इसका अर्थ है कि ऐसे डेटाबेस का उपयोग उन खातों द्वारा भी किया जा सकता है, जिनके पास कोई विशेषाधिकार नहीं है। यदि आप किसी डेटाबेस को परीक्षण करने के लिए उपयोगकर्ता की पहुंच को हटाना चाहते हैं, तो निम्नानुसार करें:

mysql> DELETE FROM mysql.db WHERE Db LIKE 'test%';
mysql> FLUSH PRIVILEGES;

(...) पूर्ववर्ती परिवर्तन के साथ, केवल वे उपयोगकर्ता जिनके पास वैश्विक डेटाबेस विशेषाधिकार या विशेषाधिकार हैं जो परीक्षण डेटाबेस के लिए स्पष्ट रूप से दिए गए हैं वे इसका उपयोग कर सकते हैं।

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

WAMP जैसे तीसरे पक्ष के इंस्टॉलर के साथ देखभाल की जानी चाहिए। आधिकारिक MySQL मैनुअल में इंगित डिफ़ॉल्ट अनुमतियाँ हमेशा इन रिवाजों पर लागू नहीं हो सकती हैं (जैसा कि "मैनुअल के दायरे के बाहर) इंस्टॉलेशन। बेशक, एक उत्पादन सर्वर के लिए, WAMP इंस्टॉलेशन और पसंद को हर कीमत पर टाला जाना चाहिए। ।


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