রুট পাসওয়ার্ড ছাড়াই মাইএসকিউএল ট্রট কমান্ড লাইনে সংযুক্ত করুন


11

আমি কিছু কাজের জন্য বাশ স্ক্রিপ্ট তৈরি করছি। সেই কাজগুলির মধ্যে একটি হ'ল একই বাশ স্ক্রিপ্টের মধ্যে থেকে একটি মাইএসকিউএল ডিবি তৈরি করা। আমি এখনই যা করছি তা দুটি ভার তৈরি করছে: একটি স্টোর ব্যবহারকারীর নামের জন্য এবং অন্যটি স্টোরের পাসওয়ার্ডের জন্য। এটি আমার স্ক্রিপ্টের প্রাসঙ্গিক অংশ:

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

তবে সর্বদা কোনও পাসওয়ার্ডের সাথে ব্যবহারকারীর রুটের অ্যাক্সেস অস্বীকার করে বলে ত্রুটি পান, আমি কী ভুল করছি? PostgreSQL এর জন্য আমারও এটি করা দরকার do


কিছু ডিবাগিং করুন (-: লাইনে echo "$MYSQL_PASS"পাস করার আগে চেষ্টা করুন it mysqlএটির সঠিক পাসওয়ার্ড আছে?
কেএম।

আপনি কি স্ক্রিপ্ট ছাড়া যথারীতি লগইন করতে পারেন?
কিউয়েট

4
- সে নিখোঁজ রয়েছে। কমান্ড-লাইনে পাসওয়ার্ড স্থাপন করাও ভাল ধারণা নয়, যেহেতু তারা কল করার প্রত্যেকে দৃশ্যমান হবে ps wwaux
নীল

উত্তর:


23

মাইএসকিউএল এবং পোস্টগ্রিএসকিউএল উভয়ের জন্যই আপনি স্থানীয় কনফিগার ফাইলে আপনার ব্যবহারকারী এবং পাসওয়ার্ড নির্দিষ্ট করতে পারেন। MySQL এর জন্য .my.cnf এবং PostgreSQL এর জন্য .pgpass। এই ফাইলগুলি আপনার হোম ডিরেক্টরিতে থাকা উচিত (যেমন ~ / .my.cnf)।

.my.cnf:

[mysql]
user=user
password=password

.pgpass:

host:port:database:user:password

আপনার এখানে ওয়াইল্ডকার্ড প্রবেশ থাকতে পারে, ******* এর জন্য যে কোনও ক্ষেত্র প্রতিস্থাপন করতে হবে।

PS: একাউন্ট লাইনে কোনও পাসওয়ার্ড নির্দিষ্ট করবেন না! আপনার সিস্টেমটি অন্য ব্যবহারকারীর অন্তর্ভুক্ত প্রসেসগুলি না দেখানোর জন্য কনফিগার করা না থাকলে এটি পিএসের সাথে পুরোপুরি দৃশ্যমান হতে পারে ।

@ থিনিস: আপনি যদি এই ফাইলগুলি সত্যই সুরক্ষিত করতে চান তবে আপনার যা করা উচিত:

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

এইভাবে ফাইলটি শুরু থেকেই সুরক্ষিত অনুমতি নিয়ে তৈরি করা হবে এবং কোনও পাসওয়ার্ডের মাধ্যমে আপনার পাসওয়ার্ড ফাঁস করার সুযোগ থাকবে না।

পোস্টগ্রিএসকিউএল যাইহোক 0600 এর বেশি অনুমতি নিয়ে ফাইলটি ব্যবহার করতে অস্বীকার করবে।


1
মাইএসকিএল-এর জন্য মাইএসকিএল ক্লায়েন্ট আপনি নির্দিষ্ট কনফিগারেশন ফাইলের সাথে নির্দেশ করতে পারেন --defaults-extra-file=filename। আপনি যদি এটি কোনও জায়গায় মানহীন রাখতে চান বা কেবল একটি অস্থায়ী ফাইল তৈরি করতে চান তবে এটি কার্যকর হতে পারে। সন্দেহ হয় পোস্টগার্রেএসকিউএল-এ তাদের অনুরূপ বিকল্প, তবে আমি এর সাথে পরিচিত নই।
জোড়দাছে

1
এবং খুশির 0600
গিলমোর

@ কেওয়ার আমি চেষ্টা করছি কিন্তু আমার মাইএসকিউএল /etc/my.cnf এ প্যারামিটারগুলি পরিবর্তন করা শুরু করে না :( কারণটি জানতে পারেনি later আমি পরে আবার চেষ্টা করব
রেইনিয়ারপিএম

এটি /etc/my.cnf নয়। উত্তর আপডেট করা হচ্ছে।
কেওয়ার

@ কেয়ারআর আমি আপনার সমাধানটি চেষ্টা করে দেখি তবে মোটেও কার্যকর হয় না। ডিবি খালি দ্বারা তৈরি করা হয়েছে এবং phpMyAdmin বা অন্য কোনও GUI সরঞ্জামে উপস্থিত হয় না in আমি /etc/my.cnf- তে ডেটা ডিরেক্টরিটি ডেটাডির = / ডেটা / ভের / লিব / মাইএসকিএলে সেট করেছিলাম এবং 0755 এ / ডেটা / ভেরি / লিব / মাইএসকিএল-তে অনুমতি সেট করে দিয়েছি এবং মাইএসকিএল: মাইএসকিএল-তে কেন মালিক রাখি, কেন ডাটাবেস খালি? ? সমস্যা কোথায়?
রেইনিয়ারপিএম

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 ....

--login-path পরিবর্তনশীল ... হোস্ট, ব্যবহারকারী এবং পাসওয়ার্ড প্রতিস্থাপন করে। দুর্দান্ত অধিকার!



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

আপনি কীভাবে আপনার পাস লিখছেন তা নিশ্চিত হন এবং এটি পালাতে পারে না

--defaults-অতিরিক্ত-ফাইল = একটি ভাল জিনিস (টিএম) (সি)


1

পাসওয়ার্ডের চারপাশে উদ্ধৃতি রাখবেন না কারণ আপনি যদি উদ্ধৃতিটি করেন তবে এটি পাসওয়ার্ডের অংশ হিসাবে বিবেচিত হবে।


1

স্ট্যাকওভারফ্লোতে অনুরূপ প্রশ্ন বিদ্যমান।

সেখান থেকে আমার উত্তর সংক্ষেপে ।

আপনি পারেন export MYSQL_PWD=yourverysecretpassword

কনফিগারেশন ফাইল ব্যবহার করার ক্ষেত্রে এই পদ্ধতির উল্টোটি হ'ল আপনার স্ক্রিপ্টের সাথে সিঙ্ক রাখতে আপনার আলাদা কনফিগারেশন ফাইলের প্রয়োজন নেই। আপনার রক্ষণাবেক্ষণের জন্য কেবল স্ক্রিপ্ট রয়েছে।

নেই কোন downside হয় এই পদ্ধতি করতে।

পাসওয়ার্ডটি সিস্টেমে অন্য ব্যবহারকারীর কাছে দৃশ্যমান নয় (এটি যদি কমান্ড লাইনে থাকে তবে তা দৃশ্যমান হবে)। এনভায়রনমেন্ট ভেরিয়েবলগুলি কেবল মাইএসকিএল কমান্ড এবং রুট ব্যবহারকারী ব্যবহারকারীর কাছে দৃশ্যমান।

যে কেউ স্ক্রিপ্ট নিজেই পড়তে পারে সেই পাসওয়ার্ডটিও দৃশ্যমান হবে, সুতরাং স্ক্রিপ্টটি নিজেই সুরক্ষিত রয়েছে তা নিশ্চিত করুন। এটি কোনওভাবেই কোনও কনফিগারেশন ফাইল সংরক্ষণের চেয়ে আলাদা নয়। আপনি যদি স্ক্রিপ্টটি সর্বজনীনভাবে পঠনযোগ্য ( 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 */;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.