মাইএসকিএল একইভাবে একটি পাসওয়ার্ড এনক্রিপ্ট করুন


15

আমি একটি ব্যবহারকারী তৈরি করেছি ... তবে পাসওয়ার্ড ভুলে গেছি

mysql> 'ডান' দ্বারা চিহ্নিত ব্যবহারকারী 'ব্লেও' @ '%' তৈরি করুন;

কোন লিনাক্স কমান্ড লাইন টুলটি মাইএসকিএল 5.5-তে পাসওয়ার্ডটি এনক্রিপ্ট করতে পারে?

mysql> mysql.user থেকে পাসওয়ার্ড, ব্যবহারকারী নির্বাচন করুন
------------------------------------------ + + ------- + +
* 920018161824B14A1067A69626595E68CB8284CB | ব্লেও |

... নিশ্চিত হতে আমি সঠিকটি ব্যবহার করি

$ সরঞ্জাম ঠিক
* 920018161824B14A1067A69626595E68CB8284CB

2
আপনি কেন কেবল প্রশাসক হিসাবে লগইন করতে পারেন এবং এর জন্য একটি নতুন পাসওয়ার্ড সংজ্ঞায়িত করতে পারবেন না blayo? এটি সঠিকরূপে অনুসন্ধানের জন্য কয়েক মিলিয়ন সম্ভাব্য চরিত্রের সংমিশ্রণের চেয়ে দ্রুতগতিপূর্ণ faster
nohillside

উত্তর:


13

ভাল, তুচ্ছ (সম্ভবত প্রতারণা ) উপায়টি চালানো হবে:

mysql -NBe "select password('right')"

এটি আপনার পাসওয়ার্ডের মাইএসকিএল-এর যে কোনও পাসওয়ার্ড হ্যাশিং স্কিম ব্যবহার করে একটি পাসওয়ার্ড তৈরি করবে। [ সম্পাদনা : যুক্ত -NB, যা কলামের নাম এবং ascii টেবিল আর্ট থেকে মুক্তি পায়]]


6
এবং, সহজেই, এটি আপনার চকচকে নতুন পাসওয়ার্ডটি আপনার মাইএসকিউএল লগ এবং আপনার ব্যাশ অ্যাকাউন্টের ইতিহাসের লগ উভয় স্বচ্ছ পাঠ্যে সংরক্ষণ করবে।
ক্রেগ 18

@ ক্রেইগ উভয়কে প্রতিরোধ করতে আপনি mysqlএটিকে বাশ ইতিহাস থেকে আড়াল করার ঠিক আগে '' (স্পেস) প্রিপেন্ড করতে পারেন এবং এটি মাইএসকিউএল লগ থেকে লুকানোর SET sql_log_off=ON;জন্য SELECT ...আপনি ঠিক আগে ব্যবহার করতে পারেন ।
মার্মেল

1
@ মুরমেল আপডেটের জন্য ধন্যবাদ! অবশ্যই এটি পাসওয়ার্ড লগইন না করার জন্য ডিফল্ট হওয়া উচিত। সুরক্ষা সর্বদা ডিফল্ট সেটিংস হওয়া উচিত।
ক্রেগ

@ ক্রেইগ ন্যায্য হওয়ার জন্য, এটি ইতিমধ্যে মাইএসকিএল দ্বারা সম্পন্ন হয়েছে (v5.7, এই ফাংশনটি উপস্থিত সর্বশেষ সংস্করণটি v8.0.11 দিয়ে মুছে ফেলা হয়েছে )): 1. ক্লায়েন্টসাইড (প্রভাবিত .mysql_history) সমস্ত বিবৃতি মেলে *PASSWORD*এবং 2. এর জন্য সার্ভারসাইড উপেক্ষা করে বেশ কয়েকটি স্ট্যাম্ট (বাদে SELECT) দেখুন: মাইএসকিউএল 5.7 ম্যানুয়াল - পাসওয়ার্ড এবং লগিং এবং মাইএসকিউএল 5.7 - ম্যানুয়াল - মাইএসকিএল ক্লায়েন্ট লগিং
মার্মেল

