Tuesday, May 31, 2011

MySQL root password reset

MySQL ကဘယ္ သေကာင့္သားက install သြားမွန္းမသိ၊ root password လည္း ဘယ္နားမွာမွ မွတ္မထား၊ documentation ကလည္းမရွိ ၊ ဟုတ္ေတာ့ေနျပီ ။ ဒီထဲက database ေတြကို ေရႊ႕ဖို႕ဟာ ဘယ္ mysql account password မွမသိဘူး။ ဘယ္လို export ထုတ္ရပါ့။ o_O

တျခား database ေတြလည္း သိပ္မရင္းႏွီးေတာ့ တျခား database ေတြမွာ ခက္လားမခက္လား ေတာ့ မသိဘူး။ MySQL မွာေတာ့ မခက္ပါဘူး။ MySQL server command ေတြထဲမွာ skip-grant-tables ဆိုတယ့္ option ရွိပါတယ္။ Privileges system ကို မသုံးပဲ ၊ database အားလုံးကို unrestricted access ျဖစ္သြားပါတယ္။ Database downtime ေလး မိနစ္ဝက္ေလာက္ေတာ့ ရွိမွာေပါ့။ ဘယ္တတ္ႏိုင္မလည္း ။

ပထမဆုံး MySQL ကို --skip-grant-tables option နဲ႕ ျပန္စပါ။
> mysqld_safe --skip-grant-tables &


ေနာက္ဆုံးက Ampersand (&) ေလးကေတာ့ process ကို background process အျဖစ္ run လိုက္တာပါ ။ ဒီလို run လိုက္ရင္ MySQL က ဝင္ခ်င္တိုင္းဝင္ ထြက္ခ်င္တိုင္းထြက္လို႕ရျပီ ။
> mysql


Root user အေနနဲ႕ MySQL ထဲကို ဝင္သြားပါလိမ့္မယ္။ အဲၾကမွ password ျမန္ျမန္ reset လုပ္ေပါ့။
mysql> UPDATE mysql.user SET password=PASSWORD('New-password') WHERE User='root';


Mysql database ထဲက user ဆိုတယ့္ table မွာ password ဆိုတယ့္ column ကို update လိုက္တာေပါ့။ ေနာက္က Password(' ') ဆိုတာၾကီးကေတာ့ MySQL ရဲ့ password hashing function ပါ။ Query မွာတုန္းက plain text ၾကီးနဲ႕ ႐ိုက္ေပမယ့္ database ထဲကို hash အေနနဲ႕ insert သြားလုပ္လိမ့္မယ္။ ဒီ query က တျခား mysql account password ေမ့ရင္လည္း အသုံးတဲ့ပါတယ္။

ျပီးရင္ flush privileges လုပ္လိုက္ရင္ privileges system ျပန္ျပီး active ျဖစ္ပါျပီ။ ဆိုလိုတာက ပံုမွန္အတိုင္ တျခား account restriction ေတြျပန္ရွိျပီေပါ့။ က်ေနာ္ကေတာ့ MySQL ကို restart ျပန္လုပ္ေလ့ရွိပါတယ္။ init script ကို ျပန္ေခၚျပီး restart ခ်လိုက္တာ ဘာေလာက္မွမၾကာပါဘူး။

ကဲ ဒါဆို MySQL root password reset ရသြားျပီ။ က်န္တာေတာ့ ကိုယ့္ဟာကို export ဆက္လုပ္ေတာ့ေပါ့။ :)

Divinity

3 comments:

Zephyr said...

ရွာလက္စနဲ႕ oracle ေလးပါရွာလိုက္။
တခါတေလၾကရင္ အဆင္မေျပတာက encrypted လုပ္ထားတဲ႔ password ေတြကို decrypt ျပန္လုပ္လုိ႕မရတာ။ ျမင္ေနရတယ္။ Encrypted ျဖစ္ေနတာ။ 10 g ကေနစျပီးေတာ႔ decrypt ျပန္လုပ္ရခက္သြားတာ။ overwrite လုပ္လုိ႕ရရင္ေကာင္းတာေပါ႔။

ညီေလး root ကို overwite လုပ္လုိက္ေတာ႔ root ကို သံုးထားတဲ႔ apps ေတြရိွရင္ေတာ႔ permission denied ေတြျဖစ္သြားမွာေပါ႔။ Database ကို User ေတြခြဲမထားဘဲ root နဲ႕ေပးထားတဲ႔ App မ်ိဳးမွာဆိုရင္ေပါ႔။

MySQL ရဲ႕ Linux မွာ case sensitive ျဖစ္တဲ႔ table name ေတြၾကံဳခဲ႔တာလည္းမွတ္မိတယ္။ Open Source ေတြကေတာ႔ configuration မ်ားမ်ားလုပ္တတ္မွအိုေကတယ္။

မွတ္မိတာ ေနာက္တစ္ခုက MySql မွာ table ကို optimize လုပ္လုိက္တာ crushed ျဖစ္ျပီး အဲဒီ table သံုးမရျဖစ္သြားတာပဲ။ ဘာျဖစ္မွန္းကိုမသိတာ။ သင္ခန္းစာကေတာ႔ MySQL မွာ ေစတနာနဲ႕ေတာင္ optimize မလုပ္နဲ႕ဆိုတဲ႔သင္ခန္းစာပဲ။

အခုဆိုရင္ MySQL လည္း Oracle ေအာက္ေရာက္ျပီး ေရာင္းဖုိ႕ေလာက္ပဲအားသန္ေတာ႔တယ္ထင္တယ္။ Community version ေတာ႔ အလကားရေသးတယ္။

