কমান্ড লাইনে মাইএসকিউএল পাসওয়ার্ড ব্যবহার করার নিরাপদ বিকল্প কী?


35

আমাদের কাছে একটি ডেটাবেস সংস্করণ করার জন্য পিএইচপি কমান্ড-লাইন স্ক্রিপ্ট রয়েছে। যখনই কোনও বিকাশকারী একটি নতুন ডাটাবেস প্যাচ যুক্ত করেন আমরা এই স্ক্রিপ্টটি চালাই।

স্ক্রিপ্টটি মাইএসকিউএল কমান্ড-লাইনের সাহায্যে প্যাচ চালায়:

system('mysql --user=xxx --password=xxx < patch.sql');

যাইহোক, মাইএসকিউএল 5.6 এখন নিম্নলিখিত সতর্কতা জারি করে:

সতর্কতা: কমান্ড লাইন ইন্টারফেসে একটি পাসওয়ার্ড ব্যবহার করা নিরাপত্তাহীন হতে পারে

যা স্পষ্টতই সত্য, তবে ব্যবহারকারীর পক্ষে সমস্যা বা নাও হতে পারে।

  • এরপরে নিরাপদ বিকল্প কী ?
  • বিকল্পভাবে, এই সতর্কতাটি অক্ষম করা সম্ভব?

দয়া করে মনে রাখবেন যে আমি কোনও বাহ্যিক পাসওয়ার্ড ফাইলের উপর নির্ভর করতে চাই না।


2
কোনও ফাইলটিতে আপনার শংসাপত্রগুলি থাকা কোনও বড় সমস্যা নয়। যদি আপনার সার্ভারে কোনও ব্যক্তির রুট সুবিধাগুলি থাকে তবে তারা কোনও নির্দিষ্ট বিকল্পের সাথে মাইএসকিএল সার্ভারটি পুনরায় চালু করে প্রমাণীকরণ সিস্টেমটিকে পুরোপুরি বাইপাস করতে পারে।
জোরডাচি

চুবানো নকল হিসাবে এটি একই সমস্যা নয় । মাইএসকিউএল কোনও পাসওয়ার্ডের জন্য অনুরোধ করছে না, আমি এটি সরবরাহ করছি এবং এটি ঠিকঠাক কাজ করছে। আমি পাসওয়ার্ড ফাইল বাদ দিয়ে পাসওয়ার্ড দেওয়ার বিকল্প খুঁজছি।
বেনিয়ামিন

উত্তর:


17

মাইএসকিউএল এর সাম্প্রতিক জিএ সংস্করণে, অর্থাৎ সংস্করণ ৫..6 , আপনি http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editor.html বর্ণিত mysql_config_editor কমান্ডের মাধ্যমে এটি করতে পারেন

মূলত এটিটি হ'ল: আপনার ব্যবহারকারীর এনক্রিপ্ট করুন / একটি হোস্ট ওরফে দিয়ে শংসাপত্রগুলি পাস করুন এবং তারপরে আপনি হোস্ট উরফটি ব্যবহার করুন, আপনার হোম ডিরেক্টরিতে কোনও কনফিগারেশন ফাইলে এই তথ্যটি রাখুন এবং তারপরে আপনার যখন এটির প্রয়োজন হবে তার পরিবর্তে এই জাতীয় কিছু করুন :

mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql

আপনি পরিবর্তে লিখুন:

mysqldump --login-path=myhostalias mydatabase > dumpfile.sql

এর ফলে ক্লিয়ারটেক্সটে আপনার পাসওয়ার্ডটি কিছু স্ক্রিপ্টে রাখতে এড়ানো।

এটি কাজ করার জন্য আপনাকে প্রথমে (কেবল একবার) সংজ্ঞা দিতে হবে myhostalias:

mysql_config_editor set --login-path=myhostalias --host=mysqlhost.localnet.com --user=root --password

আপনি পছন্দ হিসাবে বিভিন্ন অ্যাকাউন্ট এবং / অথবা হোস্টের জন্য বিভিন্ন লগইন পাথ ব্যবহার করতে পারেন। আপনি আমাকে জিজ্ঞাসা যদি খুব ভাল ধারণা।

