رفتن به محتوای اصلی
دیدگاه کلود | ارائه‌کننده سرورهای ابری و اختصاصی
آموزش ساخت کاربر در MySQL و دادن دسترسی‌ها (قدم‌به‌قدم)

آموزش ساخت کاربر در MySQL و دادن دسترسی‌ها (قدم‌به‌قدم)

MySQL یکی از محبوب‌ترین سیستم‌های مدیریت پایگاه داده رابطه‌ای (RDBMS) متن‌باز دنیاست و معمولاً در کنار Linux، Apache و PHP به عنوان بخشی از استک معروف LAMP استفاده می‌شود.

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 برای برنامه‌ها استفاده نکنید

  • اصل حداقل دسترسی لازم را رعایت کنید

  • دسترسی‌ها را دوره‌ای بررسی کنید

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