MySQL یکی از محبوبترین سیستمهای مدیریت پایگاه داده رابطهای (RDBMS) متنباز دنیاست و معمولاً در کنار Linux، Apache و PHP به عنوان بخشی از استک معروف LAMP استفاده میشود.
یکی از مهمترین کارهای امنیتی در MySQL، ساخت کاربرهای جداگانه و دادن دسترسی محدود به هر کدام است، نه استفاده مستقیم از کاربر root برای همه کارها.
در این آموزش یاد میگیرید چطور:
-
کاربر جدید در MySQL بسازید
-
سطح دسترسی مشخص به او بدهید
-
دسترسیها را بررسی یا حذف کنید
-
خطاهای رایج مربوط به کاربران را برطرف کنید
پیشنیازها
برای انجام مراحل این آموزش باید:
-
به یک سرور دارای MySQL دسترسی داشته باشید
-
دسترسی مدیریتی (root یا sudo) روی سیستم داشته باشید
این آموزش معمولاً با Ubuntu انجام میشود، اما دستورات MySQL روی سایر توزیعها هم مشابه هستند.
ساخت کاربر جدید در MySQL
بعد از نصب MySQL، یک کاربر مدیریتی به نام root ساخته میشود که دسترسی کامل به کل سرور پایگاه داده دارد. استفاده دائمی از این کاربر برای برنامهها کار اشتباهی است. بهتر است برای هر پروژه یا اپلیکیشن، کاربر جدا بسازید.
ورود به MySQL به عنوان root
در اکثر سیستمهای Ubuntu:
sudo mysqlاگر root با پسورد تنظیم شده باشد:
mysql -u root -pدستور ساخت کاربر
ساختار کلی:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';مثال:
CREATE USER 'aliuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';توضیح بخشها:
| بخش | توضیح |
|---|---|
| username | نام کاربر دیتابیس |
| host | محلی که کاربر اجازه اتصال دارد (مثلاً localhost یا %) |
| password | رمز عبور کاربر |
اگر از % استفاده کنید، کاربر میتواند از هر IP وصل شود.
پلاگینهای احراز هویت در MySQL
MySQL چند روش برای احراز هویت دارد:
| پلاگین | امنیت | کاربرد |
|---|---|---|
caching_sha2_password | بسیار قوی | پیشفرض MySQL 8 و مناسب برنامههای جدید |
mysql_native_password | خوب | سازگار با برنامههای قدیمی و برخی نسخههای PHP |
auth_socket | بر پایه کاربر سیستم | فقط اتصال محلی بدون پسورد |
مثال استفاده از پلاگین خاص:
CREATE USER 'aliuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';دادن دسترسی به کاربر (GRANT)
بعد از ساخت کاربر، باید مشخص کنیم چه کارهایی اجازه دارد انجام دهد.
ساختار کلی:
GRANT privilege ON database.table TO 'username'@'host';مثال دسترسی به یک دیتابیس خاص:
GRANT SELECT, INSERT, UPDATE, DELETE ON mydatabase.* TO 'aliuser'@'localhost';یعنی این کاربر فقط روی دیتابیس mydatabase میتواند:
-
داده بخواند (SELECT)
-
اضافه کند (INSERT)
-
ویرایش کند (UPDATE)
-
حذف کند (DELETE)
دادن دسترسی کامل (با احتیاط!)
GRANT ALL PRIVILEGES ON *.* TO 'aliuser'@'localhost' WITH GRANT OPTION;این کار تقریباً کاربر را شبیه root میکند. برای محیطهای واقعی و امنیتی، اصلاً توصیه نمیشود مگر کاملاً آگاه باشید چه میکنید.
بررسی دسترسیهای یک کاربر
SHOW GRANTS FOR 'aliuser'@'localhost';حذف دسترسی از کاربر
REVOKE INSERT, UPDATE ON mydatabase.* FROM 'aliuser'@'localhost';حذف کامل یک کاربر
DROP USER 'aliuser'@'localhost';توجه: اگر کاربر در حال اتصال باشد، ابتدا باید اتصالش قطع شود.
ورود با کاربر جدید
mysql -u aliuser -pخطاهای رایج
1️⃣ خطای Access denied
معمولاً به دلیل:
-
اشتباه بودن پسورد
-
نداشتن دسترسی کافی
-
اشتباه بودن host
بررسی دسترسی:
SHOW GRANTS FOR 'aliuser'@'localhost';2️⃣ عدم اتصال از راه دور
باید کاربر را با host مناسب بسازید:
CREATE USER 'aliuser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'aliuser'@'%';همچنین پورت 3306 و تنظیمات bind-address در MySQL باید درست باشند.
3️⃣ خطای Error 1396 (کاربر وجود دارد)
یعنی کاربر از قبل ساخته شده:
DROP USER 'aliuser'@'localhost';
CREATE USER 'aliuser'@'localhost' IDENTIFIED BY 'password';جمعبندی
مدیریت کاربران در MySQL یکی از پایهایترین و مهمترین بخشهای امنیت دیتابیس است. همیشه:
-
از root برای برنامهها استفاده نکنید
-
اصل حداقل دسترسی لازم را رعایت کنید
-
دسترسیها را دورهای بررسی کنید
این کار ساده، جلوی خیلی از فاجعههای دیتابیسی آینده را میگیرد. سرورها مثل بچهها هستند، اگر کنترل نشن، خرابکاری میکنند.