একটি নোট হিসেবে আমি বিশ্বাস করি, এই কার্যকারিতা নেই না 5.6 নিচে কোনো সংস্করণ রয়েছে।


দ্রষ্টব্য: আমি বুঝতে পারি যে mysql_config_editor আসলে একটি বাহ্যিক পাসওয়ার্ড ফাইল তৈরি করে, তবে এটি আপনার দ্বারা করা হয় না, এটি সিস্টেমটি কীভাবে কাজ করে তাই আপনার দ্বারা করার জন্য কোনও ম্যানুয়াল এন / ডি / ক্রিপ্টিং নেই।
টুনচে Göncüoğlu

ধন্যবাদ, আমি মাইএসকিউএল 5.6 ব্যবহার করছি তাই এটি কোনও সমস্যা নয়। এটি বলেছিল, আপনার পন্থাটি এখনও সমস্যাযুক্ত (কমপক্ষে আমরা বর্তমানে কীভাবে কাজ করব তা নিয়ে), কারণ আমি পিএইচপি কনফিগারেশন ফাইলটি রিয়েল টাইমে পাসওয়ার্ড নিতে চাইছি এবং এটি কমান্ড লাইনে গতিশীলভাবে দিতে চাই। আপনার পরামর্শ অনুসারে, কল করার সময় আমাকে কমান্ড লাইনে পাসওয়ার্ডটি ব্যবহার করতে mysql_config_editorহবে, সুতরাং দুর্ভাগ্যক্রমে এটি আরও বেশি মূল্য আনবে না। আমি বিকাশকারীকে ম্যানুয়ালি এটি করা এড়াতে চেষ্টা করছি, এইভাবে পিএইচপি কনফিগারেশন ফাইল এবং মাইএসকিএল কনফিগারেশন উভয়ই বজায় রাখতে হবে ।
বেনিয়ামিন

আমার সেরা সমাধানটি সম্ভবত আপাতত সতর্কতাগুলি উপেক্ষা করা। আমি আসলেই ভাবছি যে কোনও সুরক্ষার সমস্যা আছে কি না: কারণ এটি পিএইচপি থেকে আহ্বান করা হয়েছে, আমি অনুমান করি কমান্ড লাইনটি বাশ ইতিহাসে বা মেশিনের অন্য কোথাও সংরক্ষণ করা হয়নি?
বেনিয়ামিন

আমার জ্ঞান না, না, বাশ ইতিহাস এটি সঞ্চয় করে না। তবে, পিএইচপি কনফিগারেশন ফাইলের পাসওয়ার্ডে থাকা পাসওয়ার্ডটি হুবহু একই ঝুঁকি বহন করে, অন্য কোনও আকারে। সম্ভবত আপনি mysql_config_editor ব্যবহার করে পাসওয়ার্ড সংরক্ষণ এবং আপনার পিএইচপি কনফিগার ফাইলটিতে লগইন পাথ সংরক্ষণ করতে পছন্দ করবেন? এইভাবে আপনি আপনার পাসওয়ার্ডটি কোথাও প্রকাশ করবেন না। (তবে এখনও বাহ্যিক পাসওয়ার্ড বজায় রাখতে হবে)।
টুনচে Göncüoğlu

9

বিকল্প --defaults-fileবা --defaults-extra-fileবিকল্পটি ব্যবহার করুন । আপনি এতে ব্যবহারকারী-আইডি এবং পাসওয়ার্ড নির্দিষ্ট করতে পারেন। এটির মতো বিন্যাসও রয়েছে /etc/my.cnf

আরও পড়তে, আপনি বলছেন যে আপনি কোনও বাহ্যিক পাসওয়ার্ড ফাইলে নির্ভর করতে চান না, তবে এটিই কেবলমাত্র নিরাপদ উপায়। প্রক্রিয়া টেবিল বা অন্য কিছুতে অন্য যে কোনও কিছু চিহ্ন চিহ্ন রেখে যাবে। এমনকি আপনি যদি সত্যিই চান তবে পাসওয়ার্ড ফাইলটিকে সংস্করণ নিয়ন্ত্রণে রাখতে পারেন। এটিকে 600 (বা 400) করুন এবং কেবল মাইএসকিএল বা এটির অধীনে চলছে এমন ব্যবহারকারী দ্বারা পঠনযোগ্য।


