دیتابیس شما حاوی حساسترین اطلاعات کسبوکار و کاربرانتونه. یه هک میتونه همه چی رو نابود کنه. تو این مقاله راههای محافظت حرفهای رو یاد میگیرید.
ریسکها
SQL Injection: کوئریهای مخرب.
سرقت داده: نشت اطلاعات کاربران.
Ransomware: دیتابیس رمزنگاری میشه، باج میخوان.
Insider Threat: کارمند بد.
DDoS: از کار انداختن دیتابیس.
راههای محافظت
۱. Firewall
دیتابیس نباید مستقیم از اینترنت قابل دسترسی باشه. bind-address = 127.0.0.1 برای MySQL.
۲. رمز عبور قوی
حداقل ۱۶ کاراکتر، ترکیبی. حتماً برای root عوض کنید.
۳. حذف کاربر Anonymous
DROP USER ''@'localhost';
۴. Least Privilege
هر کاربر فقط دسترسی لازم داشته باشه. root رو برای Application استفاده نکنید.
۵. TLS/SSL
اتصال به دیتابیس رمزنگاری شده باشه.
۶. Prepared Statements
در کد Application، همیشه از Prepared Statements استفاده کنید.
Bad: SELECT * FROM users WHERE name = $name
Good: PDO::prepare with bindValue
۷. Input Validation
ورودی کاربر رو validate کنید. طول، نوع، فرمت.
۸. Audit Log
هر تغییر روی جداول حساس رو log کنید.
۹. Encryption at Rest
دیسک دیتابیس رو رمزنگاری کنید.
۱۰. Backup Encryption
بکآپها رو رمزنگاری کنید.
SQL Injection Prevention
Prepared Statements
PHP PDO:
$stmt = $pdo->prepare(SELECT * FROM users WHERE id = ?);
$stmt->execute([$id]);
ORM
Laravel Eloquent، Django ORM. خودشون escape میکنن.
هرگز
Concatenation SQL نکنید:
Bad: $sql = SELECT ... WHERE id = . $id;
User Management
ساخت کاربر جدید
CREATE USER 'app'@'localhost' IDENTIFIED BY 'strong_pass';
GRANT دسترسی محدود
GRANT SELECT, INSERT, UPDATE ON mydb.* TO 'app'@'localhost';
هرگز
GRANT ALL نکنید مگر لازم.
Row-Level Security
در PostgreSQL و MySQL 8+، دسترسی سطر به سطر:
CREATE POLICY user_data ON users
FOR SELECT
USING (user_id = current_user_id());
Column-Level Encryption
ستونهای حساس رو رمزنگاری کنید:
INSERT INTO users VALUES (AES_ENCRYPT(secret_data, key));
MySQL امنیت خاص
mysql_secure_installation
اسکریپت پیشفرض که چند نکته امنیتی رو اعمال میکنه.
Password Validation
پلاگین validate_password.
Audit Plugin
مثل audit_log برای log همه فعالیتها.
PostgreSQL امنیت خاص
pg_hba.conf
کنترل دسترسی. فقط IP های مجاز.
SSL Only
hostssl و rejectno.
Monitoring
لاگها رو مدام بررسی کنید. الگوهای مشکوک:
- Failed login های زیاد
- کوئریهای غیرمعمول
- ساعتهای غیرمعمول
Update منظم
MySQL/PostgreSQL رو مدام آپدیت کنید. آسیبپذیریهای امنیتی رفع میشن.
Backup Security
بکآپها رو:
- رمزنگاری کنید
- Off-site نگه دارید
- تست کنید (Restore)
- محدود دسترسی داشته باشن
Network Isolation
دیتابیس تو یه VLAN جداگانه. فقط Application Server دسترسی داشته باشه.
Read Replica
برای Read کوئریها، Replica جدا. اگه هک بشه، Master سالم.
Regular Audit
ماهانه:
- کاربران فعال چند تا؟
- دسترسیها درسته؟
- Log ها چی میگن؟
Compliance
GDPR، PCI DSS، HIPAA بسته به کاربرد. رعایت کنید.
Iranian Context
قانون حفاظت از دادههای شخصی ایران در حال تدوینه. آماده باشید.
سباهاست پیشنهاد
سرورهای سباهاست با MySQL امن و بهروز ارائه میشن.
جمعبندی
امنیت دیتابیس یه فرآیند مداومه. با راههای بالا و پایش دائم، از سرمایه اصلی کسبوکارتون محافظت میکنید.