ساخت کاربر و تنظیم دسترسی در MySQL (شامل کاربر بکاپ)
استفاده از root برای برنامه و بکاپ خطرناک است. بهتر است برای هر کار کاربر جدا و با کمترین دسترسی لازم بسازید. این راهنما دستورهای لازم برای MySQL 8 و MariaDB را نشان میدهد.
۱ورود به MySQL با root
در اوبونتو معمولاً root با احراز هویت سوکت کار میکند و رمز نمیخواهد.
sudo mysql۲ساخت کاربر برنامه و دادن دسترسی به یک دیتابیس
بهجای ALL PRIVILEGES روی همهٔ دیتابیسها، فقط روی دیتابیس همان برنامه دسترسی بدهید.
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 کافی است.
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 در فایروال باز کنید.
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 را دارد.
sudo ufw allow from 203.0.113.10 to any port 3306 proto tcp
sudo ufw status numbered۶بررسی دسترسیها
برای دیدن دسترسیهای یک کاربر و فهرست کاربران:
SHOW GRANTS FOR 'app'@'localhost';
SELECT user, host FROM mysql.user;۷تغییر رمز و حذف کاربر
رمز کاربر را با ALTER USER عوض کنید و کاربر بلااستفاده را حذف کنید.
ALTER USER 'app'@'localhost' IDENTIFIED BY 'NEW_STRONG_PASSWORD';
DROP USER 'old_user'@'localhost';پرسشهای پرتکرار دربارهٔ ساخت کاربر و تنظیم دسترسی در MySQL (شامل کاربر بکاپ)
تفاوت 'app'@'localhost' با 'app'@'%' چیست؟
localhost یعنی فقط اتصال از همان سرور؛ % یعنی اتصال از هر آدرسی. همیشه محدودترین حالت ممکن را انتخاب کنید و در صورت نیاز از IP مشخص استفاده کنید.