1
আমি সুরক্ষার কারণে পাসওয়ার্ড ফাইলের বিপক্ষে নই, মাইএসকিউএল শংসাপত্রগুলি পিএইচপি অ্যাপ্লিকেশনে (পাশাপাশি পিডিও সংযোগের জন্য ব্যবহৃত) একটি বিশ্বব্যাপী কনফিগারেশনের অংশ, এবং এটি করার অর্থ কেবলমাত্র একটি অস্থায়ী পাসওয়ার্ড ফাইল তৈরি করা হবে স্ক্রিপ্টের জীবদ্দশায় (কয়েক সেকেন্ড) মাইএসকিএল কমান্ড লাইনটি চালানোর জন্য।
বেঞ্জামিন

উইন্ডোজ সার্ভার 2012 এ এটি কীভাবে করবেন? এমন কনফিগারেশন ফাইলটি কোথায় রয়েছে - - ডিফল্টস-ফাইল বিকল্প?
জেক

আপনি কেবল ফাইলটি --deafults-file এর বিকল্প হিসাবে উল্লেখ করেছেন:mysql --defaults-file c:\some\dirs\my.cnf
lsd

@ বেঞ্জামিন, সুতরাং যদি এটি সুরক্ষা সম্পর্কিত না হয় , তবে কেবল কমান্ড লাইনে পাসওয়ার্ডটি টাইপ করুন। এটি (সুরক্ষা ছাড়াও) কী করতে সমস্যা হয়েছে?
পেসারিয়ার 9

@ বেনজমিন যদি আপনি পিএইচপি থেকে ইতিমধ্যে মাইএসকিউএল ব্যবহার করে থাকেন তবে কেন আপনি mysqlকনসোল ক্লায়েন্টকে চাপ দিচ্ছেন?
জোসিপ রডিন

5

আপনার কাছে http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html প্রতি 4 টি বিকল্প রয়েছে

  • কমান্ড লাইনে একটি -pyour_passবা --password=your_passবিকল্প ব্যবহার করুন
  • কোনও পাসওয়ার্ডের মান নির্দিষ্ট না করে কমান্ড লাইনে -pবা --passwordবিকল্পটি ব্যবহার করুন । এই ক্ষেত্রে, ক্লায়েন্ট প্রোগ্রাম ইন্টারেক্টিভভাবে পাসওয়ার্ডটি চাওয়া:
  • কোনও বিকল্প ফাইলে আপনার পাসওয়ার্ড সংরক্ষণ করুন।
  • MYSQL_PWDপরিবেশ পরিবর্তনশীল আপনার পাসওয়ার্ড সংরক্ষণ করুন

আপনার প্রয়োজনের জন্য, MYSQL_PWDএকটি বিকল্প হতে পারে, তবে এটি আর নিরাপদ নয়। সত্যিই আপনার সাথে একটি ইন্টারেক্টিভ প্রক্রিয়া তৈরি করা উচিত --passwordএবং ইন্টারেক্টিভ পাসওয়ার্ডটি জমা দেওয়া উচিত তবে এটি এই সমস্যার সমাধানের পক্ষে মোটামুটি জটিল।


1
MYSQL_PWD কম্যান্ড লাইনে কীভাবে কম নিরাপদ থাকবে? পিডব্লিউ কখনই প্রক্রিয়া তালিকায় প্রদর্শিত হয় না, যা প্রাথমিক উদ্বেগ বলে মনে হয়
TheLQ

