2009-03-21 17 views
14

मैं निम्न क्वेरी का उपयोग कर, MySQL में एक SQL क्वेरी के उत्पादन पर कब्जा करने की कोशिश कर रहा हूँ एक पाठ फ़ाइल के लिए देता है।क्वेरी उत्पादन पहुँच से मना कर त्रुटि

select count(predicate),subject from TableA group by subject into outfile '~/XYZ/output.txt'; 

मुझे निम्न त्रुटि मिलती है।

त्रुटि 1045 (28000): पहुँच उपयोगकर्ता के लिए इनकार कर दिया 'उपयोगकर्ता नाम' @ '%' (पासवर्ड का उपयोग: हाँ)

किसी भी विचार है, जहाँ मैं गलत हो रहा हूँ? क्या यह कुछ अनुमति संबंधित मुद्दा है?

+0

आप वास्तव में क्या कर रहे हैं? क्या आप mysql क्लाइंट कंसोल में या सिस्टम टर्मिनल में कमांड टाइप कर रहे हैं? – Vasil

+0

प्रोग्रामिंग से संबंधित नहीं – cletus

+0

मैं MySQL कंसोल – Arnkrishn

उत्तर

30

outfile यह mysql में खुद अनुमति है।

यदि आपके पास यह सब शामिल है।

लेकिन अगर आपके पास एक सुरक्षित संग्रह है जैसे कि SELECT, INSERT, UPDATE, DELETE, DROP, CREATE, लेकिन आउटफाइल नहीं, "आउटफाइल में" क्वेरी में काम नहीं करेगा।

इस का कारण यह है कि, MySQL के भीतर से फ़ाइलों तक पहुँचने भी लिखने के प्रयोजनों के लिए, कुछ सुरक्षा जोखिम है, तो आप mysql से एक फ़ाइल का उपयोग करता है, तो आप किसी भी फाइल mysql उपयोगकर्ता की पहुंच है उपयोग कर सकते हैं क्योंकि, है जिससे उपयोगकर्ता- दरकिनार है आधारित फ़ाइल अनुमतियां।

इसके आस-पास पहुंचने के लिए, आप अपनी क्वेरी सीधे एसक्यूएल चलाने के लिए उपयोग किए जा रहे किसी भी खोल/भाषा के आउटपुट में चला सकते हैं।

यहाँ एक * nix उदाहरण

>$ echo "select count(predicate),subject from TableA group by subject" | mysql -u yourusername -p yourdatabasename > ~/XYZ/outputfile.txt 

है लेकिन "\" बिना एक पंक्ति में यह सब करना या लिंक ब्रेक से बचने के लिए "\" का उपयोग करें।

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

तो जानकारी प्राप्त करने के लिए mysql का उपयोग करें और फिर डेटा को अपने उपयोगकर्ता खोल से फ़ाइल में डंप करें और आप ठीक होंगे।

या खुद outfile mysql अनुमति, किसी भी तरह से प्राप्त करने के लिए एक रास्ता खोजने।

+0

के माध्यम से आदेश टाइप कर रहा हूं यह बहुत अच्छा है! बहुत बहुत धन्यवाद – ajay

4

यदि यह आपका सिस्टम है (आप व्यवस्थापक हैं), और आप जानते हैं कि इसे कैसे सुरक्षित किया जाए, तो इस तरह आप उन अनुमतियों को सक्षम करते हैं।

USE mysql; 
UPDATE user SET File_priv = 'Y' WHERE User = 'db_user'; 
FLUSH PRIVILEGES; 
संबंधित मुद्दे