2011-05-22 4 views
54

कोई विचार है?MYSQL आउटफाइल "एक्सेस इनकार" में - लेकिन मेरे उपयोगकर्ता के पास "ऑल" पहुंच है .. और फ़ोल्डर CHMOD 777

SELECT * INTO OUTFILE '/home/myacnt/docs/mysqlCSVtest.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '*' 
LINES TERMINATED BY '\n' 
FROM tbl_property 
WHERE managerGroupID = {$managerGroupID} 

त्रुटि:

> grant all privileges 
    on YOUR_DATABASE.* 
    to 'asdfsdf'@'localhost' 
    identified by 'your_password'; 
> flush privileges; 

ऐसा लगता है कि आप डेटाबेस से कनेक्ट और आप कर रहे हैं फ़ोल्डर में लिखते नहीं समस्याएं आ रही हैं:

Access denied for user 'asdfsdf'@'localhost' (using password: YES) 
+1

"सभी प्राइवेट" में सभी विशेषाधिकार शामिल नहीं हैं। इस मामले के लिए प्रासंगिक, इसमें 'FILE' विशेषाधिकार शामिल नहीं है, जिसे 'आउटलेट में आउटलेट' विवरणों के लिए आवश्यक है।मुझे अंग्रेजी और MySQL के बीच इस विसंगति के साथ कई परेशानी हुई हैं: http://dba.stackexchange.com/a/96894/53784 – WAF

उत्तर

87

कोशिश इस एसक्यूएल कमांड को क्रियान्वित उल्लेख।

इसके अलावा, सुनिश्चित करें कि आपने पर FILE प्रदान किया है।

> GRANT FILE ON *.* TO 'asdfsdf'@'localhost'; 
+0

सब कुछ उसके साथ अच्छा दिखता है, यहां तक ​​कि सीपीएनल में भी सब कुछ चेक किया गया है – Shackrock

+1

@Shackrock: चेक आउट अद्यतन उत्तर सुनिश्चित करें कि आपने उपयोगकर्ता को 'FILE' दिया है। –

+37

यहां दो मुद्दे हैं। 1) अनुदान सभी अनुदान फ़ाइल नहीं करता है। 2) अनुदान फ़ाइल केवल \ *। \ * (यानी वैश्विक स्तर पर) के साथ काम करती है। दोनों MySQL में बग हैं। – fijiaaron

30

ईमानदारी से मैं अनुदान से निपटने के लिए परेशान नहीं किया था और इस विशेषाधिकार के बिना भी काम किया:

echo "select * from employee" | mysql --host=HOST --port=PORT --user=UserName --password=Password DATABASE.SCHEMA > output.txt 
+4

ऐसा इसलिए है क्योंकि आप केवल नियमित चयन कर रहे हैं, आउटपुट में कोई चयन नहीं (इस मामले में एक .csv फ़ाइल)। – aqn

+3

यह बड़ी तालिकाओं के लिए ऐसा करने का एक बुरा तरीका है क्योंकि क्लाइंट फ़ाइल से कुछ भी बाहर रखने से पहले संपूर्ण परिणाम सेट को बफर करता है। –

+3

FILE – jminkler

12

@fijaaron कहते हैं,

  1. GRANT ALL संकेत नहीं करता है GRANT FILE
  2. GRANT FILE केवल *.*
  3. के साथ काम करता है

तो

GRANT FILE ON *.* TO user; 
0

के बाद से CP/WHM PHPMyAdmin में रूट के रूप में उपयोगकर्ता विशेषाधिकार संशोधित करने की क्षमता छीन लिया है, तो आप करने के लिए कमांड लाइन का उपयोग करने की क्या ज़रूरत है:

mysql> GRANT FILE ON *.* TO 'user'@'localhost'; 

चरण 2 है उस उपयोगकर्ता को किसी विशिष्ट फ़ोल्डर में फ़ाइल को डंप करने की अनुमति देने के लिए। ऐसा करने के कई तरीके हैं, लेकिन मैं में एक फ़ोल्डर डाल समाप्त हो गया:

/home/user/tmp/db 

और

chown mysql:mysql /home/user/tmp/db 

mysql उपयोगकर्ता फ़ाइल लिखने की अनुमति देता है। जैसा कि पिछले पोस्टर्स ने कहा है, आप MySQL temp फ़ोल्डर का भी उपयोग कर सकते हैं, मुझे नहीं लगता कि यह वास्तव में मायने रखता है लेकिन आप निश्चित रूप से इसे 0777 अनुमति (विश्व-लिखने योग्य) बनाना नहीं चाहते हैं जब तक कि आप दुनिया को अपना डेटा नहीं देखना चाहते। यदि आप फ़ाइल को मौजूद करते हैं तो INTO OUTFILE काम नहीं करेगा, तो प्रक्रिया को कुल्ला दोहराना चाहते हैं तो एक संभावित समस्या है। यदि आपकी फाइलें किसी भिन्न उपयोगकर्ता के स्वामित्व में हैं तो बस unlink($file) पर काम नहीं करेगा। तुम मुझे पसंद कर रहे हैं (0777 के बारे में पागल) तो आप का उपयोग कर अपने लक्ष्य निर्देशिका सेट कर सकते हैं:

chmod($dir,0777) 

सिर्फ एसक्यूएल आदेश,

chmod($dir,0755) 

तुरंत बाद कर तो करने से पहले, करने के लिए unlink(file) द्वारा पीछा किया फ़ाइल हटाएं। यह सब आपके वेब उपयोगकर्ता के तहत चल रहा है और mysql उपयोगकर्ता को आमंत्रित करने की आवश्यकता नहीं है।

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