1
অবশ্যই এটি। man psহয়েছে -E Display the environment as well. আপনার মাইএসকিউএল পাসওয়ার্ড অত্যন্ত অনিরাপদ বিবেচনা করা আবশ্যক এবং ব্যবহার করা উচিত নয় উল্লেখ এই পদ্ধতি: URL আমি লিঙ্ক থেকে। পিএস এর কয়েকটি সংস্করণ চলমান প্রক্রিয়াগুলির পরিবেশ প্রদর্শন করার জন্য একটি বিকল্প অন্তর্ভুক্ত করে। কিছু সিস্টেমে আপনি যদি MYSQL_PWD সেট করেন তবে আপনার পাসওয়ার্ডটি অন্য কোনও ব্যবহারকারীর কাছে উন্মুক্ত করা হয়েছে যারা পিএস চালায়। এমনকি PS এর যেমন সংস্করণবিহীন সিস্টেমে, এটি ধরে নেওয়া বুদ্ধিমানের যে অন্য কোনও পদ্ধতি নেই যার দ্বারা ব্যবহারকারীরা প্রক্রিয়া পরিবেশ পরীক্ষা করতে পারবেন।
আরএস

এই এমওয়াইএসকিউএল_এইচকিউএলডিপিউডি বিকল্পটি থেকে তুলে নেওয়া: আমি অনুমান করি যে আপনি যদি কিছু স্ক্রিপ্টের শুরুতে পরিবেশের পরিবর্তনশীল সেট করে থাকেন, তবে মাইএসকিউএল কমান্ড লাইনটি চালু করেন, তারপরে পরিষ্কার করুন যে স্ক্রিপ্টের শেষে, আপনি এক্সপোজারের সময়টিতে কমপক্ষে হ্রাস করতে পারেন । এটা কি যুক্তিসঙ্গত শোনায়?
সুপারজোজ

@ করমোক, দয়া করে শেষ অনুচ্ছেদে বিশদভাবে বর্ণনা করুন। আপনি যে মোটামুটি জটিল সমাধানের কথা বলছিলেন তা কী?
পেসিয়ার 9

1
দেখে মনে হচ্ছে কমান্ড লাইনের চেয়ে এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করা আরও সুরক্ষিত। একটি ডিফল্ট ডিবিয়ান সিস্টেমে আপনি psপ্রতিটি ব্যবহারকারীর প্রতিটি প্রক্রিয়ার জন্য কমান্ড লাইন আর্গুমেন্টটি করতে এবং দেখতে পারেন । তবে ps eশুধুমাত্র আপনার নিজের প্রক্রিয়াগুলির জন্য পরিবেশটি প্রদর্শন করে (যদি না আপনি অবশ্যই মূল হন)। এটি কেবলমাত্র প্রান্তিকভাবে আরও সুরক্ষিত তবে এটি আরও সুরক্ষিত।
jlh

4

যদি আপনার পিএইচপি স্ক্রিপ্টটিতে ইতিমধ্যে একটি উন্মুক্ত ডাটাবেস সংযোগ রয়েছে, তবে আপনি কেবল mysqli_multi_query().sql ফাইলটি আমদানি করতে কেন ব্যবহার করবেন না ? .Sql ফাইলটির বাক্য গঠন বৈধ হলে অবশ্যই ...


আমি নিশ্চিত না যে কতটা ভাল .sql ফাইলের সাথে এটি কাজ করবে?
বেনিয়ামিন

1
@ বেনজমিন আমি মাইএসকিউএল ক্লায়েন্টের চেয়ে খারাপ এর কল্পনাও করতে পারি না - আপনি যদি সুরক্ষা সম্পর্কে সত্যই উদ্বিগ্ন হন তবে এটি এটির সবচেয়ে কম উপায় এবং আকারটি এমন একটি সমস্যা যা আপনি বিভিন্ন উপায়ে সমাধান করতে পারেন।
voretaq7

আপনি কি জানেন যে এটি PDO দিয়ে সম্ভব কিনা?
বেনিয়ামিন

পিডিওর কাছে মনে হয় না যে একবারে ডেটাবেজে একাধিক কোয়েরি ফেলে দেওয়ার জন্য একটি সমতুল্য ফাংশন রয়েছে। দুঃখিত। এটি একটি ধারণা ছিল ...
মাইকেল হ্যাম্পটন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.