2008-10-23 10 views
11

मैं एक MySQL क्वेरी के साथ काम कर रहा हूं जो एक आउटफाइल में लिखता है। मैं इस प्रश्न को हर दिन या दो बार चलाता हूं और इसलिए मैं सु या सूडो का सहारा लेने के बिना आउटफाइल को हटाने में सक्षम होना चाहता हूं। ऐसा करने का एकमात्र तरीका यह है कि ऐसा करने के बारे में सोचने के लिए mysql उपयोगकर्ता के अलावा किसी अन्य व्यक्ति के स्वामित्व के रूप में लिखा गया है। क्या यह संभव है?मैं एक अलग उपयोगकर्ता के रूप में MySQL लिखने के आउटफाइल कैसे कर सकता हूं?

संपादित करें: मैं आउटपुट को किसी फ़ाइल में रीडायरेक्ट नहीं कर रहा हूं, मैं फ़ाइल में आउटपुट करने के लिए एक चयन क्वेरी के इंंटो आउटफाइल भाग का उपयोग कर रहा हूं।

यदि यह मदद करता है:

 
mysql --version 
mysql Ver 14.12 Distrib 5.0.32, for pc-linux-gnu (x86_64) using readline 5.2 

उत्तर

10

आउटपुट फ़ाइल MySQL प्रक्रिया द्वारा बनाई गई है, न कि आपकी क्लाइंट प्रक्रिया द्वारा। इसलिए आउटपुट फ़ाइल को MySQL प्रक्रिया के यूआईडी और ग्रिड के स्वामित्व में होना चाहिए।

यदि आप किसी यूआईडी या ग्रिड के तहत किसी प्रक्रिया से इसे एक्सेस करते हैं, तो आप फ़ाइल तक पहुंचने के लिए सूडो होने से बच सकते हैं। दूसरे शब्दों में, यदि mysqld यूआईडी और ग्रिड "mysql"/"mysql" के स्वामित्व वाली फाइलें बनाता है, तो "mysql" समूह में अपना खाता जोड़ें। फिर आपको फ़ाइल तक पहुंचने में सक्षम होना चाहिए, बशर्ते फ़ाइल के अनुमति मोड में समूह पहुंच शामिल हो।

संपादित करें:

आप rwxrwxrwt की एक निर्देशिका अनुमति मोड के साथ/tmp में एक फ़ाइल को हटाने कर रहे हैं। चिपचिपा बिट ('टी') का अर्थ है कि आप केवल फाइलों को हटा सकते हैं यदि फ़ाइल के मालिक के रूप में आपकी यूआईडी फाइल के मालिक के समान ही है, फाइल या निर्देशिका पर अनुमतियों के बावजूद।

यदि आप अपनी आउटपुट फ़ाइल को दूसरी निर्देशिका में सहेजते हैं जिसमें चिपचिपा बिट सेट नहीं है, तो आप सामान्य रूप से फ़ाइल को हटाने में सक्षम होना चाहिए।

चिपचिपा (8) के लिए आदमी पृष्ठ से इस अंश पढ़ें:

चिपचिपा निर्देशिका

एक निर्देशिका जिसका `चिपचिपा सा 'सेट किया गया है, एक संलग्न-केवल निर्देशिका हो जाता है या, और अधिक सही, एक निर्देशिका जिसमें फाइलों को हटाना प्रतिबंधित है। चिपचिपा निर्देशिका में एक फ़ाइल को उपयोगकर्ता द्वारा हटाया जा सकता है या उसका नाम बदला जा सकता है यदि उपयोगकर्ता के पास निर्देशिका के लिए लिखने की अनुमति है और उपयोगकर्ता फ़ाइल का मालिक है, निर्देशिका का स्वामी है, या सुपर-उपयोगकर्ता है। यह सुविधा उपयोगी रूप से निर्देशिकाओं जैसे/tmp पर लागू होती है जो सार्वजनिक रूप से लिखने योग्य होनी चाहिए, लेकिन उपयोगकर्ताओं को मनमाने ढंग से एक दूसरे की फाइलों को हटाने या नाम बदलने का लाइसेंस अस्वीकार कर देना चाहिए।

+1

फ़ाइल पर स्वामित्व में है क्या कर सकते हैं SELECT INTO OUTFILE "mysql"/"mysql" और 666 संशोधित। मैंने जोड़ा है खुद को mysql समूह में संपादित करें और मैं अभी भी इसे हटा नहीं सकता हूं। –

+0

निर्देशिका में स्वामित्व और अनुमतियां क्या हैं जिसमें फ़ाइल मौजूद है? –

+0

मुझे लगता है * बिल क्या हो रहा है यह है कि आपको यूनिक्स में फ़ाइल को हटाने में सक्षम होने के लिए युक्त डीआईआर पर लिखने की अनुमति है (बी/सी यह डीआईआर लिस्टिंग अपडेट करता है)। तो "chgrp mysql" dir और "chmod ug + rwX" यह dir पर आपके mysql-group उपयोगकर्ता लिखने परमिट देने के लिए है। – joelhardi

1

आप किसी अन्य उपयोगकर्ता क्रॉन से क्वेरी चलाने है, तो यह है कि उपयोगकर्ता के रूप में फ़ाइल पैदा करेगा।

5

"चयन करें ... आउटपुट में" वाक्यविन्यास, नहीं।

आपको अन्य उपयोगकर्ता के रूप में क्वेरी (यानी क्लाइंट) चलाने की आवश्यकता है, और आउटपुट को रीडायरेक्ट करें। उदाहरण के लिए, निम्न आदेश को चलाने के लिए जब भी आप चाहते हैं कि आपके crontab संपादित:

mysql db_schema -e 'SELECT col,... FROM table' > /tmp/outfile.txt 

कि जो crontab आप के लिए आदेश जोड़ा है उपयोगकर्ता के रूप में /tmp/outfile.txt पैदा करेगा।

+0

ध्यान दें कि 'आउटफाइल' की तुलना में पाइपिंग अलग-अलग परिणाम देगा। उदाहरण के लिए पाइपिंग में पहली पंक्ति के रूप में कॉलम नाम शामिल हैं, \ N आदि के बजाय NULL (उबंटू में। विवरण अन्य ओएस में भिन्न हो सकता है) –

1

मैं सिर्फ

sudo gedit /etc/apparmor.d/usr.sbin.mysqld 

और

/var/www/codeigniter/assets/download/* w, 

और

sudo service mysql restart 

जोड़ते हैं और वह, यह मैं आसानी से किसी भी फ़ाइल नाम

संबंधित मुद्दे

 संबंधित मुद्दे