ساخت کاربر و تنظیم دسترسی در MySQL (شامل کاربر بکاپ)

استفاده از root برای برنامه و بکاپ خطرناک است. بهتر است برای هر کار کاربر جدا و با کمترین دسترسی لازم بسازید. این راهنما دستورهای لازم برای MySQL 8 و MariaDB را نشان می‌دهد.

دیتابیس و بکاپمقدماتی6 دقیقه

۱ورود به MySQL با root

در اوبونتو معمولاً root با احراز هویت سوکت کار می‌کند و رمز نمی‌خواهد.

bash
sudo mysql

۲ساخت کاربر برنامه و دادن دسترسی به یک دیتابیس

به‌جای ALL PRIVILEGES روی همهٔ دیتابیس‌ها، فقط روی دیتابیس همان برنامه دسترسی بدهید.

sql
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, DROP ON appdb.* TO 'app'@'localhost';
FLUSH PRIVILEGES;

۳ساخت کاربر مخصوص بکاپ

کاربر بکاپ فقط باید بتواند بخواند. دسترسی‌های زیر برای mysqldump با --single-transaction کافی است.

sql
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';
GRANT SELECT, SHOW VIEW, TRIGGER, EVENT, LOCK TABLES ON appdb.* TO 'backup'@'localhost';
-- برای بکاپ همهٔ دیتابیس‌ها یا استفاده بدون --no-tablespaces:
GRANT PROCESS ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;

۴اجازهٔ اتصال از سرور دیگر

اگر برنامه روی سرور دیگری است، کاربر را با IP همان سرور بسازید (نه %) و در my.cnf مقدار bind-address را تغییر دهید. سپس پورت ۳۳۰۶ را فقط برای همان IP در فایروال باز کنید.

sql
CREATE USER 'app'@'203.0.113.10' IDENTIFIED BY 'STRONG_PASSWORD';
GRANT SELECT, INSERT, UPDATE, DELETE ON appdb.* TO 'app'@'203.0.113.10';
FLUSH PRIVILEGES;

هرگز پورت ۳۳۰۶ را برای همهٔ اینترنت باز نکنید؛ دیتابیس‌های باز به‌سرعت هدف حمله قرار می‌گیرند.

۵باز کردن پورت فقط برای یک IP

با ufw فقط سرور برنامه اجازهٔ اتصال به MySQL را دارد.

bash
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
sudo ufw status numbered

۶بررسی دسترسی‌ها

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

sql
SHOW GRANTS FOR 'app'@'localhost';
SELECT user, host FROM mysql.user;

۷تغییر رمز و حذف کاربر

رمز کاربر را با ALTER USER عوض کنید و کاربر بلااستفاده را حذف کنید.

sql
ALTER USER 'app'@'localhost' IDENTIFIED BY 'NEW_STRONG_PASSWORD';
DROP USER 'old_user'@'localhost';

پرسش‌های پرتکرار دربارهٔ ساخت کاربر و تنظیم دسترسی در MySQL (شامل کاربر بکاپ)

تفاوت 'app'@'localhost' با 'app'@'%' چیست؟

localhost یعنی فقط اتصال از همان سرور؛ % یعنی اتصال از هر آدرسی. همیشه محدودترین حالت ممکن را انتخاب کنید و در صورت نیاز از IP مشخص استفاده کنید.