دیتابیس شما حاوی حساس‌ترین اطلاعات کسب‌وکار و کاربرانتونه. یه هک میتونه همه چی رو نابود کنه. تو این مقاله راه‌های محافظت حرفه‌ای رو یاد میگیرید.

ریسک‌ها

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 امن و به‌روز ارائه میشن.

جمع‌بندی

امنیت دیتابیس یه فرآیند مداومه. با راه‌های بالا و پایش دائم، از سرمایه اصلی کسب‌وکارتون محافظت میکنید.