بازگشت به مجله
پایگاه دادهتیم فنی هایوهاست۱۰ دقیقه مطالعه

نصب و پیکربندی اولیه MySQL در اوبونتو و دبیان

از نصب تا امن سازی و ساخت کاربر مدیر؛ به همراه دو تفاوتی که در دبیان و نسخه های جدید اوبونتو غافلگیرتان میکند.

پایگاه داده

نصب MySQL روی کاغذ یک دستور بیشتر نیست، اما بین نصب شدن و آماده بودن برای محیط واقعی فاصله زیادی وجود دارد. تنظیمات پیشفرض برای راحتی نصب طراحی شده اند نه برای امنیت. در این راهنما سرویس را نصب میکنیم، آن را امن میکنیم و یک کاربر مدیر درست میسازیم تا مجبور نباشید همه چیز را با کاربر root انجام دهید.

1

قبل از نصب: در دبیان لزوما MySQL نصب نمیشود

این نکته وقت زیادی از افراد میگیرد. مخازن رسمی دبیان سال هاست به جای MySQL، مریادی بی را به عنوان پیشفرض ارائه میدهند. اگر در دبیان دستور نصب mysql-server را بزنید، ممکن است در عمل مریادی بی نصب شود.

مریادی بی از دل همان پروژه بیرون آمده و برای اکثر کاربردها سازگار است، اما در بازیابی رمز عبور و برخی دستورهای مدیریتی تفاوت دارد. پس اول مطمئن شوید چه چیزی روی سرور شماست.

بررسی اینکه کدام موتور نصب شده است
mysql --version
2

نصب سرویس

فهرست بسته ها را به روز کنید و سرویس را نصب کنید. در اوبونتو نسخه های امروزی، MySQL نسخه ۸ نصب میشود.

بعد از نصب، سرویس معمولا به صورت خودکار اجرا و در بوت فعال میشود. این را بررسی کنید تا بعدا غافلگیر نشوید.

نصب در اوبونتو
sudo apt update
sudo apt install mysql-server
نصب در دبیان اگر مریادی بی میخواهید
sudo apt install mariadb-server
بررسی وضعیت سرویس
sudo systemctl status mysql
sudo systemctl enable mysql
3

اجرای اسکریپت امن سازی

نصب پیشفرض چند مورد باز میگذارد که در محیط واقعی نباید بمانند: کاربر ناشناس، پایگاه داده آزمایشی و امکان ورود از راه دور با کاربر root. اسکریپت امن سازی همه اینها را یکجا میپرسد.

در بخش سیاست رمز عبور، اگر سطح سختگیرانه را انتخاب کنید، بعدا برای ساخت کاربرها هم باید رمزهای پیچیده بدهید. این معمولا چیز خوبی است اما بدانید که انتخاب شما روی ادامه کار اثر دارد.

اجرای اسکریپت
sudo mysql_secure_installation
  • حذف کاربران ناشناس را تایید کنید.
  • ورود از راه دور با کاربر root را غیرفعال کنید.
  • پایگاه داده test را حذف کنید.
  • در پایان جدول دسترسی ها را دوباره بارگذاری کنید.
4

چرا با رمز عبور نمیتوانید وارد شوید

در نسخه های امروزی، کاربر root به جای رمز عبور با روش auth_socket احراز هویت میشود. یعنی اگر کاربر سیستمی شما root باشد، بدون رمز وارد میشوید و اگر نباشد، هیچ رمزی کار نمیکند. این رفتار عمدی و در واقع امن تر است.

پس برای ورود از دستور زیر استفاده کنید و انتظار پرسیده شدن رمز را نداشته باشید.

ورود به کنسول
sudo mysql
دیدن اینکه هر کاربر با چه روشی احراز هویت میشود
SELECT user, host, plugin FROM mysql.user;
5

ساخت کاربر مدیر جداگانه

استفاده روزمره از کاربر root توصیه نمیشود. یک کاربر مدیر با دسترسی کامل بسازید و کارهای عادی را با آن انجام دهید. اینطور اگر لازم شد دسترسی را محدود یا باطل کنید، مجبور نیستید به کاربر اصلی دست بزنید.

برای برنامه ها هرگز از این کاربر استفاده نکنید. هر برنامه باید کاربر خودش را داشته باشد که فقط به پایگاه داده خودش دسترسی دارد.

ساخت کاربر مدیر
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'a-long-strong-password';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
کاربر محدود برای یک برنامه
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'another-strong-password';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
6

چند تنظیم اولیه که ارزش دارند

پیش از اینکه داده واقعی وارد شود، دو مورد را بررسی کنید. اول اینکه سرویس فقط روی لوکال هاست گوش بدهد؛ این مقدار پیشفرض است و تا وقتی واقعا به دسترسی از بیرون نیاز ندارید، تغییرش ندهید.

دوم، مجموعه نویسه ها. برای ذخیره درست متن فارسی و ایموجی، استفاده از utf8mb4 ضروری است. نسخه های جدید این را پیشفرض دارند اما اگر پایگاه داده را از جای دیگری منتقل کرده اید حتما بررسی کنید.

بررسی رابطی که سرویس روی آن گوش میدهد
sudo ss -tlnp | grep 3306
بررسی مجموعه نویسه پیشفرض
SHOW VARIABLES LIKE 'character_set_server';
  • تا زمانی که لازم نشده، پورت ۳۳۰۶ را روی اینترنت باز نکنید.
  • برای هر برنامه یک کاربر و یک پایگاه داده جدا بسازید.
  • از همان ابتدا برنامه پشتیبان گیری منظم تعریف کنید.

پرسش های پرتکرار

چرا در دبیان به جای MySQL مریادی بی نصب میشود؟

مخازن رسمی دبیان سال هاست مریادی بی را به عنوان پیشفرض ارائه میدهند. با دستور mysql --version میتوانید بررسی کنید کدام یک روی سرور شما نصب شده است.

چرا با رمز عبور نمیتوانم به عنوان root وارد شوم؟

در نسخه های امروزی کاربر root با روش auth_socket احراز هویت میشود نه با رمز عبور. با دستور sudo mysql بدون نیاز به رمز وارد میشوید.

آیا باید برای هر برنامه کاربر جداگانه ساخت؟

بله. هر برنامه باید کاربری داشته باشد که فقط به پایگاه داده خودش دسترسی دارد تا در صورت نفوذ، دامنه آسیب محدود بماند.

به راهنمای بیشتری نیاز دارید؟

تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.

گفتگو با پشتیبانی

ادامه یادگیری

مشاهده همه