এটা ভাল প্রতিক্রিয়া! দুর্ভাগ্যক্রমে, এখনও বেশ কয়েক জন লোক রয়েছেন যারা বিভিন্ন কারণে (নিজেকে অন্তর্ভুক্ত করেছেন) এখনও 5..7 এর চেয়ে পুরানো মাইএসকিএল সংস্করণ ব্যবহার করে আটকে আছেন।
ক্রেগ

12

কিছু ওয়ান-লাইনার:

মাইএসকিউএল-এর জন্য আপনাকে -উ (ব্যবহারকারী) -পি প্রয়োজন হতে পারে:

mysql -NBe "select password('right')"

পাইথন :

python -c 'from hashlib import sha1; print "*" + sha1(sha1("right").digest()).hexdigest().upper()'

পার্ল :

perl -MDigest::SHA1=sha1_hex -MDigest::SHA1=sha1 -le 'print "*". uc sha1_hex(sha1("right"))'

পিএইচপি :

php -r 'echo "*" . strtoupper(sha1(sha1("right", TRUE))). "\n";'

রুবি :

ruby -e 'require "digest/sha1"; puts "*" + Digest::SHA1.hexdigest(Digest::SHA1.digest("right")).upcase'

সমস্ত আউটপুট:

* 920018161824B14A1067A69626595E68CB8284CB


ধন্যবাদ, আমি আপনার উত্তরটির সাথে সার্ভারফল্ট
a/

@alexjhart আমি কি নতুন mysql 5.7.8 পাসওয়ার্ড হ্যাশিং অ্যালগরিদমের জন্য একটি আপডেট পেতে পারি :)? (আপনি কীভাবে এটি কীভাবে
পেলেন

6

এটি এখনও আমার মনকে ধাক্কা দেয় যে মাইএসকিউএল কমান্ড লাইনে এবং লগগুলিতে পাসওয়ার্ডগুলিকে ঘৃণা করে না। এবং এটিই একমাত্র কারণ যে আমি @ গিলস উত্তরের উপর মন্তব্য করার চেয়ে উত্তর যুক্ত করছি।

সুতরাং, অবশ্যই, আপনি কেবল মাইএসকিউএল এডমিন হিসাবে লগইন করতে পারেন এবং আপনার ব্লেও ব্যবহারকারীর জন্য একটি নতুন পাসওয়ার্ড সেট করতে পারেন, @ পেট্রিক্সের পরামর্শ অনুসারে।

যাইহোক, এটি করার স্ট্যান্ডার্ড উপায় হ'ল মাইএসকিউএল এর পাসওয়ার্ড () ফাংশন ব্যবহার করে যা একটি প্লেটেক্সট পাসওয়ার্ডকে আর্গুমেন্ট হিসাবে (গুরুতরভাবে?) গ্রহণ করে।

যদি আপনি এটি করেন তবে আপনি যে লগ ফাইলগুলিতে অ্যাক্সেস পেতে পারেন তার পক্ষে সহজেই পুনরুদ্ধারের জন্য আপনার বাশ ইতিহাস এবং আপনার মাইএসকিউএল লগগুলিতে আপনার মাইএসকিউএল ব্যবহারকারীর পাসওয়ার্ডের সমতল সংস্করণটি ছেড়ে যান।

স্ক্রিনে বা আপনার লগগুলিতে প্রতিধ্বনিত না করে পাসওয়ার্ডের অনুরোধ জানানো একটি সামান্য ইউটিলিটি থাকা ভাল কি না, তবে আপনাকে ফলস্বরূপ মাইএসকিউএল-সামঞ্জস্যপূর্ণ হ্যাশ সরবরাহ করবে?

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

#!/bin/bash

mysqlpwd=$(/usr/bin/python -c 'from hashlib import sha1; import getpass; print "*" + sha1(sha1(getpass.getpass("New MySQL Password:")).digest()).hexdigest()')

echo $mysqlpwd

@HalosGhost; কি সম্পাদনা ছিল? এটা কিছু পরিবর্তন হয়নি? ;-)
ক্রেগ

এটি সিনট্যাক্স হাইলাইটিং প্রয়োগ করেছে (সম্পাদনা সংক্ষিপ্তসার হিসাবে উল্লিখিত) এবং সম্পাদনার আসল পাঠ্য দ্বারা স্পষ্ট করা হয়েছে।
HalosGhost

