Mysql कमांड लाइन में पासवर्ड कैसे पास करें


20

मेरे पास एक फ़ाइल पर MySQL पासवर्ड सहेजा गया है foo.php, उदाहरण के लिए P455w0rd, जब मैं इसका उपयोग करने की कोशिश करता हूं:

$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)

$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)

दोनों विकल्प अभी भी पासवर्ड के लिए पूछते हैं, पासवर्ड भेजने का सही तरीका क्या है stdin?


3
-pआपके और आपके पासवर्ड के बीच कोई रिक्त स्थान नहीं होना चाहिए ।
फ्रात कृष्ण

mysql स्टड से पासवर्ड नहीं पढ़ता है, मैं यह नहीं समझ पा रहा था कि वह इसे क्या पढ़ता है।
ओमन

उचित उत्तर को आपके पासवर्ड को कमांड लाइन पर नहीं रखा/proc जाता है, जहां तक ​​पहुंच वाले कोई भी व्यक्ति प्रोग्राम को चलाने के लिए तुच्छ रूप से पढ़ सकता है । यही कारण है कि एक ~/.my.cnfके लिए है, ठीक से 0600 करने के लिए
chmod'ed

जवाबों:


25

आपको बहुत सावधान रहना होगा कि आप पासवर्ड को कमांड लाइन में कैसे पास करते हैं, यदि आप सावधान नहीं हैं, तो आप इसे टूल जैसे उपकरणों का उपयोग करके सूँघने के लिए खुला छोड़ देंगे ps


ऐसा करने का सबसे सुरक्षित तरीका एक नई कॉन्फ़िगरेशन फ़ाइल बनाना और इसे या mysqlतो कमांड लाइन विकल्प का उपयोग करना होगा।--defaults-file=--defaults-extra-file=

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

आपकी अतिरिक्त कॉन्फ़िगरेशन फ़ाइल में कुछ समान होना चाहिए:

[client]
user=foo
password=P@55w0rd

सुनिश्चित करें कि आप इस फ़ाइल को सुरक्षित करते हैं।

फिर भागो:

mysql --defaults-extra-file=<path to the new config file> [all my other options]

2
MySQL ध्वज argvको दिए गए मापदंडों को अधिलेखित करने के लिए इसे संशोधित करेगा -p। : कम से कम है कि यहाँ क्या निष्कर्ष निकाला गया है, एक साथ अन्य प्रासंगिक जानकारी के साथ unix.stackexchange.com/questions/78757/...
Kusalananda

यह सबसे अच्छा समाधान है, क्योंकि यह सुरक्षा का एक उपाय प्रदान करता है। आपको go-rwx को चोदने की आवश्यकता है, और सुनिश्चित करें कि यह तर्क अन्य सभी तर्कों को आगे बढ़ाता है।
ChuckCottrill

1
@ कुसलानंद, हाँ, लेकिन unix.stackexchange.com/q/385339/135943 पर टिप्पणी के अनुसार , इसका मतलब यह नहीं है कि यह सुरक्षित है!
वाइल्डकार्ड

हो सकता है --login-pathकि अब यह समर्थित होने के बारे में एक नोट जोड़ने लायक हो । यह इससे बहुत बेहतर नहीं है, लेकिन यह थोड़ा कम सादा पाठ है (भले ही सामग्री को सांद्रता में परिवर्तित करने की बाधा कम हो)।
जेफ्री विस्मैन

6
वातावरण में MYSQL_PWD सेट करें ( export MYSQL_PWD=muhpassword) और बिना अपनी कमांड निष्पादित करें -pMySQL कार्यक्रम पर्यावरण चर देखें । मैनुअल की सख्त चेतावनी के बावजूद , यह सुरक्षित है । जब तक आप बाद में उसी शेल में अजीब वेयरज़ शुरू नहीं करते हैं। तो हम चलाते हैं:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
डेविड टोनहोफर

12

mysqlग्राहक उपयोगिता किसी के साथ कमांड लाइन पर एक पासवर्ड ले जा सकते हैं-p या --password=विकल्प।

यदि आप उपयोग करते हैं -p, तो विकल्प पत्र के बाद कोई रिक्त स्थान नहीं होना चाहिए:

$ mysql -pmypassword

मैं स्क्रिप्ट में लंबे विकल्प पसंद करता हूं क्योंकि वे स्व-दस्तावेज हैं:

mysql --password=mypassword --user=me --host=etc

3
यह असुरक्षित है क्योंकि कोई भी उपयोगकर्ता पासवर्ड देख सकता है - या तो सीधे /proc/$pid/cmdlineया psकमांड के माध्यम से । यह सच है कि स्टार्टअप के दौरान mysql argv में पासवर्ड को ओवरराइट कर देता है, लेकिन हमेशा एक समय विंडो होती है जहां कोई अन्य उपयोगकर्ता पासवर्ड का निरीक्षण कर सकता है। इसके अलावा, कुछ प्रणालियों पर argv ओवर राइटिंग काम नहीं कर सकती है।
मैक्सशेल्पीजिग

3

यदि आप mysqlपासवर्ड से शुरुआत करना चाहते हैं, बशर्ते आपको पहले एक चर में पासवर्ड लाना है:

MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`

तो आप के mysqlसाथ अपनी कमांड शुरू कर सकते हैं :

mysql -U root -p ${MYSQLPASS} mydb -h friendserver

1
इससे आपकी पासवर्ड सुरक्षा भी ख़तरे में पड़ जाती है । ध्यान दें कि MYSQL_PWDपर्यावरण चर है जिसे mysqlयदि आप निर्दिष्ट नहीं करते हैं तो पढ़ा जाता है -p। और लिनक्स के तहत यह एक सुरक्षित तरीका है क्योंकि उपयोगकर्ता का वातावरण अन्य अप्रभावित उपयोगकर्ताओं द्वारा नहीं पढ़ा जा सकता है - तर्क वेक्टर के विपरीत।
मैक्सशेल्पीजिग
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.