
به اشتراک بگذارید

به اشتراک بگذارید
موارد فنی | بلاگ وبداده
۱۰ اقدام ضروری برای تأمین امنیت پایگاه داده


| تهدید | اقدام دفاعی | نتیجه |
|---|---|---|
| دسترسی غیرمجاز با حساب پیشفرض | حذف کاربران ناشناس و دیتابیس test | بستن درهای پشتی شناختهشده |
| نشت داده در صورت لو رفتن یک حساب | اصل کمترین دسترسی و کاربر اختصاصی | محدود ماندن دامنه آسیب |
| اسکن و حمله مستقیم از اینترنت | محدودسازی شبکه (bind-address و فایروال) | نادیدنیشدن دیتابیس از بیرون |
| شنود داده روی شبکه | رمزنگاری اتصال با TLS/SSL | غیرقابلخواندنشدن ترافیک |
| حمله تزریق (SQL Injection) | Prepared Statement در سطح کد | تلقی ورودی بهعنوان داده، نه دستور |
| باجافزار، خطای انسانی، خرابی | بکاپ رمزنگاریشده و آزمون بازیابی | امکان بازگشت سالم داده |
هیچ اقدام واحدی بهتنهایی کافی نیست، اما اگر بخواهیم نقطه شروع را نام ببریم، ترکیب «اصل کمترین دسترسی» و «در دسترس نگذاشتن دیتابیس روی اینترنت» بیشترین اثر را با کمترین هزینه دارد. این دو کار جلوی بخش بزرگی از حملات رایج را میگیرند. در کنار آنها، بکاپ منظم هم خط دفاعی نهایی شماست.
این ابزار رسمی MySQL و MariaDB یک سختسازی اولیه انجام میدهد: تنظیم پسورد کاربر root، حذف کاربران ناشناس (anonymous)، غیرفعالکردن ورود ریموت root، حذف دیتابیس آزمایشی test و اعمال تغییرات با flush privileges. اجرای آن بلافاصله پس از نصب، یکی از سادهترین و مؤثرترین کارهای امنیتی است.
تغییر پورت پیشفرض یک لایه «مبهمسازی» است و اسکنهای خودکار را کندتر میکند، اما بهتنهایی امنیت نمیسازد. مهاجم حرفهای میتواند پورت واقعی را پیدا کند. این کار را بهعنوان مکمل کنترل دسترسی و فایروال انجام دهید، نه جایگزین آنها.
SQL Injection حملهای است که در آن مهاجم با وارد کردن کد در ورودیهای سایت، کوئری دیتابیس را دستکاری میکند. مؤثرترین دفاع طبق توصیه OWASP، استفاده از Prepared Statement یا کوئری پارامتری است؛ در این روش ورودی کاربر همیشه بهعنوان داده تلقی میشود و هرگز بهعنوان دستور اجرا نمیشود.
بستگی به نرخ تغییر داده دارد. برای سایتهای پرتغییر مثل فروشگاه، بکاپ روزانه (یا حتی مکرر) منطقی است و برای سایتهای کمتغییر، بازه طولانیتر کافی است. مهمتر از تناوب، رمزنگاری بکاپ، نگهداری نسخهای خارج از سرور و آزمایش دورهای بازیابی است.
خیر. روی هاست اشتراکی بسیاری از تنظیمات سطح سرور مثل bind-address، تغییر پورت یا فعالسازی فایروال در اختیار شما نیست و توسط ارائهدهنده مدیریت میشود. اگر به کنترل کامل امنیت دیتابیس نیاز دارید، سرور مجازی یا اختصاصی گزینه مناسبتری است.
اگر دیتابیس و اپلیکیشن روی یک ماشین و از طریق localhost با هم حرف میزنند، ریسک شنود کمتر است. اما اگر اتصال از روی شبکه انجام میشود، رمزنگاری با TLS/SSL ضروری است، چون اتصالهای MySQL بهصورت پیشفرض رمزنگارینشدهاند و داده میتواند بهصورت متن ساده شنود شود.
نشانههایی مثل ورودهای ناموفق فراوان، اتصال از IPهای ناشناس، تغییر داده یا کاربران بدون توضیح، و کندی غیرعادی میتوانند هشدار باشند. به همین دلیل لاگبرداری و پایش اهمیت دارد؛ بدون لاگ، اغلب نفوذ تنها بعد از نشت داده کشف میشود. پایش منظم به شما اجازه میدهد زودتر واکنش نشان دهید.
امنیت یک فرایند مستمر است، نه پروژهای یکبار مصرف. باید نسخهها را بهروز نگه دارید، دسترسیها را دورهای بازبینی کنید، لاگها را پایش کنید و بکاپها را بیازمایید. تهدیدها تغییر میکنند و تنظیم امنِ امروز ممکن است فردا کافی نباشد.