3
ও তাই. সত্যই বুঝতে পারিনি যে আপনি কী করেছেন (আপনি স্পষ্টতই <!-- language: lang-bsh -->লাইনটি যুক্ত করেছেন )। কুশলী! আমি এটা পছন্দ করি. ধন্যবাদ!
ক্রেগ

5

শেলটি ব্যবহার করে আরও একটি:

echo -n 'right' | sha1sum | xxd -r -p |\
sha1sum | tr '[a-z]' '[A-Z]' | awk '{printf "*%s", $1}'

ব্যাখ্যা:

  1. echo -n লাইন ব্রেক ছাড়াই মুদ্রণ করুন
  2. sha1sum প্রথম SHA1
  3. xxd -r -p হ্যাশ আনহেক্স
  4. sha1sum দ্বিতীয় SHA1
  5. tr '[a-z]' '[A-Z]' বড় হাতের মধ্যে রূপান্তর
  6. awk '{print "*" $1}' শীর্ষস্থানীয় যুক্ত করুন *

আরো বিস্তারিত:

২ এবং ৩ এর মধ্যে awk '{printf "%s", $1}'newচ্ছিক পদক্ষেপটি নিউলাইন- এবং হাইফেন-অপসারণের জন্য অন্তর্ভুক্ত করা যেতে পারে। তবে xxd এটিকে যাইহোক উপেক্ষা করবে (dave_thompson_085 এর জন্য ধন্যবাদ)।

তদ্ব্যতীত 5 এবং 6 পদক্ষেপ একবারে তাদের প্রতিস্থাপনের মাধ্যমে সম্পন্ন করা যেতে পারে {print "*" toupper($1)}(ধন্যবাদ ডেভ_থম্পসন_085)।


1
awkবড় হাতের করতে পারেন, এবং একটি অসম্পূর্ণ (শেষ) টার্মিনালে লাইন outputting incovenient হল: .. | sha1sum | awk '{print "*" toupper($1)}'। এবং আপনার এনএল এবং এমনকি হাইফেন সম্পর্কে চিন্তা করার দরকার নেই xxd -r -p, সেগুলি এড়ানো হবে।
dave_thompson_085

4

হ্যাশটি sha1 (sha1 (পাসওয়ার্ড)) । যেহেতু নেই লবণ (যা একটি সমাধি নিরাপত্তা ত্রুটি হয়), আপনি পারেন একটি সারণী হ্যাশ খোঁজা

sha1sumজিএনইউ কোর্টিলস বা বুসিবক্স থেকে কেবল পসিক্স সরঞ্জামের সাহায্যে শ 1 (শ 1 (পাসওয়ার্ড)) গণনা করতে বিরক্ত করছে কারণ sha1sumকমান্ডটি হেক্সাডেসিমালে ডাইজেস্ট প্রিন্ট করে এবং বাইনারি রূপান্তর করার কোনও মানক সরঞ্জাম নেই।

awk "$(printf %s 'right' | sha1sum |
       sed -e 's/ .*//' -e 's/../, 0x&/g' \
           -e 's/^/BEGIN {printf "%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c"/' \
           -e 's/$/; exit}/')" | sha1sum

পাইথনের মানক লাইব্রেরিতে স্ট্যান্ডার্ড হজম থাকে, তাই এটি একটি সাধারণ ওয়ান-লাইনার।

printf %s 'right' |
python -c 'from hashlib import sha1; import sys; print sha1(sha1(sys.stdin.read()).digest()).hexdigest()'

অথবা ওয়ান-লাইনের ভিতরে পাসওয়ার্ড সহ:

python -c 'from hashlib import sha1; print sha1(sha1("right").digest()).hexdigest()'

আমি এই উত্তরটি আত্মায় পছন্দ করি তবে এটি কার্যকরভাবে কাজ করে না। আমি যখন এন্টার কী টিপতাম তখন এটি এগিয়ে যাওয়ার পরিবর্তে ইনপুট পড়তে চায় to এছাড়াও, ইনপুটটি স্ক্রিনে ফিরে আসে, যা পছন্দসই নয়। যদিও এরকম কিছু সম্পর্কে? unix.stackexchange.com/a/155583/37401
ক্রেগ

