गैर-प्रतिकृति को रोकें MySQL दास को लिखता है?


13

हमारे पास प्रदर्शन के लिए कुछ MySQL डेटाबेस सर्वर पंक्ति-आधारित प्रतिकृति के साथ सेट अप हैं। सॉफ्टवेयर मास्टर को लिखता है, और मास्टर या दास दोनों में से पढ़ता है। सब कुछ काम कर रहा है, सबसे अधिक भाग के लिए।

यह मेरी समझ है कि MySQL गुलाम को लिखने की अनुमति देगा, हालांकि यह जानता है कि यह एक MySQL दास है। आदर्श रूप से, मैं इसे बंद करना पसंद करूंगा, इसलिए यहां तक ​​कि अगर कोई कुछ बुरा कोड लिखता है जो रीड-कनेक्शन प्राप्त करता है और एक करता है UPDATE, तो यह दास पर डेटा डालने के बजाय एक त्रुटि फेंक देगा।

क्या MySQL में ऐसा करने का कोई तरीका है? जाहिर है कि हम अपने सॉफ़्टवेयर से इसे असंभव बनाना चाहेंगे, लेकिन हमारे सर्वर पर फ़ायरवॉल की तरह, मैं यथासंभव रक्षात्मक रहना चाहूंगा।

धन्यवाद!

जवाबों:


13

My.cnf में read-onlyविकल्प को सक्षम करें । यह --read-onlymysqld के साथ कमांड लाइन पर एक ध्वज के रूप में भी निर्दिष्ट किया जा सकता है ।


5
ध्यान दें कि यह सुपरयूज़र (यानी: MySQL में रूट उपयोगकर्ता) के लिए काम नहीं करेगा क्योंकि यह केवल पढ़ने के लिए नहीं है।
vmfarms

5

सेटिंग के विकल्प के रूप में read_only=1(उदाहरण के लिए जब दास उदाहरण पर अन्य स्क्रेपड / रिपोर्टिंग / विकास डेटाबेस हैं), तो मैं कभी-कभी सभी उपयोगकर्ताओं से डीबीई के अलावा सभी विशेषाधिकार छीनता हूं जिन्हें मैं दोहरा रहा हूं।

यही है, मैं मास्टर पर GRANT कमांड चलाने के बाद , मैं दास पर REVOKE कमांड चलाता हूं ।


2

MySQL 5.7.8 के रूप में , अब एक super_read_onlyविकल्प है, जो यहां तक ​​कि SUPER उपयोगकर्ताओं को क्लाइंट अपडेट करने से रोकता है। यह प्रतिकृति प्रक्रिया को बाधित नहीं करता है। अन्य सेटिंग के साथ, इसे सेट किया जा सकता है:

  • कमांड लाइन प्रारूप में ( --super_read_only=ON),
  • my.cnf ( super_read_only=1), या में एक चर के रूप में
  • क्लाइंट प्रॉम्प्ट ( SET GLOBAL super_read_only = 1;) से।

ध्यान दें कि:

  • सक्षम super_read_onlyरूप से सक्षम बनाता हैread_only
  • अव्यवस्थित read_onlyरूप से अक्षम करनाsuper_read_only

कुछ चेतावनी:

  • न तो read_onlyहै और न ही super_read_onlyअस्थायी तालिकाओं पर कार्रवाई नहीं कर पाएगा।
  • वे ANALYZE TABLE और OPTIMIZE TABLE जैसे मेटाडेटा ऑपरेशन को नहीं रोकेंगे।
  • सक्षम के साथ कुछ प्रश्नों के लिए कीड़े बताए गए हैं super_read_only

संदर्भ: https://www.percona.com/blog/2016/09/27/use-the-super_read_only-system-var/


1

जैसा कि पहली पोस्ट कुछ हद तक बताती है, आप इसे अनुमतियों के साथ करते हैं। एफडीआई के रूप में सुपर-यूजर्स के लिए रीड-ओनली ऑप्शन काम नहीं करता है और यह वास्तव में किसी गुलाम के लिए काम करने योग्य समाधान नहीं है, जहां आप लिखना रोकना चाहते हैं। आपको उपयोगकर्ता / डेटाबेस / तालिका अनुमतियों के साथ लिखने को रोकने की आवश्यकता है। एक के लिए, प्रतिकृति उपयोगकर्ता को अभी भी मास्टर के साथ सिंक में रखने के लिए दास को लिखने में सक्षम होना चाहिए। लिखने को नियंत्रित करने के लिए बेहतर तरीका है कि आपको उन विकल्पों को निरस्त करने की आवश्यकता है जो उपयोगकर्ता को प्रश्न में लिखने (यानी- आवेषण, निर्माण, आदि) की अनुमति देते हैं जो केवल दास पर पढ़े जाने चाहिए।


0

केवल गुलाम पर उपयोगकर्ताओं को प्रतिकृति से संबंधित अधिकार देते हैं। आपके पास अभी भी रूट उपयोगकर्ता अधिकारों का मुद्दा है, लेकिन आप DB सर्वर तक रिमोट रूट एक्सेस को हटा सकते हैं।

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