2012-12-19 37 views
9

मैं एक क्रॉन नौकरी चला रहा हूं जो एक PHP स्क्रिप्ट के माध्यम से mysqldump निष्पादित करता है, डंप को RELOAD विशेषाधिकार की आवश्यकता होती है। MySQL व्यवस्थापक खाते का उपयोग करना सही नहीं लगता है, लेकिन न ही व्यवस्थापक विशेषाधिकारों के साथ उपयोगकर्ता बना रहा है।PHP क्रॉन नौकरी के दौरान mysqldump के लिए MySQL रीलोड विशेषाधिकार: MySQL व्यवस्थापक खाता का उपयोग करें या अद्वितीय उपयोगकर्ता बनाएं? सुरक्षा?

मेरी मुख्य चिंता सुरक्षा पहलू है, मैं कक्षा के संरक्षित सरणी "संपत्ति" में डीबी विशेषताओं (उपयोगकर्ता नाम, पासवर्ड, आदि) लोड कर रहा हूं।

मुझे आश्चर्य है कि कौन सा दृष्टिकोण अधिक समझ में आता है या यदि एक ही परिणाम प्राप्त करने का दूसरा तरीका है।


अवलोकन:
दीप सर्वर: CentOS 5.8, अपाचे 2.2.3, MySQL 5.0.95, पीएचपी 5.3.3

क्रॉन नौकरी रूपरेखा:

  1. कच्चे आँकड़े डंप वेबसाइट डीबी में दो इनो डीबी टेबल से डेटा, वे का विदेशी कुंजी संबंध है।
  2. तालिकाओं में आँकड़े db
  3. ऑटो incrementing प्राथमिक कुंजी है कि हस्तांतरित
  4. प्राथमिक कुंजी मूल्य का प्रयोग करें एक प्रश्न है कि वेबसाइट से नकल डेटा हटाता में था का अंतिम मान जाओ में डेटा लोड डाटाबेस
  5. प्रक्रिया आँकड़े DB में स्थानांतरित डेटा रिपोर्ट तालिकाओं को भरने के लिए db
  6. जब प्रोसेस पूर्ण हो, कच्चे आँकड़े आँकड़ों से डेटा को हटाने

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

क्रॉन नौकरी के दौरान उपयोग की जाने वाली सभी फाइलें DocumentRoot निर्देशिका के बाहर स्थित हैं।


वास्ते:

<?php 
$SQL1 = "--no-create-info --routines --triggers --master-data "; 
$SQL1 .= "--single-transaction --quick --add-locks --default-character-set=utf8 "; 
$SQL1 .= "--compress --tables stats_event stats_event_attributes"; 

$OUTPUT_FILENAME = "/var/stats/daily/daily-stats-18.tar.gz"; 

$cmd1 = "/usr/bin/mysqldump -u website_user -pXXXXXX website_db $SQL1 | gzip -9 > $OUTPUT_FILENAME"; 

exec($cmd1); 
?> 

त्रुटि संदेश:

mysqldump: Couldn't execute 'FLUSH TABLES': Access denied; you need the RELOAD privilege for this operation (1227) 


mysqldump पहला कदम में प्रदर्शन पुनः लोड विशेषाधिकार की आवश्यकता है, यहाँ आदेश है अगर मैं mysql व्यवस्थापक क्रेडेंशियल्स का उपयोग करता हूं तो ठीक काम करता है।

उत्तर

5

मुझे आश्चर्य है कि कौन सा दृष्टिकोण अधिक समझ में आता है या यदि एक ही परिणाम प्राप्त करने का दूसरा तरीका है।

निचली पंक्ति यह है कि आपको mysqldump कमांड चलाने के लिए कुछ विशेषाधिकार वाले उपयोगकर्ता की आवश्यकता है।हालांकि यह एक क्रॉन नौकरी के लिए एक नया उपयोगकर्ता सिर्फ बनाने के लिए मूर्खतापूर्ण प्रतीत हो सकता है, यह सबसे सरल और सरल दृष्टिकोण है जिसे आप कम से कम लॉल्स सुरक्षा की बाहरी उपस्थिति देते हैं।

यह देखते हुए कि यह एक स्टॉपगैप उपाय है जब तक आप प्रतिकृति और दौड़ नहीं ले सकते हैं, यहां कोई वास्तविक नुकसान नहीं हुआ है। प्रतिकृति द्वारा ऐसा करना पूरी तरह से जाने का तरीका है, और स्टॉपगैप उपाय सचेत लगता है।

इसके अलावा, जब प्रतिकृति प्राप्त करने का समय आता है, तो xtrabackup आपका मित्र है। इसमें स्नैपशॉट के साथ बाइनरी लॉग नामकरण और स्थिति जानकारी शामिल है, जो नए गुलामों को हवा सेट करने में सक्षम बनाता है।

+0

मैं प्रतिकृति के बारे में स्पष्ट नहीं था, यह वेबसाइट डेटाबेस के लिए है, हम बंद पहली आँकड़े स्थानांतरित करने के लिए, क्योंकि वे से सब कुछ किसी और संयुक्त और प्रसंस्करण कभी कभी बातें नीचे bogs अधिक स्थान ले चाहता था। आंकड़ों के डंप को बचाने के लिए सिर्फ रिपोर्ट का थोड़ा सा समय महत्वपूर्ण नहीं है। तो अस्थायी नहीं है। मान लीजिए कि मेरी चिंता किसी और चीज से अधिक सुरक्षा के बारे में है, मैं इस सवाल पर जोर दूंगा। विशेष रूप से सुरक्षा पर कोई विचार? – codewaggle

+0

मैं अंधेरे से यह मान रहा हूं कि यह संदर्भ से साझा होस्टिंग पर नहीं है। सुनिश्चित करें कि उपयोगकर्ता केवल वांछित होस्ट से कनेक्ट हो सकता है और एक सुरक्षित पासवर्ड चुन सकता है? यहां शायद कोई वास्तविक खतरा नहीं है। – Charles

+0

बस जो मैं सुनना चाहता था। हम सर्वर के मालिक हैं और मुझे लगता है कि उपयोगकर्ता को एक अलग सर्वर पर ले जाने के बारे में सोचकर, @localhost पर सेट करने के लिए लगाया गया है लेकिन स्थानीयहोस्ट अभी काम करेगा। – codewaggle

3

मैं बस उसी त्रुटि में भाग गया (शायद उसी साइट पर जिस पर आप काम कर रहे थे :)), यहां तक ​​कि MySQL रूट उपयोगकर्ता के रूप में चलते समय भी। मैं द्वारा --skip-add-locks निर्दिष्ट करने के लिए इसके आसपास पहुंचने में कामयाब रहा, उदा। इस काम किया:

/usr/bin/mysqldump -u USERNAME -pPW DATABASE_NAME --skip-lock-tables --single-transaction --flush-logs --hex-blob