@ ক্রাগ কীভাবে ইন্টারেক্টিভ ইনপুট পড়বেন তা প্রশ্নের স্কোপের বাইরে। আমি ধরে নিই যে স্ক্রিপ্টটির ইতিমধ্যে পাসওয়ার্ড রয়েছে; সাধারণত এটি কোনও ফাইলে সঞ্চিত থাকে, ইন্টারেক্টিভভাবে একটি ডাটাবেস পাসওয়ার্ড টাইপ করা বিরল। আপনি যদি ইন্টারেক্টিভ ইনপুটটি পড়তে চান, আপনি readএকটি লাইন পড়তে শেল বিল্টিন ব্যবহার করতে পারেন ; stty echoযদি আপনি প্রতিধ্বনি বন্ধ করতে চান এবং ssty +echoএটিকে আবার চালু করতে চান তবে প্রথমে চালান । পাইথনে, আপনি getpassমডিউলটি ব্যবহার করতে পারেন ।
গিলস 'অশুভ হওয়া বন্ধ করুন'

হ্যাঁ, আমি জানি ... এবং যথেষ্ট ন্যায্য! আমি যে রাস্তায় যাব তার আরও নিচে আমি ভয়ঙ্কর সুরক্ষাটিকে ঘৃণা করি এবং মাইএসকিউএল সুরক্ষা সাধারণভাবে বেশ ভয়ঙ্কর, তাই আমি যেখানেই সুযোগ পাই সেখানেই কিছুটা সুরক্ষার অন্তর্দৃষ্টি ইনজেক্ট করতে চাইবার এই হাঁটু-ঝাঁকুনির প্রবণতা রয়েছে। ;-)
ক্রেগ

1

আপনি যদি কোনও ব্যবহারকারীকে সন্ধান করেন এবং পাসওয়ার্ড ভুলে যান তবে এটিই আপনার করা উচিত এবং এটি আরও সহজ।

আমি একবারে 10 বিলিয়ন জিনিস করার সময় এটি আমারও কয়েক ডজনবার হয়েছিল। আমি আমার পাসওয়ার্ডটি পুনরুদ্ধার করার সর্বোত্তম উপায় হ'ল:

সম্পূর্ণরূপে প্রথমে mysql সার্ভারটি বন্ধ করে দিয়েছে

mysqld_safe জারি করা হয়েছে - স্কিপ-অনুদান-সারণী এবং

তারপরে আমি পাসওয়ার্ড ইস্যু না করে রুট হিসাবে লগ ইন করেছি, শুধু মাইএসকিএল-ইউ মাইএসকিএল-ব্যবহারকারী (এটি আপনাকে মাইএসকিএলডি_সেসফের পরে প্রবেশ করতে দেয়)

তারপরে mysql> ব্যবহারকারীর টেবিলে যান এবং ব্যবহারকারীর জন্য পাসওয়ার্ড আপডেট করুন

তারপরে ফিরে যান এবং মাইএসকিএল পুনরায় চালু করুন

এটি কাজ করে কিনা তা আমাদের দেখুন।


দেখে মনে হচ্ছে এটি কেবলমাত্র নির্দিষ্ট ব্যবহারকারী হিসাবে না গিয়ে আপনি লগইন করতে পারবেন না এমন ক্ষেত্রে এটি আরও বেশি।
mwfearnley

1

আরেকটি শেল ব্যবহার করছে

echo -n 'right' | openssl sha1 -binary | openssl sha1 -hex | \
    awk '{print "*"toupper($0)}'

... যা ফলাফল:

*920018161824B14A1067A69626595E68CB8284CB

0

MySQL 4.1+ ডাবল SHA1 ব্যবহার করে

> SELECT PASSWORD("right")
*920018161824B14A1067A69626595E68CB8284CB

> SELECT SHA1(UNHEX(SHA1("right")))
920018161824B14A1067A69626595E68CB8284CB

sh-3.2# php -r 'echo "*" . sha1(sha1("right", TRUE)). "\n";'
*920018161824b14a1067a69626595e68cb8284cb

এই অ্যালগরিদম সহজেই অন্যান্য ভাষায় পোর্ট করা যায়। একটি পার্থক্য হ'ল "নির্বাচিত পাসওয়ার্ড" এর পাসওয়ার্ড হ্যাশগুলি সর্বদা একটি "*" অক্ষর দিয়ে শুরু হয়।

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