نصب MySQL روی کاغذ یک دستور بیشتر نیست، اما بین نصب شدن و آماده بودن برای محیط واقعی فاصله زیادی وجود دارد. تنظیمات پیشفرض برای راحتی نصب طراحی شده اند نه برای امنیت. در این راهنما سرویس را نصب میکنیم، آن را امن میکنیم و یک کاربر مدیر درست میسازیم تا مجبور نباشید همه چیز را با کاربر root انجام دهید.
قبل از نصب: در دبیان لزوما MySQL نصب نمیشود
این نکته وقت زیادی از افراد میگیرد. مخازن رسمی دبیان سال هاست به جای MySQL، مریادی بی را به عنوان پیشفرض ارائه میدهند. اگر در دبیان دستور نصب mysql-server را بزنید، ممکن است در عمل مریادی بی نصب شود.
مریادی بی از دل همان پروژه بیرون آمده و برای اکثر کاربردها سازگار است، اما در بازیابی رمز عبور و برخی دستورهای مدیریتی تفاوت دارد. پس اول مطمئن شوید چه چیزی روی سرور شماست.
mysql --versionنصب سرویس
فهرست بسته ها را به روز کنید و سرویس را نصب کنید. در اوبونتو نسخه های امروزی، MySQL نسخه ۸ نصب میشود.
بعد از نصب، سرویس معمولا به صورت خودکار اجرا و در بوت فعال میشود. این را بررسی کنید تا بعدا غافلگیر نشوید.
sudo apt update
sudo apt install mysql-serversudo apt install mariadb-serversudo systemctl status mysql
sudo systemctl enable mysqlاجرای اسکریپت امن سازی
نصب پیشفرض چند مورد باز میگذارد که در محیط واقعی نباید بمانند: کاربر ناشناس، پایگاه داده آزمایشی و امکان ورود از راه دور با کاربر root. اسکریپت امن سازی همه اینها را یکجا میپرسد.
در بخش سیاست رمز عبور، اگر سطح سختگیرانه را انتخاب کنید، بعدا برای ساخت کاربرها هم باید رمزهای پیچیده بدهید. این معمولا چیز خوبی است اما بدانید که انتخاب شما روی ادامه کار اثر دارد.
sudo mysql_secure_installation- حذف کاربران ناشناس را تایید کنید.
- ورود از راه دور با کاربر root را غیرفعال کنید.
- پایگاه داده test را حذف کنید.
- در پایان جدول دسترسی ها را دوباره بارگذاری کنید.
چرا با رمز عبور نمیتوانید وارد شوید
در نسخه های امروزی، کاربر root به جای رمز عبور با روش auth_socket احراز هویت میشود. یعنی اگر کاربر سیستمی شما root باشد، بدون رمز وارد میشوید و اگر نباشد، هیچ رمزی کار نمیکند. این رفتار عمدی و در واقع امن تر است.
پس برای ورود از دستور زیر استفاده کنید و انتظار پرسیده شدن رمز را نداشته باشید.
sudo mysqlSELECT user, host, plugin FROM mysql.user;ساخت کاربر مدیر جداگانه
استفاده روزمره از کاربر 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;چند تنظیم اولیه که ارزش دارند
پیش از اینکه داده واقعی وارد شود، دو مورد را بررسی کنید. اول اینکه سرویس فقط روی لوکال هاست گوش بدهد؛ این مقدار پیشفرض است و تا وقتی واقعا به دسترسی از بیرون نیاز ندارید، تغییرش ندهید.
دوم، مجموعه نویسه ها. برای ذخیره درست متن فارسی و ایموجی، استفاده از utf8mb4 ضروری است. نسخه های جدید این را پیشفرض دارند اما اگر پایگاه داده را از جای دیگری منتقل کرده اید حتما بررسی کنید.
sudo ss -tlnp | grep 3306SHOW VARIABLES LIKE 'character_set_server';- تا زمانی که لازم نشده، پورت ۳۳۰۶ را روی اینترنت باز نکنید.
- برای هر برنامه یک کاربر و یک پایگاه داده جدا بسازید.
- از همان ابتدا برنامه پشتیبان گیری منظم تعریف کنید.
پرسش های پرتکرار
چرا در دبیان به جای MySQL مریادی بی نصب میشود؟
مخازن رسمی دبیان سال هاست مریادی بی را به عنوان پیشفرض ارائه میدهند. با دستور mysql --version میتوانید بررسی کنید کدام یک روی سرور شما نصب شده است.
چرا با رمز عبور نمیتوانم به عنوان root وارد شوم؟
در نسخه های امروزی کاربر root با روش auth_socket احراز هویت میشود نه با رمز عبور. با دستور sudo mysql بدون نیاز به رمز وارد میشوید.
آیا باید برای هر برنامه کاربر جداگانه ساخت؟
بله. هر برنامه باید کاربری داشته باشد که فقط به پایگاه داده خودش دسترسی دارد تا در صورت نفوذ، دامنه آسیب محدود بماند.
به راهنمای بیشتری نیاز دارید؟
تیم پشتیبانی هایوهاست برای انتخاب و مدیریت سرویس کنار شماست.