रूट पासवर्ड की आवश्यकता के बिना MySQL गर्त कमांड लाइन से कनेक्ट करें


11

मैं कुछ कार्यों के लिए एक बैश स्क्रिप्ट का निर्माण कर रहा हूं। उन कार्यों में से एक एक ही bash स्क्रिप्ट के भीतर से एक MySQL DB बना है। अभी जो मैं कर रहा हूं वह दो संस्करण बना रहा है: एक स्टोर उपयोगकर्ता नाम के लिए और दूसरा स्टोर पासवर्ड के लिए। यह मेरी स्क्रिप्ट का प्रासंगिक हिस्सा है:

MYSQL_USER=root
MYSQL_PASS=mypass_goes_here

touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password="$MYSQL_PASS" < /tmp/script.sql
rm -rf /tmp/script.sql

लेकिन हमेशा यह कहते हुए एक त्रुटि मिलती है कि NO PASSWORD के साथ उपयोगकर्ता रूट के लिए पहुँच अस्वीकृत है, मैं क्या गलत कर रहा हूं? मुझे PostgreSQL के लिए ऐसा ही करने की आवश्यकता है।


कुछ डिबगिंग (क्या -: प्रयास करें echo "$MYSQL_PASS"इससे पहले कि आप के पास mysqlलाइन यह सही पासवर्ड है करता है।?
केएम।

क्या आप स्क्रिप्ट के बिना हमेशा की तरह लॉगिन कर सकते हैं?
ट्वीट करें

4
-ह गायब है। कमांड-लाइन पर पासवर्ड डालना भी एक अच्छा विचार नहीं है, क्योंकि वे सभी को कॉल करने के लिए दिखाई देंगे ps wwaux
नेल्स

जवाबों:


23

MySQL और PostgreSQL दोनों के लिए आप अपने उपयोगकर्ता और पासवर्ड को स्थानीय कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट कर सकते हैं। MySQL के लिए .my.cnf और PostgreSQL के लिए .pg ये फाइलें आपके होम डायरेक्टरी (यानी ~ / .my.cnf) में होनी चाहिए।

.my.cnf:

[mysql]
user=user
password=password

.pgpass:

host:port:database:user:password

आपके पास एक वाइल्डकार्ड प्रविष्टि हो सकती है, जो ******* के लिए किसी भी क्षेत्र को प्रतिस्थापित कर सकती है।

पुनश्च: कभी भी कम लाइन पर एक पहेली नहीं है! यह पूरी तरह से ps के साथ दिखाई दे सकता है यदि आपका सिस्टम अन्य उपयोगकर्ताओं से संबंधित प्रक्रियाओं को न दिखाने के लिए कॉन्फ़िगर नहीं किया गया है।

@thinice: यदि आप उन फ़ाइलों को वास्तव में सुरक्षित बनाना चाहते हैं जिन्हें आपको करना चाहिए:

umask 077
touch .my.new.config
umask 022 # or whatever was your default

इस तरह से फ़ाइल को शुरू से ही सुरक्षित अनुमतियों के साथ बनाया जाएगा और किसी भी ईवेस्ट्रॉपर को आपके पासवर्ड को ले जाने का मौका नहीं मिलेगा।

PostgreSQL वैसे भी 0600 से अधिक की अनुमतियों वाली फ़ाइल का उपयोग करने से इंकार कर देगा।


1
Mysql mysql क्लाइंट के लिए आप एक विशिष्ट कॉन्फ़िगरेशन फ़ाइल के साथ इंगित कर सकते हैं --defaults-extra-file=filename। यदि आप इसे कहीं गैर-मानक स्थान पर रखना चाहते हैं, या केवल एक अस्थायी फ़ाइल बनाना चाहते हैं, तो यह उपयोगी हो सकता है। संदेह है कि उनका PostgreSQL के साथ एक समान विकल्प है, लेकिन मैं इससे परिचित नहीं हूं।
20

1
और खुश 0600
गिलमोर

@kworr मैं कोशिश करूंगा कि मेरा क्षेत्र बदल जाए, लेकिन MySQL ने इस पैरामीटर को /etc/my.cnf पर बदलना शुरू नहीं किया है :( कारण पता नहीं था। मैं बाद में फिर से कोशिश
करूंगा

यह /etc/my.cnf नहीं है। अद्यतन उत्तर।
कवर्चर

@kworr मैं आपके समाधान की कोशिश करता हूं, लेकिन काम नहीं करता है। DB रिक्त द्वारा बनाया गया है और phpMyAdmin या किसी अन्य GUI उपकरण में प्रकट नहीं होता है। मैं डेटा निर्देशिका /etc/my.cnf में डेटादिर = / डेटा / var / lib / mysql पर सेट करता हूं और 0755 पर / डेटा / var / lib / mysql पर अनुमतियाँ सेट करता हूं और mysql, mysql के लिए भी स्वामी, डेटाबेस खाली क्यों है ? समस्या कहाँ हे?
ReynierPM

2
MYSQL_USER="root"
MYSQL_PASSWORD="PASSWORD"
DBNAME="DB_NAME"

mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "CREATE DATABASE $DBNAME;" 2> /tmp/error1

STATUS=$? 
if [ $STATUS -eq 0 ];
then 
    echo -e "Database '$DBNAME' is created"
elif (grep -i "^ERROR 1007" /tmp/error1 > /dev/null);
then
    echo -e "Database '$DBNAME' already exists"
else
    echo -e "Failed to create database '$DBNAME'"
fi

rm -r /tmp/error1 

यह चाल धन्यवाद होगा


2
mysql_config_editor set --login-path=storedPasswordKey --host=localhost --user=root --password

मैं एक सुरक्षित पासवर्ड के साथ कमांड लाइन कैसे निष्पादित करूं? विन्यास संपादक का उपयोग करें !!!

Mysql 5.6.6 के रूप में आप एक कॉन्फिगर फाइल में पासवर्ड स्टोर कर सकते हैं और फिर इस तरह से क्ली कमांड को निष्पादित कर सकते हैं ...।

mysql --login-path=storedPasswordKey ....

-लॉगिन-पाथ वैरिएबल को बदलता है ... होस्ट, उपयोगकर्ता और पासवर्ड। बहुत बढ़िया!



1
साझा करने के लिए धन्यवाद! इस दृष्टिकोण से सिर्फ एक गेटा है। पैरामीटर --login-path को कॉल का पहला पैरामीटर होना चाहिए या फिर आपको "अज्ञात चर 'लॉगिन-पथ = स्थानीय' संदेश प्राप्त होने वाला है।
एंड्रे अगस्टो

1
MYSQL_USER="root"
MYSQL_PASS="mypass_goes_here"

touch /tmp/$PROY.sql && echo "CREATE DATABASE $DB_NAME;" > /tmp/script.sql
mysql --user=$MYSQL_USER --password=$MYSQL_PASS < /tmp/script.sql
rm -rf /tmp/script.sql

सुनिश्चित करें कि आप अपना पास कैसे लिखते हैं और यह नहीं बचता है

- अतिरिक्त-अतिरिक्त-फ़ाइल = एक अच्छी बात है (tm) (c)


1

पासवर्ड के आसपास उद्धरण न रखें क्योंकि यदि आप उद्धरण करते हैं तो पासवर्ड का हिस्सा माना जाता है।


1

StackOverflow पर समान प्रश्न मौजूद है।

वहां से मेरे उत्तर को संक्षेप में प्रस्तुत करना ।

आप कर सकते हैं export MYSQL_PWD=yourverysecretpassword

कॉन्फ़िगरेशन फ़ाइल का उपयोग करने पर इस विधि का उल्टा यह है कि आपको अपनी स्क्रिप्ट के साथ तालमेल रखने के लिए अलग कॉन्फ़िगरेशन फ़ाइल की आवश्यकता नहीं है। आपके पास केवल स्क्रिप्ट को बनाए रखने के लिए है।

इस पद्धति का कोई नकारात्मक पहलू नहीं है

सिस्टम पर अन्य उपयोगकर्ताओं के लिए पासवर्ड दिखाई नहीं देता है (यह दिखाई देगा यदि यह कमांड लाइन पर है)। पर्यावरण चर केवल mysql कमांड और रूट को चलाने वाले उपयोगकर्ता को दिखाई देते हैं।

पासवर्ड उन लोगों को भी दिखाई देगा जो स्वयं स्क्रिप्ट पढ़ सकते हैं, इसलिए सुनिश्चित करें कि स्क्रिप्ट स्वयं सुरक्षित है। यह किसी भी तरह से कॉन्फ़िगरेशन फ़ाइल की सुरक्षा से अलग नहीं है। यदि आप स्क्रिप्ट को सार्वजनिक रूप से पठनीय ( export MYSQL_PWD=$(cat /root/mysql_password)उदाहरण के लिए) चाहते हैं, तब भी आप किसी भिन्न फ़ाइल से पासवर्ड का स्रोत बना सकते हैं । एक कॉन्फ़िगरेशन फ़ाइल बनाने की तुलना में एक चर निर्यात करना अभी भी आसान है।

उदाहरण के लिए,

$ export MYSQL_PWD=xoF3mafn5Batxasdfuo
$ mysqldump -u root mysql | head
-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.