گم شدن رمز کاربر root پایگاه داده یکی از آن موقعیت هایی است که همیشه در بدترین زمان ممکن پیش می آید. خبر خوب این است که با دسترسی مدیریتی به خود سرور، بازیابی آن کاملا شدنی است. اما روشی که در بیشتر راهنماها معرفی میشود یک بازه خطرناک ایجاد میکند که میشود از آن اجتناب کرد.
اول مطمئن شوید واقعا به رمز نیاز دارید
قبل از هر کاری این را امتحان کنید. در نسخه های امروزی اوبونتو و دبیان، کاربر root پایگاه داده معمولا با سوکت سیستمی احراز هویت میشود نه با رمز عبور. یعنی ممکن است اصلا رمزی لازم نباشد و شما بیهوده دنبال آن بگردید.
اگر این دستور شما را وارد کنسول کرد، مشکلی وجود ندارد و میتوانید مستقیم رمز را تغییر دهید.
sudo mysqlALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';
FLUSH PRIVILEGES;تشخیص موتور و نسخه
مسیر ادامه کار بسته به اینکه MySQL دارید یا مریادی بی متفاوت است. نام سرویس هم ممکن است mysql یا mariadb باشد. این دو مورد را قبل از شروع مشخص کنید.
mysql --version
systemctl list-units --type=service | grep -E 'mysql|mariadb'روش پیشنهادی: استفاده از فایل راه اندازی
در این روش دستور تغییر رمز را در یک فایل مینویسیم و سرویس را طوری بالا می آوریم که هنگام راه اندازی آن را اجرا کند. مزیت مهمش این است که در هیچ لحظه ای پایگاه داده بدون کنترل دسترسی اجرا نمیشود.
فایل را در مسیری بگذارید که سرویس اجازه خواندن آن را دارد و مالکیتش را درست تنظیم کنید.
sudo systemctl stop mysqlsudo nano /var/lib/mysql-files/reset.sqlALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';sudo chown mysql:mysql /var/lib/mysql-files/reset.sql
sudo systemctl set-environment MYSQLD_OPTS="--init-file=/var/lib/mysql-files/reset.sql"
sudo systemctl start mysqlsudo systemctl unset-environment MYSQLD_OPTS
sudo systemctl restart mysql
sudo rm /var/lib/mysql-files/reset.sqlروش دوم و خطری که باید بشناسید
روش رایج تر این است که سرویس را با گزینه نادیده گرفتن جدول دسترسی ها اجرا کنید. در این حالت هر کسی که بتواند به پایگاه داده وصل شود، بدون هیچ رمزی دسترسی کامل دارد. به همین دلیل باید حتما شبکه را هم غیرفعال کنید تا این پنجره فقط از روی خود سرور باز باشد.
اگر گزینه غیرفعال کردن شبکه را فراموش کنید، برای چند دقیقه یک پایگاه داده کاملا باز روی اینترنت خواهید داشت. این اشتباه بیشتر از آنچه فکر کنید تکرار میشود.
sudo systemctl stop mysql
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
sudo systemctl start mysqlsudo mysql
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new-strong-password';sudo systemctl unset-environment MYSQLD_OPTS
sudo systemctl restart mysql- دستور FLUSH PRIVILEGES قبل از تغییر رمز الزامی است.
- بدون آن، دستور تغییر رمز با خطا روبرو میشود.
- بعد از پایان کار حتما سرویس را به حالت عادی برگردانید.
تفاوت های مریادی بی
در مریادی بی، کاربر root معمولا با افزونه unix_socket کار میکند. یعنی حتی بعد از تعیین رمز، ورود همچنان بر اساس کاربر سیستمی انجام میشود. اگر میخواهید با رمز وارد شوید، باید روش احراز هویت را هم تغییر دهید.
در نسخه های قدیمی تر که دستور ALTER USER پشتیبانی نمیشود، از شکل قدیمی تعیین رمز استفاده کنید.
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('new-strong-password');
FLUSH PRIVILEGES;SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new-strong-password');بعد از بازیابی
وقتی دسترسی برگشت، چند دقیقه وقت بگذارید تا این اتفاق دوباره تکرار نشود. رمز جدید را در یک مدیر رمز عبور ذخیره کنید نه در یک فایل متنی روی همان سرور.
- ورود موفق با رمز جدید را قبل از بستن ترمینال تست کنید.
- فایل حاوی رمز را حتما حذف کنید؛ رمز در آن به صورت متن ساده است.
- تاریخچه دستورهای پوسته را بررسی کنید تا رمز در آن باقی نمانده باشد.
- برای برنامه ها کاربر جداگانه بسازید تا نبود رمز root سرویس را متوقف نکند.
پرسش های پرتکرار
امن ترین روش بازیابی رمز root کدام است؟
استفاده از فایل راه اندازی. در این روش پایگاه داده در هیچ لحظه ای بدون کنترل دسترسی اجرا نمیشود، برخلاف روش skip-grant-tables که یک بازه باز ایجاد میکند.
چرا هنگام تغییر رمز خطای دسترسی میگیرم؟
در حالت skip-grant-tables باید ابتدا دستور FLUSH PRIVILEGES را اجرا کنید و سپس رمز را تغییر دهید. بدون آن دستور تغییر رمز با خطا روبرو میشود.
در مریادی بی چرا بعد از تعیین رمز باز هم بدون رمز وارد میشوم؟
چون کاربر root با افزونه unix_socket کار میکند و ورود بر اساس کاربر سیستمی انجام میشود. برای ورود با رمز باید روش احراز هویت را هم تغییر دهید.
به راهنمای بیشتری نیاز دارید؟
تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.