Oracle ကေတာ႔ development အတြက္ အလကားေပးေလ႔ရိွတဲ႔ ထံုးစံကို MySQL မွာမက်င္႔သံုးတာေတြ႕ရတယ္။

Apache နဲ႕လည္း Oracle က ရန္ျဖစ္တဲ႔အတြက္ Java ေလာကမွာေတာ႔ အေျခအေနသိပ္မေကာင္းဘူး။ ေနာက္ပိုင္း Java world မွာ အလကားေပးတဲ႔ထံုးစံေပ်ာက္သထက္ေပ်ာက္လာဖုိ႕ပဲရိွတယ္။

CQ လို ေစ်းၾကီးၾကီးေပးရတဲ႔ Java CMS ေတြေခတ္မေကာင္းေသးတာပဲေက်းဇူးတင္ရမယ္။ ဒီေနရာမွာေတာ႔ Joomla ကိုေက်းဇူးတင္ရမယ္။

ကမာၻမွာ ပိုက္ဆံသိပ္ေပါတဲ႔ companyဆိုတာ နည္းနည္းပဲရိွျပီး အလယ္အလတ္တန္းစား companies ေတြပဲမ်ားတဲ႔အတြက္ open source ေတြ reliable ျဖစ္တာနဲ႕ကို လူသံုးမ်ားမွာပါပဲ။ ဆိုးတာက open source ကို service charges မေပးခ်င္တဲ႔ကိစၥ နဲ႕ လုိင္စင္ေတြကို နားမလည္တဲ႔ကိစၥပဲ။

အဲဒီ လိုင္စင္ေတြကိုလည္း အခ်ိန္ရရင္ ေရးလိုက္ပါဦး။

ဒီညၾကရင္ ပို႕စ္တစ္ခုေရးျပီးတင္လုိက္မယ္။ အခုေတာ႔ တစ္ပတ္စာအလုပ္ေတြကို စေနေန႕အိမ္ယူသြားဖုိ႕ အထုပ္ထုပ္ေနတယ္။ :)

Btw, အဂၤါေန႕က Kong Fu Panda 2 သြားၾကည္႕တယ္။ ဇာတ္လမ္းကတိုလြန္းတယ္ကြာ။ အေတာ္ေလးရယ္လုိက္ရတယ္။

Divinity said...

MS SQL မွာ sa ၊ MySQL မွာ root ကိုသုံးျပီး application ခ်ိတ္တာ bad practice ပဲ၊ တတ္ႏိုင္ဘူးေလ ဟဲဟဲ ။ တကယ္လို႕ အဲလို application မ်ိဳး config မ်ိဳးရွိမယ္ဆို အဲထဲမွာ root password ရွိမွာေပါ့။ အဲဒါဆို reset စရာ မလိုေတာ့ဘူး။

Oracle မွာ server ေပၚမွာ Administrator rights နဲ႕ account ကေန / as sysdba ဆိုျပီး ဝင္ျပီး password value ကို alter လုပ္လို႕ရတယ္လို႕ ဖတ္ဖူးတယ္ ။ စမ္းေတာ့ မစမ္းဖူးဘူး ။ IBS server ေပၚသြားစမ္းမွရမယ္ :D

Zero Divided by Zero is Zero (Brahmagupta Rule) said...

Bad Practice ႏွစ္ထပ္ကြမ္းေရာ ျမင္ဖူးလား။ ပထမဆိုးတာက App ကေန DB ကို ခ်ိတ္တာ root ကုိသံုးတယ္။ ေနာက္ပိုဆိုးတာက database config ကို Config.java ဘာညာဆိုျပီး code ထဲမွာ hardcode လုပ္ထားတာ။ properties file ေတြ xml ဖုိင္ေတြထက္ေတာင္ စိတ္ခ်ရေသးတယ္ဆိုပဲ။

အဲဒီလို code မ်ိဳးသာ Latest Version check in မလုပ္ခင္ Hard Disk ၾကြသြားရင္ေတာ႔ ေနာက္လူအတြက္ အေတာ္ေလးရင္ေလးတယ္။

အဲဒီလို code မ်ိဳးျမင္ခဲ႔ဖူးတယ္။

တစ္ခါတစ္ေလလည္း properties files ထဲမွာ database password လုိ႕ေတာ႔မေရးထားဘူး ဥပမာဒီလိုမ်ိဳး။

allthebullshitthingIlearnttoConfig=p@ssw0rdbarnyar

ဆိုျပီးလုပ္ထားတာလည္းေတြ႕ဖူးတယ္။ မ်ားေသာအားျဖင္႔ Web Apps တစ္ခုရိွရင္ေတာ႔ သူခ်ိတ္ထားတဲ႔ Database ကိုၾကည္႕လုိ႕ရမွာပဲ။ Good Practice ဆိုရင္ေပါ႔ေလ။

ေနာက္ျပီး password ကို plain text နဲ႕သိမ္းထားတာကို အေတာ္ေလးမုန္းတယ္။ အလကားရတဲ႔ encryption ေတာင္မသံုးႏုိင္တာအံ႕ၾသဖုိ႕ေကာင္းတယ္။

ဟုိတေလာက Chapter2 သြားေတာ႔ member ကဒ္လုပ္ထားျပီး ညီေလးကို birthday သံုးေလးခါျပင္ခိုင္းလိုက္ျပီး rebond လုပ္လုိက္ရင္ အေတာ္ေလးျမတ္သြားမွာလုိ႕ေတြးမိတယ္။

Kimage password လည္း reset ခ်ဖုိ႕ရိွရင္ေျပာပါ။ Member ေျပးလုပ္ထားလုိက္မယ္။ rewards points ၅၀၀ ေလာက္ထည္႕ထားလုိ႕ရမယ္ဆိုရင္ဆက္သြယ္လုိက္ပါ။
:P